
IoT prakticky: Python na ESP32, popis portov a rozhraní
V prvej časti seriálu https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32--vyvojove-dosky--instalacia-Micropythonu sme predstavili vývojové dosky s populárnym čipom ESP32 a ukázali postup, ako do vývojovej dosky nahrať interpreter programovacieho jazyka python, konkrétne implementáciu Micropython s knižnicou octopus od octopusLab.cz.
Postup je aj vo videu
Pri vytváraní priemerne náročných aplikácií, napríklad jednoduchých riadiacich systémov pre ovládanie kúrenia, robotického vozíku zo stavebnice a podobne nepotrebuje tvorca programového kódu detailné znalosti architektúry mikrokontroléra, aj keď bez základných vedomostí o portoch, komunikačných rozhraniach, prípadne čítačoch, časovačoch, či prerušovacieho systému sa nezaobíde
Skôr, než sa začneme naplno venovať obsluhe portov a komunikačných rozhraní, v Pythone, si tieto porty a komunikačné rozhrania popíšeme: Máte k dispozícii 34 programovateľných GPIO pinov. Prakticky každý z nich má však aj alternatívnu funkciu, či už v niektorom z komunikačných rozhraní, ako pin pre dotykový senzor a podobne. Ak máte vývojový modul s 2 x 15 vývodmi, máte k dispozícii 25 GPIO portov.
Ak máte modul, ktorý má 2 x 18 vývodov, v takom prípade máte k dispozícii 32 GPIO portov.
Je tam však niekoľko obmedzení, ktoré je potrebné poznať:
- Ktorýkoľvek GPIO je možné využiť ako PWM výstup, čiže výstup z pulzno šírkovou moduláciou, maximálne však môžete takto naprogramovať 16 kanálov. Tieto kanály sú číslované 0 – 15.
- Maximálne prúdové zaťaženie GPIO je 40 mA
- Porty GPIO 34 - GPIO 39 môžete využiť iba ako vstupné.
- Porty GPIO 6 - GPIO 11 sa využívajú interne na komunikáciu medzi modulom ESP 32 a flash pamäťou
- Na portoch GPIO 1, GPIO 3, GPIO 5, GPIO 14 a GPIO 15 je počas resetu buď logická úroveň HIGH, alebo PWM signál, takže počas bootovania, alebo resetu nemáte zaručenú úroveň na týchto pinoch. Týka sa to aj portov GPIO 6 - GPIO 11, avšak tie nemôžete použiť, viď predchádzajúci bod.
- Piny GPIO 0, GPIO 2 a GPIO 4 sa používajú na nastavenie módu zavádzania firmvéru. Ak k nim máte pripojené periférne zariadenia, môže sa vyskytnúť problém s pokusom o nahranie nového kódu, flashovanie firmvéru alebo resetovaním dosky, pretože aktuálny stav úrovní na pinoch bránia ESP32 vstúpiť do správneho režimu. Po resetovaní, flashovaní, alebo zavedení programu tieto piny fungujú normálne.
- Počas bootovania musia byť piny GPIO 5, GPIO 12 a GPIO 15 v týchto úrovniach: GPIO 5 – HIGH, GPIO 12 – LOW a GPIO 15 - HIGH
Tých obmedzení je pomerne veľa, takže to zhrnieme v tabuľke. GPIO piny vypísané čiernou farbou môžete použiť bez obmedzenia, piny označené oranžovou farbou s akceptovaním, určitých obmedzení a piny zvýraznené červenou použiť nemôžete
|
Vstup
|
Výstup
|
Poznámka
|
GPIO 0
|
Pull up rezistor
|
ok
|
PWM počas bootovania
|
GPIO 1
|
Tx
|
ok
|
Debugg výstup počas bootovania
|
GPIO 2
|
ok
|
ok
|
LED dióda na doske
|
GPIO 3
|
ok
|
Rx
|
|
GPIO 4
|
ok
|
ok
|
|
GPIO 5
|
ok
|
ok
|
|
GPIO 6 – GPIO 11
|
-
|
-
|
SPI na komunikáciu s flash pamäťou
|
GPIO 12
|
boot
|
ok
|
Pri bootovaní musí mať úroveň HIGH
|
GPIO 13
|
ok
|
ok
|
|
GPIO 14
|
ok
|
ok
|
PWM počas bootovania
|
GPIO 15
|
ok
|
ok
|
PWM počas bootovania
|
GPIO 16 – GPIO 33
|
ok
|
ok
|
|
GPIO 34 – GPIO 39
|
ok
|
-
|
|
Niektoré piny, spolu ich je 10 môžete nakonfigurovať ako dotykové senzory (Touch sensors), ktoré dokážu detegovať dotyk prsta na plôške pripojenej k príslušnému pinu. Tieto piny dokážu prebudiť procesor zo stavu hlbokého spánku. V tabuľke je priradenie pinov senzorom.
GPIO 4
|
T0
|
GPIO 0
|
T1
|
GPIO 2
|
T2
|
GPIO 15
|
T3
|
GPIO 13
|
T4
|
GPIO 12
|
T5
|
GPIO 14
|
T6
|
GPIO 27
|
T7
|
GPIO 33
|
T8
|
GPIO 32
|
T9
|
K dispozícii máte aj 18 kanálov analógovo – digitálnych prevodníkov. Osem kanálov označených ako ADC1_CH0 ADC1_CH7 až je plne k dispozícii používateľovi. Ďalších 10 kanálov zo skupiny ADC2 je dostupných obmedzene, pretože väčšinu jeho kanálov využíva modul bezdrôtovej komunikácie. ADC prevodníky, ktoré máte plnne k dispozícii sú na pinoch:
ADC1_CH0
|
GPIO 36
|
ADC1_CH1
|
GPIO 37
|
ADC1_CH2
|
GPIO 38
|
ADC1_CH3
|
GPIO 39
|
ADC1_CH4
|
GPIO 32
|
ADC1_CH5
|
GPIO 33
|
ADC1_CH6
|
GPIO 34
|
ADC1_CH7
|
GPIO 35
|
Vstupné kanály ADC majú rozlíšenie 12 bitov. To znamená, že rozsah napätia 0 – 3.3 V je namapovaný na interval hodnôt 0 - 4095, kde hodnota 0 zodpovedá napätiu 0 V a hodnota 4095 napätiu 3.3 V. Treba si dať pozor v obidvoch okrajových oblastiach nie sú AD prevodníky lineárne, to znamená, že pravdepodobne nerozlíšite s požadovanou presnosťou hodnoty v okrajových oblastiach blízko nult a blízko maximálneho napätie, čiže nebudete schopní rozlíšiť úplne presne napätia v intervale od 0 V do 0,1 V a taktiež napätia v intervale 3,2 a 3,3 V.
Na čipe sú dva 8 bitové DA prevodníky dostupné cez piny
DAC1
|
GPIO25
|
DAC2
|
GPIO26
|
Bez ohľadu na oblasť nasadenia mikrokontroléra je veľmi dôležitým atribútom čas, presnejšie časovanie rôznych závislých, nezávislých, nadväzujúcich, či prekrývajúcich sa činností. Takto môžete realizovať jednoduché úkony napríklad riadenie vykurovania v rodinných domoch, kŕmenie rybičiek v akváriu, zalievanie skleníkov a záhonov... prípadne komplexnejšie činnosti. Preto má ESP32 aj časovač RTC. Pomocou pinov nasmerovaných na RTC je možné prebudiť procesor keď je v hlbokom spánku v móde Ultra Low Power (ULP).
RTC_0
|
GPIO36
|
RTC_3
|
GPIO39
|
RTC_4
|
GPIO34
|
RTC_5
|
GPIO35
|
RTC_6
|
GPIO25
|
RTC_7
|
GPIO26
|
RTC_8
|
GPIO33
|
RTC_9
|
GPIO32
|
RTC_10
|
GPIO4
|
RTC_11
|
GPIO0
|
RTC_12
|
GPIO2
|
RTC_13
|
GPIO15
|
RTC_14
|
GPIO13
|
RTC_15
|
GPIO12
|
RTC_16
|
GPIO14
|
RTC_17
|
GPIO27
|
ESP 32 má dve komunikačné rozhrania I2C s maximálnou frekvenciou 5 MHz. Implicitne sú pre I2C rozhranie nakonfigurované piny
GPIO 21
|
SDA
|
GPIO 22
|
SCL
|
De facto sú k dispozícii 4 rozhrania SPI. Jedno z rozhraní je určené na komunikáciu s flash pamäťou. Pre používateľa teda zostávajú 3 SPI rozhrania. Implicitne sú piny definované takto:
SPI
|
MOSI
|
MISO
|
CLK
|
CS
|
VSPI
|
GPIO 23
|
GPIO 19
|
GPIO 18
|
GPIO 5
|
HSPI
|
GPIO 13
|
GPIO 12
|
GPIO 14
|
GPIO 15
|
V budúcom pokračovaní sa už budeme naplno venovať Pythonu
Zobrazit Galériu