Lab #1: Programujeme Raspberry Pi Pico v jazyku MicroPython
alebo nie príliš stručný úvod do programovania chytrých zariadení v jazyku MicroPython
Videá pre cvičenie
Motivácia
Ciele
Zoznámiť sa s organizáciou predmetu.
Zoznámiť sa s RPi Pico Kit-om.
Zoznámiť sa s rozšírením MicroPython Tools pre vývojové prostredie PyCharm.
Naučiť sa nastaviť vlastnosti projektu v prostredí PyCharm pre prácu s jazykom MicroPython.
Naučiť sa nahrať na mikrokontrolér firmvér s jazykom MicroPython.
Postup
Predtým, ako naozaj začneme
Ešte skôr, ako naozaj začneme, sa pripravíme na prácu počas semestra. Prihlásite sa do komunikačného systému Slack, ktorý budeme používať v rámci rýchlej komunikácie s vami, a v GitLab-e si vytvoríte projekt, ktorý budete používať na odovzdávanie vašich zadaní.
Task
Prihláste sa do komunikačného systému Slack.
Slack budeme používať pre rýchlu komunikáciu. Ak sa chcete prihlásiť do komunikačného kanálu predmetu, tak použite túto linku.
Komunikačný kanál predmetu nájdete na adrese https://kpi-iot1-2026.slack.com.
Pri registrácii použite svoju študentskú e-mailovú adresu (s doménou
@student.tuke.sk alebo @tuke.sk).
Počas komunikácie sa však snažte dodržiavať nasledovné pravidlá:
- Správajte sa (voči sebe) slušne!
- Vo svojich príspevkoch neposielajte úplné alebo čiastočné riešenia úloh, ktoré predstavujú riešené zadanie alebo jeho časť!
- Vo svojich príspevkoch neposielajte obrázky, ktoré obsahujú kód alebo výpis obrazovky! Takéto obrázky budú odstránené! Pošlite ich ako text (ktorý sa dá okrem iného aj skopírovať a tým pádom jednoduchšie vyskúšať vašu problematickú časť).
- Obrázky (ideálne memečka), prípadne pozvánky na zaujímavé akcie,
môžete posielať napr. do kanála
#social, ktorý je na to určený. - Na otázky ohľadom zadaní používajte na to určené kanály!
Task
Prihláste sa na GitLab a vytvorte si nový projekt.
Ak vytvárate projekt prvýkrát, urobte tak na tejto stránke.
Tento projekt bude tzv. Monorepo, ktorý je možné definovať nasledovne:
Monorepo je jeden repozitár, ktorý obsahuje viacero samostatných projektov s jasne definovanými vzájomnými vzťahmi. – Monorepo.tools
Názov vytvoreného projektu bude v tvare iot1-X, kde
X je poradové číslo vytváraného projektu.
Poznámka
V materiáloch s cvičeniami budeme používať názov projektu
iot1-2026. To však neznamená, že váš projekt, ktorý ste si
vytvorili v GitLab-e, sa bude
alebo sa má volať práve takto. Poradové číslo vášho projektu bude totiž
úplne iné.
Upozornenie
Ak nebudete vedieť projekt u seba lokálne naklonovať alebo inak pracovať so vzdialeným repozitárom, skontrolujte svoje SSH kľúče! Návod, ako na to, nájdete napríklad v jednom z návodov predmetu Základy algoritmizácie a programovania.
Upozornenie
Z projektu neodchádzajte ani sa ho nesnažte odstrániť! Na odstránenie projektu totiž nemáte práva a budete mať len zbytočný problém s návratom do neho! Pre opätovný návrat do projektu totiž budete musieť kontaktovať svojho cvičiaceho, aby vám s tým pomohol. A otravovať svojho cvičiaceho určite nechcete :-P
Predstavenie Smart Department
- IoT je o veciach
- rozhodne nie je len o tom, ako dostať namerané údaje z vášho chytrého zariadenia na webovú stránku
- 3-vrstvová architektúra
V rámci predmetu, a hlavne v rámci cvičení, sa postupne pozrieme na každú vrstvu, konkrétne:
- vrstva - vytvoríme si vlastné chytré zariadenie (vec)
- vrstva - pomocou kontajnerov si vytvoríme zariadenie IoT gateway z vlastného počítača a naučíme sa doň integrovať zariadenia tretích strán, ktoré komunikujú pomocou iných technológií než TCP/IP, napr. BLE alebo Zigbee
- vrstva - vytvoríme aplikácie poskytujúce používateľské rozhranie pre koncových používateľov a vlastné mikroslužby
ProblemSet #1: THSensor
Na prvej vrstve architektúry Smart Department sa nachádzajú chytré zariadenia. A presne tejto vrstve a tomuto typu zariadení sa venuje prvé zadanie. Cieľom bude vytvoriť chytrý senzor teploty a vlhkosti.
V tomto kroku sa zoznámite s hardvérom, ktorý budete potrebovať na vytvorenie tohto zariadenia.
Task
Zoznámte sa s komponentmi potrebnými pre vytvorenie chytrého zariadenia.
Zoznam komponentov pre vývoj chytrého zariadenia nájdete na stránke RPi Pico Kit. Srdcom chytrého zariadenia bude mikrokontrolér z rodiny mikrokontrolérov RP (konkrétne RP2350 na doske RPi Pico 2 WH) a programovať ho budeme v jazyku MicroPython.
Task
Zoznámte sa so špecifikáciou projektu pre vytvorenie chytrého zariadenia.
Kompletné znenie zadania so všetkými požiadavkami na vytvorenie vášho chytrého zariadenia sa nachádza na stránke zadania. Jeho tvorbe sa budeme postupne venovať počas nasledujúcich cvičení.
Programovanie v jazyku MicroPython
Hlavným programovacím jazykom predmetu bude jazyk Python. Pri programovaní chytrých zariadení však budeme používať verziu tohto jazyka určenú pre zariadenia s obmedzenými schopnosťami - MicroPython. V tomto kroku sa na prácu s ním pripravíme.
Task
Nainštalujte si vývojové prostredie PyCharm.
Ako študenti máte možnosť počas štúdia využiť bezplatný prístup k plateným verziám produktov od spoločnosti JetBrains. A vývojové prostredie PyCharm patrí medzi najlepšie prostredia, ktoré môžete pre vývoj aplikácií v jazyku Python použiť.
Task
Do vývojového prostredia PyCharm si nainštalujte rozšírenie MicroPython Tools.
Prostredie PyCharm je určené na programovanie v jazyku Python, ale nie na programovanie v jazyku MicroPython. Aby to bolo možné, je potrebné nainštalovať rozšírenie MicroPython Tools.
Vytvorenie projektu s podporou jazyka MicroPython
V priečinku monorepa vytvoríme projekt s názvom
thsensor, ktorý bude obsahovať implementáciu nášho chytrého
zariadenia. Okrem štandardného postupu pre vytvorenie projektu je
potrebné v ňom zapnúť podporu pre jazyk MicroPython. Všetky potrebné
úlohy vykonáme v tomto kroku.
Task
V priečinku svojho monorepa si pomocou vývojového prostredia PyCharm vytvorte nový
projekt s názvom thsensor.
Pri vytváraní projektu nechajte predvolené nastavenia:
- bude sa jednať o projekt typu Pure Python, a
- typ interpretera nechajte nástroj
uv.
V priečinku thsensor sa bude nachádzať kód v jazyku MicroPython pre naše chytré
zariadenie.
Po vytvorení projektu v ňom vytvorte samostatný priečinok
src/, v ktorom sa bude nachádzať samotný kód
implementácie.
Task
V projekte thsensor zapnite podporu pre jazyk MicroPython.
Vývojové prostredie PyCharm zatiaľ nevie
pracovať v projekte s jazykom MicroPython. Podporu zapneme
priamo z panelu rozšírenia MicroPython
Tools kliknutím na linku Change settings....
Po kliknutí sa zobrazí dialógové okno s nastaveniami projektu -
konkrétne panel s podporou jazyka MicroPython vo vašom projekte.
Podporu zapnete kliknutím na zaškrtávacie políčko
Enable MicroPython support.
Nakoniec ešte nastavíme podporu pre Type Hints jazyka MicroPython, aby nám korektne
fungovalo inteligentné dopĺňanie kódu (intellisense). V dialógu
s nastaveniami zaškrtneme políčko
Enable MicroPython type hints a zo zoznamu tzv. stub-ov
vyberieme ten, ktorý je určený pre naše zariadenie. V prípade dosky RPi Pico 2 WH sa jedná o stub s
názvom micropython-rp2-rpi_pico2_w-stubs. Zo zoznamu si
vyberieme stub s najnovšou verziou. Tento stub nainštalujeme (tlačidlo
Install/Update) a zvolíme (tlačidlo
Select).
Poznámka
Stub je súbor (alebo balík súborov) s príponou
.pyi, ktorý obsahuje len signatúry funkcií, tried a modulov
(názvy, parametre, typy, návratové hodnoty) bez ich samotnej
implementácie.
Pre MicroPython existuje mnoho stubov,
ktoré sú špecifické podľa toho, na akom mikrokontroléri daný kód beží
(napr. rp2 pre RP2040/RP2350 alebo esp32 pre
ESP32) - stub tak vývojovému prostrediu opíše presne tie moduly a
funkcie, ktoré sú pre dané zariadenie dostupné (napr.
machine, network a pod.), a vďaka tomu funguje
našepkávanie a kontrola typov aj napriek tomu, že daný kód sa v
skutočnosti nespúšťa priamo v PyCharm-e, ale až na
mikrokontroléri.
Task
Nahrajte firmvér s jazykom MicroPython do mikrokontroléra dosky RPi Pico 2 WH.
Po zakúpení dosky sa na nej firmvér s jazykom MicroPython nebude nachádzať. Nahrať si ho na dosku môžete viacerými spôsobmi. My na to použijeme priamo rozšírenie MicroPython Tools z vývojového prostredia PyCharm. Podrobný postup nájdete na stránke Inštalácia jazyka MicroPython.
Prvá (naivná) implementácia
Keď budeme mať všetko pripravené, môžeme vytvoriť prvú (veľmi naivnú) implementáciu chytrého zariadenia. Chytré zariadenie bude v pravidelných intervaloch merať teplotu a vlhkosť zo senzora DHT11/22 a namerané hodnoty bude posielať cez WiFi modul do internetu.
Túto implementáciu vytvoríme v jazyku MicroPython pomocou vývojového prostredia PyCharm.
Task
V jazyku MicroPython
vytvorte program, ktorý bude v pravidelných 10s intervaloch
merať teplotu a vlhkosť zo senzora DHT11/22,
ktorého dátový pin bude pripojený ku GPIO pinu číslo
3.
Program vytvoríme v súbore main.py v priečinku
src/, ktorý sa spustí ako prvý po zapnutí
mikrokontroléra.
Jednoduchá a naivná implementácia môže vyzerať napríklad takto:
from machine import Pin
from dht import DHT22 as DHT
import time
sensor = DHT(Pin(3, Pin.IN, Pin.PULL_UP))
while True:
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
print(f"Temperature: {temperature} °C | Humidity: {humidity} %")
time.sleep(10)Poznámka
Ukážka počíta so senzorom DHT22. Ak máte senzor DHT11 (napr. z Arduino Uno Kitu), nahraďte v kóde riadok
from dht import DHT22 as DHTriadkom
from dht import DHT11 as DHTZvyšok kódu zostáva rovnaký.
Task
Vytvorte spúšťač pre nahratie a spustenie vytvoreného kódu na doske s jazykom MicroPython.
Ak v tomto momente spustíme program, interpretuje ho lokálny Python interpreter. Našim cieľom je však nahrať ho na mikrokontrolér a spustiť ho na ňom.
Aby to bolo možné, potrebujeme vytvoriť vlastný spúšťač z niektorej
šablóny z rozšírenia MicroPython
Tools. To je možné pomocou menu
Run > Edit Configurations....
V dialógovom okne vyberieme nasledovné:
- pridáme novú konfiguráciu
MicroPython Tools > Upload - v časti
Source Mappingspridámesrc/priečinok, ktorý sa namapuje na koreňový priečinok mikrokontroléra - zaškrtneme políčko
Synchronize, ktoré zabezpečí, že to, čo máme v zdrojových priečinkoch, bude aj v cieľovom zariadení
Vytvorenú konfiguráciu potvrdíme kliknutím na tlačidlo
OK.
Task
Otestujte svoju implementáciu.
Ak ste postupovali správne, po spustení spúšťača sa kód nahrá na
mikrokontrolér a spustí. Výsledok uvidíte v konzole panelu
MicroPython Tools.
Temperature: 23.5 °C | Humidity: 39.2 %
Temperature: 23.6 °C | Humidity: 39.1 %
Task
Pripojte svoje zariadenie do internetu pomocou WiFi modulu na doske.
Na pripojenie do WiFi siete môžeme použiť nasledujúci fragment kódu, ktorý vložíme pred inicializáciu senzora DHT:
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Connecting to network...')
wlan.connect('ssid', 'password')
while not wlan.isconnected():
pass
print('Network config:', wlan.ifconfig())Poznámka
Pre fungovanie kódu nezabudnite zmeniť SSID názov siete a heslo pre prístup do nej.
Keď sa zariadenie úspešne pripojí do siete, vypíše informácie o pripojení. Výstup môže vyzerať napríklad takto:
Connecting to network...
Network config: ('192.168.1.177', '255.255.255.0', '192.168.1.1', '192.168.1.1')
Task
Namerané hodnoty odošlite do niektorej voľne dostupnej služby pomocou protokolu HTTP.
Pre otestovanie môžeme použiť napr. službu Webhook.site. Údaje pošleme vo formáte
JSON pomocou modulu requests.
Po načítaní hodnôt zo senzora môžeme údaje odoslať pomocou
nasledujúceho fragmentu kódu, ktorý vložíme pred volanie funkcie
sleep():
import requests
response = requests.post(
"https://webhook.site/UNIKATNA_URL_ADRESA",
json={
"temperature": temperature,
"humidity": humidity,
},
)
response.close()Task
Overte správnosť svojej implementácie.
Ak ste postupovali správne, každý JSON dokument s nameranými hodnotami sa vám zobrazí v rozhraní webu Webhook.site.
Task
Diskutujte o vytvorenej implementácii.
S takto naivnou implementáciou sa dá stretnúť v rozličných tutoriáloch, knihách, videách, kurzoch, ale rozhodne to nie je implementácia, ktorú by ste ako vývojári chceli predávať, a ktorú by ste si ako potenciálny zákazník chceli kúpiť. V čom vidíte problém - ako zákazník, ale aj ako vývojár?
Kostra aplikácie
Pri vývoji nášho chytrého zariadenia budeme mať v prvom rade na zreteli koncového používateľa. Budeme sa preto snažiť vytvoriť produkt, ktorý bude:
- jednoduchý na nastavenie (bez zásahu do zdrojového kódu),
- odolný voči výpadkom napájania a siete,
- schopný informovať o svojom aktuálnom stave a
- úsporný, aby dokázal fungovať na batériu čo najdlhšie.
Takéto požiadavky je nepraktické splniť jedným dlhým skriptom, aký sme vytvorili v predchádzajúcom kroku. Preto použijeme kostru aplikácie, ktorá kód rozdelí do samostatných balíkov a modulov s jasne definovanou zodpovednosťou. Každý z nich bude možné neskôr jednoducho upraviť, vymeniť (napr. pri zmene senzora) alebo rozšíriť (napr. pri pridaní novej funkcie zariadenia).
Task
Stiahnite si kostru projektu a nahrajte ju do priečinka
src/.
Kostru projektu nájdete na stránke s prvým zadaním.
Upozornenie
Priebežne sledujte, či náhodou nedôjde k aktualizácii tejto kostry. V prípade, že áno, nezabudnite si ju aktualizovať aj vo svojom projekte.
Ďalšie zdroje
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
MicroPython - domovská stránka projektu
Quick reference for the RP2 - (krátka) dokumentácia jazyka MicroPython pre dosku Raspberry Pi Pico
PyCharm - domovská stránka vývojového prostredia
MicroPython Tools - domovská stránka rozšírenia
DHT11/22 - senzory z rodiny DHT
Webhook.site - služba na testovanie HTTP požiadaviek
Práca s protokolom HTTP - používanie modulu
requestsv jazyku MicroPythonMicroPython Stubs - Stubs of most MicroPython ports, boards and versions to make writing code that much simpler.
