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

V prvej časti seriálu 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.


Převzato z webu PC revue se souhlasem autora.