Programujeme Raspberry Pi Pico v jazyku MicroPython
základy práce s doskou Raspberry Pi Pico v jazyku MicroPython
Upozornenie
Pred príchodom na cvičenie si doma nainštalujte editor Thonny.
Na samotné cvičenie si nezabudnite priniesť vlastné Raspberry Pi Pico W/H!
Motivácia
Goals
- naučiť sa základy programovania v jazyku MicroPython na doske Raspberry Pi Pico
Content
Predtým, ako začneme
Ešte predtým, ako začneme, si nainštalujte editor Thonny a do mikrokontroléra Raspberry Pi Pico nahrajte firmvér s jazykom MicroPython.
Niekoľko tipov pri práci:
Pico na doske neobsahuje tlačidlo
RESET
. Reštartovať ho je však jednoduché odpojením a opätovným pripojením USB kábla. Vyhnite sa však jeho odpájaniu a pripájaniu na strane mikrokontroléra! Vyhnete sa tak možnosti odtrhnutia tohto konektoru a tým pádom aj jeho celkovému poškodeniu. Miesto toho odpájajte USB kábel na strane počítača.V prípade, že chcete mikrokontrolér reštartovať softvérovo, môžete tak urobiť príkazom:
from machine import reset; reset()
Softvérový reset zariadenia sa dá vykonať ešte jednoduchšie - stlačením klávesovej skratky
CTRL+D
Poznámka
V prípade, že nemáte fyzicky k dispozícii dosku Raspberry Pi Pico W, môžete na účely cvičenia využiť online simulátor Wokwi. Síce v ponuke zariadení sa nachádza len Raspberry Pi Pico bez WiFi modulu, na potreby cvičenia si vystačíte aj s mikrokontrolérom ESP32 a jazykom MicroPython.
Poznámka
Ak preferujete pre prácu Visual Studio Code, pre prácu s Raspberry Pi Pico si môžete nainštalovať rozšírenie Pico-W-Go.
Blikáme LED-kou
Podobne, ako je v prípade programovania prvým programom
Hello world!
, tak v prípade hardvéru sa jedná o zapojenie s
názvom Blink
. Doska RPi Pico na sebe obsahuje LED diódu,
ktorú sa pokúsime rozblikať. A tým predstaviť aj základy práce s touto
doskou.
Task
Vypíšte do terminálu text Hello world!
V mikrokontroléri sa nachádza nahratý interpretér jazyka Python, s ktorým komunikujeme pomocou sériovej linky. Takže akýkoľvek príkaz, ktorý napíšeme, sa vykoná priamo týmto interpretérom.
>>> print('Hello world!')
Ak chceme vedieť, čo máme k dispozícii, tak môžeme napísať príkaz
help('modules
). Výsledkom bude zoznam zabudovaných modulov
jazyka MicroPython:
>>> help('modules')
/lock upip
__main__ gc uasyncio/stream upip_utarfile
_boot lwip uasyncio
_boot_fat math ubinascii urandom
_onewire micropython ucollections ure
_rp2 neopixel ucryptolib urequests
_thread network uctypes uselect
_uasyncio onewire uerrno usocket
_webrepl rp2 uhashlib ussl
builtins uarray uheapq ustruct/__init__ uio usys
cmath uasyncio/core ujson utime
dht uasyncio/event umachine uwebsocket
ds18x20 uasyncio/funcs uos uzlib
framebuf uasyncioany modules on the filesystem Plus
Task
Rozsvieťte LED diódu pomocou interaktívneho interpretra jazyka Python.
from machine import Pin
= Pin('LED', Pin.OUT)
led
led.on()
led.off()1)
led.value(0)
led.value(
led.value() led.toggle()
Poznámka
Reťazec "LED"
je možné na doske Raspberry Pi
Pico napísať až od jazyka MicroPython verzie
1.19. Ak máte staršiu verziu, resp. máte dosku Raspberry Pi
Pico bez WiFi modulu, musíte uviesť číslo pinu
25
.
Poznámka
Ak pracujete v online simulátore Wokwi s doskou
ESP32, LED dióda je pripojená k pinu č. 2
.
Task
V module blink.py
vytvorte jednoduchú verziu programu
blink
, ktorý rozsvieti zabudovanú LED diódu na
2s
potom ju na 1s zhasne
.
from time import sleep
from machine import Pin
= Pin('LED', Pin.OUT)
led
while True:
led.on()2)
sleep(
led.off()1) sleep(
Pripojenie do siete WiFi
Task
Do súboru boot.py
umiestnite funkciu
do_connect()
podľa vzoru nachádzajúceho sa v dokumentácii
jazyka MicroPython.
Funkciu môžeme upraviť nasledovne:
def do_connect(ssid, password):
import network
= network.WLAN(network.STA_IF)
wlan True)
wlan.active(if not wlan.isconnected():
print('connecting to network...')
connect(ssid, password)
wlan.while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
Task
Otestujte vytvorenú funkciu pripojením sa do WiFi siete.
To môžeme zabezpečiť priamo z príkazového riadku napísaním:
>>> do_connect('wifi_siet', 'heslo')
'10.42.0.67', '255.255.255.0', '10.42.0.1', '10.42.0.1') Network config: (
Poznámka
Ak používate online simulátor Wokwi, pripájajte sa do WiFi siete nasledovne:
>>> do_connect('Wokwi-GUEST', '')
Ovládanie LED diódy pomocou protokolu MQTT
Task
Nainštalujte si modul pre prácu s protokolom MQTT.
Firmvér na doske Raspberry Pi Pico neobsahuje potrebný modul
pre prácu s protokolom MQTT. Preto si ho potrebujete buď stiahnuť a
prekopírovať ručne do priečinku lib/
v mikrokontroléri
alebo ho nainštalovať pomocou balíčkovacieho systému pip
nasledovne:
>>> import upip
>>> upip.install('umqtt.simple')
>>> upip.install('umqtt.robust')
Poznámka
Ak používate jazyk MicroPython na doske s mikrokontrolérom ESP32, tento krok robiť nemusíte, pretože potrebné balíky pre prácu s protokolom MQTT sú v tomto firmvéri dostupné.
Task
Vytvorte MQTT klienta.
from umqtt.robust import MQTTClient
= MQTTClient('unique-client-id', 'broker.hivemq.com')
mqtt connect() mqtt.
Task
Overte
To môžeme jednoducho tak, že pošleme správu.
>>> mqtt.publish('kpi/iot/messages', 'hello world')
Task
Vytvorte callback funkciu, ktorá sa zavolá vždy, keď mikrokontrolér dostane správu.
def on_message(topic, message):
= topic.decode('utf-8')
topic = message.decode('utf-8')
message
print(f'{topic} {message}')
Task
Overte vytvorenú funkciu
'iot/messages/lights/mirek')
mqtt.subscribe(
print('Waiting for message...')
mqtt.wait_msg()
poznámky: * metoda .subscribe()
sa musi volať až po
pripojení k MQTT brokeru * metóda .wait_msg()
je
blokujúca
Task
Upravte callback funkciu on_message()
tak, že v prípade,
že dostanete správu on
, rozsvieťte LED diódu a v prípade,
že dostanete metódu off
, LED diódu zhasnite.
from machine import Pin
= Pin('LED', Pin.OUT)
led
def on_message(topic, message):
= topic.decode('utf-8')
topic = message.decode('utf-8')
message
if message == 'on':
print('turning led on')
led.on()elif message == 'off':
print('turning led off')
led.off()
Publikovanie teploty pomocou protokolu MQTT
Mikrokontrolér RP2040, ktorý je srdcom dosky RPi Pico obsahuje zabudovaný senzor pracovnej teploty. Ten je pripojený na analógovo-digitálny prevodník na GPIO pin 4. Vytvoríme si modul s pomocnými funkciami a v ňom funkciu na odčítanie jeho hodnoty.
Task
V module helpers.py
vytvorte funkciu
get_temperature()
, ktorá vráti hodnotu internej pracovnej
teploty mikrokontroléra RP2040 v stupňoch celzia.
from machine import ADC
def get_temperature():
# read the temperature
= ADC(4)
sensor = 3.3 / (65535)
conversion_factor
= sensor.read_u16() * conversion_factor
reading = 27 - (reading - 0.706)/0.001721
temperature
return temperature
Task
Overte správnosť vytvorenej funkcie.
Na overenie stačí funkciu zavolať priamo z príkazového riadku interpretéra jazyka Python na mikrokontroléri:
>>> from helpers import get_temperature
>>> get_temperature()
28.91698
Task
Zabezpečte, aby sa údaje o teplote publikovali pomocou protokolu MQTT v pravidelných 1 minútových intervaloch.
Additional Links
Getting started with Raspberry Pi Pico - Návod ako začať s RPi Pico pre každého
Getting started with your Raspberry Pi Pico W - Návod, ako začať s RPi Pico W
Introduction to Raspberry Pi Pico: LEDs, buzzers, switches, and dials - sada návodov na prácu s RPi Pico
Get Started with MicroPython on Raspberry Pi Pico - kniha zdarma, ktorá je plná návodov pre každého začiatočníka s doskou RPi Pico
Quick reference for the RP2 - (krátka) dokumentácia jazyka MicroPython pre dosku Raspberry Pi Pico