IoT prakticky: Python na ESP32, popis portov a rozhraní

Mikrokontroléry
0

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

Luboslav Lacko

Všetky autorove články
ESP 32 Python Micropython robotika programovanie

Pridať komentár