Fyzikální kabinet FyzKAB

Články Moduly ESP32 a ESP32-CAM ESP32 + MicroPython Thonny a první skript pro ESP32

Thonny IDE a první MicroPython skript pro ESP32

V minulém článku jsme zvládli úspěšné nastavení modulu ESP32 pro vykonávání programových skriptů v MicroPythonu, což jsme završili úspěšným zablikáním vestavěné LED. Můžeme se tedy nyní trochu více zaměřit na samotné prostředí Thonny a vůbec obecný postup tvorby a spouštění skriptů v Pythonu pro modul ESP32.

Jako výchozí skript opět použijeme náš minulý skript „Hello World!“ s blikáním vestavěné LED. Ukážeme si na něm drobný úvod do programování v MicroPythonu pomocí prostředí Thonny IDE.

import time
from machine import Pin

print("Hello World")
p2 = Pin(2, Pin.OUT)

while True:
  p2.on()
  time.sleep_ms(250)
  p2.off()
  time.sleep_ms(250)


POZNÁMKA:
V následujících textech o programování modulu ESP32 se bude předpokládat drobná znalost syntaxe jazyka Python, nebo alespoň chuť tuto znalost získat z ukázkových kódů.

Vysvětlení MicroPython skriptu

I když jsme právě zmínili, že od čtenáře očekáváme alespoň určité základy jazyka Python, přeci jen nám to nedá a určitý základ zde uvedeme. Jednotlivé důležité části programu si ukážeme na našem prvním skriptu.

Skript lze rozdělit na dvě základní části:

  • import
  • hlavní program
struktura programu MicroPython

Každý skript MicroPythonu začíná fází importu modulů nezbytných pro správné fungování. Je to tak trochu ekvivalentní úvodní sekci #include v kódu Wire v prostředí Arduino IDE, kde tímto způsobem připojujeme externí knihovny – např. #include <SPI.h>, #include <SD.h>

V případě MicroPythonu je třeba jen zdůraznit, že i základní objekty musí být importovány. Připomínáme, že Python je objektově orientovaný jazyk, což znamená, že všechny prvky v Pythonu jsou považovány za objekty. Například vstupně/výstupní piny modulu ESP32 (jak uvidíme hned v následujícím článku) budou přístupné a bude možné s nimi manipulovat jedině jako s objekty. Na druhou stranu to není zase tak hrozné a uvidíme, že objekty MicroPythonu lze snadno používat, aniž bychom museli být expertem na objektově orientované programování.

V ukázkovém skriptu nejdříve importujeme modul time, který nám bude sloužit pro nastavení čekání při rozsvícení a zhasnutí vestavěné LED. Druhý importovaný objektem je Pin. Ten je načten z modulu machine, který obsahuje většinu objektů specifických pro MicroPython. Objekt Pin je ve skutečnosti třída, která definuje činnost vstupního/výstupního pinu (GPIO). Proto na začátku oblasti hlavního programu vytvoříme jeho instanci p2, což odpovídá kolíku GPIO2, který ovládá vestavěnou LED. Tento pin pochopitelně definujeme jako elektrický digitální výstup Pin.OUT. Objekt Pin, který jsme vytvořili, má funkce pro úpravu svého stavu .on() pro rozsvícení LED a .off() pro vypnutí LED.

Pokud jste někdy používali kód Wire v prostředí Arduino IDE, víme, že se tam využívají dvě základní funkce – setup() pro výchozí nastavení a funkce nekonečné smyčky loop() pro nekonečné vykonávání hlavní části programu. V Pythonu nic takového není, zde je skript spustěn a vykonává se jen jednou a to pěkně shora dolů. Takže je nutné si nekonečnou smyčku vytvořit pomocí struktury while True:. Příkazy vnořené (pomocí odsazení) do této smyčky se pak chovají podobně jako příkazu nekonečné smyčky v programu prostředí Arduino IDE.

V naší nekonečné smyčce kromě rozsvěcení a zhasínání vestavěné LED přidáme i 250 ms zpoždění pomocí příkazu time.sleep_ms(250), což je funkce modulu time. Ve skutečnosti existují 3 funkce, které nám umožňují zastavit program na určitou dobu. Každá z nich je s jinou úrovní přesnosti (sekundy, milisekundy a mikrosekundy):

time.sleep(duration_in_seconds)
time.sleep_ms(duration__milliseconds)
time.sleep_us(duration__microseconds)


Následující zápisy jsou si ekvivalentní:

time.sleep(0.005)
time.sleep_ms(5)
time.sleep_us(5000)


Nakonec nesmíme zapomenout na příkaz print("Hello World"), který je na začátku bloku hlavního programu a který jsme nějak přeskočili. 😉 Pochopitelně příkaz print() je příkazem výstupu a jeho úkol je vypsání zadané hlášky na výstup – zde do Shell okna připojeného prostředí Thonny IDE.

Už tedy asi víme, jak funguje výše uvedený kód, díky kterému vestavěná LED bliká do nekonečna.

Nahrávání skriptu do MicroPython zařízení

Programový kód vytvoříme nebo překopírujeme do hlavního okna vývojového prostředí Thonny IDE. Je lepší ukládat kód do počítače a ne přímo na desku – alespoň do chvíle, než je kód hotový a již má na desce ESP32 začít sloužit svému účelu. Zde je ale třeba zdůraznit, že i když je kód uložen na počítači, ve skutečnosti se vykonává přímo na desce mikrokontroléru. Je to způsobeno tím, že jsme při instalaci MicroPythonu (viz minulý článek) v menu Běh → Configure Interpreter… nastavili ve volbě: „Který interpretr má Thonny použít je spuštění vašeho kódu?“ hodnotu MicroPyhon (ESP32).

configure interpreter ESP32

Díky tomu prostředí Thonny IDE při provádění skriptu (kliknutí na tlačítko ) odešle kód přímo do interpretru MicroPythonu (přes REPL) a kód je tak vykonáván v daném MicroPython zařízení.

Na konci minulého článku jsme si všimli, že modul ESP32 blikal vestavěnou LED, jen pokud bylo otevřené okno prostředí Thonny IDE. Jakmile jsme okno aplikace zavřeli, modul ESP32 přestal fungovat. To je právě důsledek toho, že v tomto případě je programový skript do modulu jen zaslán prostředím Thonny IDE, ale není tam uložen jako trvalý programový kód. Pro vývoj programu je to asi tak ideální, ale pro trvalé použití v modulu ESP32 nikoliv

Můžeme si tedy říci: „O.K., tak nyní uložím kód svého skriptu do modulu ESP32 a je hotovo!“. Konec konců volba Soubor → Uložit jako… přímo možnost uložení do MicroPython zařízení (modulu ESP32) umožňuje.

Thonny - ulozit skript

Klidně to udělejme. Název kód můžeme zvolit například muj-prvni-skript.py. Při ukládání vidíme, že v modulu ESP32 je již jeden skript uložený (nazvaný boot.py). Ten rozhodně nepřepisujeme!

Thonny - ulozeni do zarizeni

UPOZORNĚNÍ:
Pokud je na desce ESP32 spuštěný skript (v našem případě vestavěná LED na modulu ESP32 bliká), skončí náš pokus o uložení chybovou hláškou:
chybova hlaska
V takovém případě je nutné aktuální úlohu ukončit červeným tlačítkem 🛑STOP na liště hlavního okna a pokus o uložení opakovat.

Soubor jsme úspěšně uložili na modul ESP32. Ale zdá se, že se nic neděje. Skript Python se na desce sám nevykonává! Je to pochopitelné, náš projekt může obsahovat několik skriptů a souborů a jak má interpretr MicroPythonu vědět, který má začít vykonávat?

Zkusíme tedy naši chybu napravit. Opět vyvoláme volbu Uložit jako… a skript uložíme do modulu ESP32 pod názvem main.py.

Thonny - ulozeni main.py

Nyní vidíme, že po spuštění skriptu se vestavěná LED rozbliká a bliká i po zavření okna aplikace Thonny IDE. Dokonce se LED rozbliká, jakmile modul ESP32 připojíme do USB portu nebo k jinému napájení. Pochopitelně, po zapnutí napájení se v modulu spustí interpretr MicroPythonu, který automaticky spustí skript pojmenovaný main.py. Během vývojové fáze se obecně toto pojmenování dodržovat nemusí, ale je důležité vědět, že pokud chceme skript použít na desce jako „samospouštěcí“, je to nutné.

DŮLEŽITÉ:
Chceme-li, aby se po zapnutí modulu ESP32 začal náš skript vykonávat, musíme jej uložit na desku pod názvem main.py.

Máme tu však další dva problémy:

  1. Jak vidíme z předešlého obrázku, na desce ESP32 stále zůstal uložený náš původní skript muj-první-skript.py, který je tam zbytečný.
  2. Jakmile spustíme vykonávání skriptu main.py pomocí zeleného tlačítka na hlavní liště prostředí Thonny IDE, nepodaří se nám vykonávání skriptu zastavit červeným tlačítkem 🛑STOP.

Začneme nejdříve řešením toho druhého problému. Červené tlačítko 🛑STOP je ve skutečnosti nejen zastavením skriptu, ale i resetováním interpretru, což v případě normálního skriptu vykonávání skutečně zastaví. Ale v případě, že je v modulu skript main.py, resetovaný interpretr jej opět načte a spustí. V případě, že chceme zastavit běžící skript main.py musíme jej zastavit volbou Běh → Přerušit běh. Vykonávání aktuálního skriptu se zastaví a v Shell okně se opět objeví příkazový řádek Pythonu.

Thonny - zastaveni main.py

V případě problému, jak se zbavit skriptu v modulu ESP32, využijeme například dialogu pro načtení, uložení nebo přejmenování souboru – všechny najdeme v menu pod volbou Soubor. V dialogovém okně souborů vybereme zvolený soubor a pravým tlačítkem vyvoláme kontextové menu, kde se nachází volba Smazat.

Thonny - smazani skriptu v zarizeni

UPOZORNĚNÍ:
Při mazání souborů na desce ESP32 buďme opatrní, ať omylem nestažeme výchozí soubor boot.py

Trochu se omlouváme všem, kteří se po minulém článku těšili, že se dnes již pustíme do konkrétního ovládání modulu ESP32 pomocí jazyka Python. Původně jsme to měli v úmyslu, ale pak jsme si řekli, že má-li být tento seriál základním seznámením s MicroPythonem pro ESP32 a prostředím Tonny IDE, je třeba si ještě pár věcí „před startem“ ukázat. Snad ale i  tak tento dnešní text přinesl aspoň pár zajímavých informací, které nám pro práci s modulem ESP32 pomocí Thonny IDE budou později užitečné.

V příštím díle našeho seriálu se již zaměříme na ovládání modulu ESP32, konkrétně si postupně projdeme možnost nastavení a ovládání GPIO kolíků. Rádi bychom postupně zvládli tyto piny nastavit jako digitální i analogové vstupy a výstupy, abychom si otevřeli dveře k načítání čidel a řízení periférií.

Reklama:
UPOZORNĚNÍ:
Nesouhlasíme s vyřazením Newtonových zákonů, Ohmova zákona a zákona zachování energie z učiva fyziky základních škol v České republice!