IoT prakticky: Python na ESP32, vývojové dosky, inštalácia Micropythonu

Po experimentoch s populárnou „školskou“ mikropočítačovou doskou BBC Micro:bit pre tých, ktorých táto problematika oslovila a chcú sa jej venovať ako hobby, skôr, či neskôr nastane moment, kedy si položia otázku: „Ako ďalej?“. Inak povedané, budú chcieť začať používať pokročilejšiu platformu, ktorá im poskytne viac možností. Ako jednu z najzaujímavejších možností odporúčame modernú a výkonnú platformu ESP32. Dosky s touto rodinou mikrokontrolérov sú lacné (typicky 10 – 20 eur) a už priamo na čipe je vyriešená komunikácia cez WiFi, takže sa jedná o plnohodnotnú IoT platformu.

Téma predstavenia dosiek s ESP32 a inštalácia Micropythonu je názorne prebratá v našom videu.

Čip s označením ESP32 od spoločnosti Espressif Systems je nasledovníkom obľúbeného čipu ESP8266, ktorý bol zamýšľaný ako WiFi modul, avšak dal sa programovať, takže sa využíval aj ako mikrokontrolér.

Varianty vývojových dosiek s 2 x 15 a 2 x 19 pinmi

Najvýznamnejšou novinkou ESP32 je, že tento čip je už primárne určený ako mikrokontrolér. Podporuje aj Bluetooth 4.0 LE, takže zariadenia s týmto čipom môžu popri WiFi využívať aj tento typ komunikácie. Napríklad na prepojenie s mobilným telefónom. ESP32 má dvojjadrový procesor s 32 bitovými jadrami Xtensa LX6 taktovanými na 160 MHz. Jedno jadro rieši WiFi komunikáciu a druhé máte k dispozícii pre svoj program. Jadrá sa dajú pretaktovať až na 240 MHz. K dispozícii je až 36 GPIO pinov. Kapacita pamäti Flash je 4 MB a RAM je tvorená tromi blokmi s celkovou kapacitou 520 kB. Používateľ má k dispozícii približne 400 kB RAM. Zavádzací program je v ROM s kapacitou 448 kB.

Architektúra čipu (vľavo) a hardvér na vývojovej doske (vpravo)

Hardvérovú výbavu ESP32 ďalej tvorí:

  • 34 × programovateľných GPIO pinov. Ktorýkoľvek GPIO je možné využiť ako PWM, maximálne však 16 kanálov.
  • 12-bit SAR ADC do 18 kanálov. ESP32 disponuje 8 kanálovým ADC1 a 10 kanálovým ADC2 prevodníkom. ADC1 je plne k dispozícii používateľovi. ADC2 prevodník je dostupný obmedzene, pretože väčšinu jeho kanálov využíva modul bezdrôtovej komunikácie.
  • 2 × 8-bit DAC prevodníky
  • 10 × dotykové senzory, ktoré dokážu detegovať dotyk prsta na plôške pripojenej k príslušnému pinu
  • 4 × SPI. Jedno z rozhraní je určené na komunikáciu s flash pamäťou. Pre používateľa teda zostávajú 3 SPI rozhrania.
  • 2 × I2S
  • 2 × I2C s maximálnou frekvenciou 5 MHz
  • 3 × UART. Maximálna prenosová rýchlosť je 5 Mbit/s
  • 1 host (SD/eMMC/SDIO)
  • 1 slave (SDIO/SPI)
  • Ethernet MAC interface s dedikovaným DMA a podporou IEEE 1588
  • CAN 2.0
  • IR (TX/RX)
  • Motor PWM
  • Integrovaná Hallova sonda. Jej výstup je možné interne pripojiť na zosilňovač a A/D prevodník.

Pokročilá správa napájania umožňuje prepínanie medzi piatimi rôznymi módmi spotreby, čím môžete podstatne predĺžiť dobu prevádzky zariadenia s ESP32 napájaného z batérií.

Pre konečné projekty môžete využívať priamo modul ESP-WROOM-32 vo veľkosti poštovej známky, alebo verziu ESP-VROVER, ktorá je doplnená o 4 MB statickej pamäti RAM.

Produktová stránka výrobcu – spoločnosti Espressif

Najjednoduchší spôsob ovládania modulu s ESP32, umožňujúci ovládať iba jeho Wifi časti s pôvodným firmvérom modulu ESP32, je pomocou tzv. AT príkazov cez sériovú linku. ESP32 však vďaka druhému jadru môžete využiť aj ako výkonný mikrokontrolér s bohatou výbavou portov. Najčastejšie sa využíva firmvér NodeMCU, ktorý umožňuje okrem ovládania Wifi aj vytvorenie vlastného riadiaceho programu a ovládanie GPIO pinov. NodeMCU je open-source firmvér, čiže akýsi odľahčený operačný systém umožňujúci vytvoriť vlastný riadiaci program a ovládať GPIO piny čipu ESP32. Na použitie NodeMCU je nutné prehrať pôvodný firmvér, ktorý je v čipe nahraný od výrobcu. Vytvorený program sa nahráva priamo do čipu, vďaka čomu je Wifi modul schopný samostatnej funkcie bez pomocného mikrokontoléru.

Na účely tohoto seriálu budeme využívať vývojový modul ESP32/DevKitC, ktorý má zabudované USB rozhranie pre programovanie cez sériovú linku a zároveň napájanie celého modulu z USB. Napájacie napätie samotného modulu je 3.3V, avšak čip dokáže pracovať v rozsahu napájacieho napätia 2.3 V až 3.6 V. USB poskytuje napájacie napätie 5V, preto doska ESP32/DevKitC má aj obvody, generujúce napätie 3.3V

Postupne budeme k modulu ESP32 pripájať rôzne komponenty – LED diódy, RGB LED, displeje, spínacie prvky a podobne. Moduly s ESP sú konštruované tak, aby sa dali zasunúť do prepojovacieho poľa.

K dispozícii sú aj rôzne špecializované dosky, napríklad RobotBoard. Plošný spoj je možné osadiť súčiastkami potrebnými na ovládanie senzorov a akčných členov robota.

Vtedy si musíte dať pozor, aby ste použili správny modul, pretože ESP32 moduly sú k dispozícii s 2 x 15, alebo 2 x 19 pinmi. Rozloženie signálov na pinoch nie je kompatibilné, takže nemôžete zasunúť do pätice pre 2 x 19 pinov modul 2 x 15 s tým, že by štyri piny na každej strane boli prázdne mimo modulu a ani naopak že by modul 2x 19 prečnieval v pätici 2 x 15. Doska RobotBoard je konštruovaná pre modul s ESP32, ktorý má 2 x 15 pinov. Rozmiestnenie pinov pre 2 x 15 je

Alebo v podobe textovej schémy:

oeLAB-esp32 (DoIt) 2x15 pins:                               [ROBOT Board]:

                          -----------     (GPIO)

                      EN -           - D23 (23)  MOSI       [SPI_MOSI_PIN] 

[PIN_ANALOG]    (36)  VP -           - D22 (22)  SCL(I2C)   [I2C_SCL_PIN]

[I39_PIN]       (39)  VN -           - TXD (1)   D2

[I34_PIN]            D34 -           - RXD (3)   D3

[I35_PIN]            D35 -           - D21 (21)  SDA(I2C)   [I2C_SDA_PIN]

[ONE_WIRE_PIN] DEV1  D32 -           - D19 (19)  MISO       [SPI_MISO_PIN]

               DEV2  D33 -  (ESP32)  - D18 (18)  SCLK       [SPI_CLK_PIN]

[MOTOR_12EN]         D25 -           - D5  (5)   CS0        [SPI_CS0_PIN]

[MOTOR_1A]           D26 -           - TX2 (17)             [PIN_PWM1] /Servo1

[MOTOR_4A]           D27 -           - RX2 (16)             [PIN_PWM2] /Servo2

[MOTOR_3A]           D14 -           - D4  (4)              [PIN_PWM3] /Servo3

[MOTOR_2A]           D12 -           - D2  (2)              [BUILT_IN_LED]

[MOTOR_34EN]         D13 -           - D15 (15)             [WS_LED_PIN] //v1(13)     

                     GND -           - GND

                     VIN -           - 3V3 +

                          -----------

Pre jednoduché experimenty stačí na dosku osadiť niekoľko konektorov, prípadne aj jednu RGB diódu kompatibilnú s Neopixel. Prípadne osadíte ďalšie obvody a konektory

Micropython

Micropython je opensource implementácia programovacieho jazyka Python 3, vytvorená v programovacom jazyku C a optimalizovaná na beh v mikrokontroléroch. Micropython a Python vo všeobecnosti je interpretačný jazyk, to znamená, že mikrokontrolér vykonáva príkazy napísané v Pythone bez toho, aby ich kompiloval. Preto aby ste mohli využívať Micropython v module s ESP32, najskôr je potrebné do modulu nainštalovať kód interpretra Micropython.

V tomto seriáli budeme využívať implementáciu Micropythonu s knižnicou octopus od octopusLab.cz.

Na inštalovanie firmvéru do modulu ESP je určený nástroj esptool. Pri prvom nahrávaní sa odporúča vyčistiť pamäť flash pomocou funkcie erase_flash. Vo Windows stiahnite nástroj esptool.exe z této adresy, súbor uložte do vhodného adresára, napríklad:

C:\ESP32\esptool.exe

Stiahnite binárny obraz z webu  a uložte ho do rovnakého adresára. Najskôr vymažeme obsah pamäti modulu. Spustite aplikáciu s parametrom:

C:\ESP32\esptool.exe --chip esp32 -p /COM3 erase_flash

Niekedy je potrebné na module ESP držať tlačidlo „boot“, aby sa modul pripojil. V našom prípade to nebolo potrebné. Následne do modulu uložíte súbor micropython-octopus.bin príkazom

C:\ESP32\esptool.exe --chip esp32 -p /COM3 write_flash -z 0x1000 C:\ESP32micropython-octopus.bin

Ako dostať program do modulu

Máte dve možnosti. Prvá z nich – komunikácia s modulom pomocou emulátora terminálu, napríklad Putty je jednoduchá, avšak menej komfortná, hlavne ak už nechcete program zadávať postupne po riadkoch, ale preniesť ho do modulu ako súbor so zdrojovým kódom. Druhá možnosť je využiť nástroje priamo určené na vývoj v Micropythone, kde môžete využívať príkaz ls na zobrazenie súborov v zložke a na prenos súborov použiť príkazy put a get. Po zadaní kľúčového slova repl sa prejdete do komunikačného rozhrania s modulom.

Na zadávanie príkazov a výpis odozvy sa používa emulátor terminálu, vo Windows putty a v Linuxe a MacOS screen. Aplikáciu Putty získate na tejto adrese.

Najskôr je potrebné zistiť na ktorom sériovom porte je namapované USB rozhranie. Vo Windows to zistíte v Správcovi zariadení1. Po spustení Putty nastavte port na ktorom je namapovaný modul ESP32 pripojený cez USB. V našom prípade je to port COM3. Prenosovú rýchlosť nastavte na 115 200.

Ak máte modul ESP pripojený cez USB k Macbooku, potrebujete ovládač USB to UART Bridge VCP Drivers. Získate ho zo tejto stránky. Pri inštalovaní ovládača budete musieť povoliť inštaláciu softvéru mimo aplikačný obchod. Mapovanie portov zistíte ak z konzoly spustite príkaz

ls /dev/tty.*

Komunikáciu s modulom ESP32 začnete príkazom

screen /dev/tty.SLAB_USBtoUART 115200

Správne nakonfigurovaný modul vypíše na emulátor terminálu prompt:

>>>

Nakoľko Python je interpreter, môžete mu priamo zadať nejaký jednoduchý matematický výraz a terminálová aplikácia by mala vypísať výsledok:

>>> 3 + 10

13

Môžete vyskúšať importovať nejaký knižničný modul, napríklad math pre matematické operácie

>>> import math

>>> math.pi

3.141593

Pri importe modulu sa časť jeho kódu, ktorá je aktuálne potrebná presunie z flash pamäti do RAM.  Preto knižnice, ako napríklad math importujte iba v prípade, ak ich potrebujete, inak vám budú len zbytočne blokovať pamäť RAM. Keď vypíšete názov modulu, za ním bodku a následne stlačíte kláves TAB, zobrazí sa zoznam funkcií.

>>> import math

>>> math.

__class__       __name__        pow             acos

acosh           asin            asinh           atan

atan2           atanh           ceil            copysign

cos             cosh            degrees         e

erf             erfc            exp             expm1

fabs            floor           fmod            frexp

gamma           isclose         isfinite        isinf

isnan           ldexp           lgamma          log

log10           log2            modf            pi

radians         sin             sinh            sqrt

tan             tanh            trunc

Tento miniseriál nie je učebnicou Pythonu, ale má poskytnúť námety na praktické príklady. Uvedieme preto len niektoré funkcie zo základnej knižnice a funkcie na obsluhu hardvéru ESP32.

Príkazy na časové oneskorenie:

sleep(1)           > 1 sekunda pauza

sleep_ms(100)      > 100 milisekúnd 

sleep_us(500)      > 500 mikrosekúnd

Teplotu procesora zistíte príkazom:

>>> import esp32

>>> esp32.raw_temperature()

Hodnotu magnetického poľa nameranú Hallovou sondou načítate nasledujúcim príkazom. Porovnajte hodnoty načítané pred a po priložení magnetu:

>>> import esp32

>>> esp32.hall_sensor()

V ďalšom dieli sa zoznámime s obsluhou hardvéru a knižnicou Octopus.


Převzato z webu PC revue se souhlasem autora.


Poznámky:

  1. Pozn. redakce: Seznam seriových portů také můžete získat příkazem mode spuštěným v okně příkazové řádky.