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.