2.5 Ovládanie digitálneho výstupu
Používanie výstupného digitálneho portu v MicroPython je pomerne jednoduché - vytvárame si premennú (inštanciu objektu) zavolaním konštruktora objektu Pin z modulu machine. Pokiaľ chceme niektorý pin použiť ako výstup cez premennú p, musíme ho inicializovať v režime Pin.OUT, pričom môžeme zároveň uviesť aj požadovanú hodnotu výstupu:
from machine import Pin
# základná inicializácia:
p = Pin({číslo pinu}, Pin.OUT)
# alebo s definovaním počiatočnej hodnoty (0 alebo 1):
p = Pin({číslo pinu}, Pin.OUT, value = {hodnota})
Digitálnemu portu môžeme nastaviť logickú nulu (napätie 0 V, teda „zem“ - GND) alebo logickú jednotku (napätie +3,3 V), k dispozícii máme objektové funkcie:
- p.value({hodnota}) alebo skrátene p({hodnota}) - nastaví požadovanú hodnotu (0 alebo 1);
- p.on() - nastaví hodnotu 1;
- p.off() - nastaví hodnotu 0;
- p.toggle() - prepne hodnotu na opačnú.
Opäť treba pripomenúť limit maximálneho prúdu, ktorý nesmieme na porte presiahnuť - konkrétne hodnoty sa pre jednotlivé MCU líšia, v prípade ESP32 sa ako hraničná hodnota uvádza prúd 40 mA a odporúčaná 20 mA. Prekročeniu prípustnej hodnoty jednoducho zabránime zapojením sériového ochranného rezistora primeranej veľkosti odporu (100 až 200 Ω).
Mikrokontrolér ESP32 má na všetkých portoch konfigurovateľný obmedzovač prúdu - nastavujeme ho parametrom drive v konštruktore objektu Pin:
from machine import Pin
p = Pin({číslo pinu}, Pin.OUT, drive = {obmedzenie}, value = {hodnota})
Obmedzenie sa udáva cez konštanty (vyššia uvedená hodnota je nameraná prakticky, bez pridaného odporu):
- Pin.DRIVE_0: cca 10 až 11 mA;
- Pin.DRIVE_1: cca 20 až 23 mA;
- Pin.DRIVE_2: cca 40 až 47 mA (predvolená hodnota výstupných portov);
- Pin.DRIVE_3: cca 80 až 91 mA (používať opatrne!).
V závislosti od zapojenia ovládaného prvku je možné, že ovládanie bude fungovať „naopak“ - teda napríklad hodnota 0/off LEDku rozsvieti a hodnota 1/on ju zhasne. Nie je to chyba, ale bežná možnosť zapojenia, ktorá má svoje výhody. Aby to však v programe nebolo mätúce, je k dispozícii objekt Signal z modulu machine, ktorý je identický s objektom Pin až na jeden rozdiel - jeho konštruktor ponúka aj parameter invert, ktorý v prípade opačného zapojenia nastavíme na hodnotu True:
from machine import Pin, Signal
# objekt Signal automaticky invertuje logiku funkcií on() / off()
led = Signal(Pin({číslo pinu}, Pin.OUT), invert = True)
# teraz led.on() znamená rozsvietiť, hoci reálne nastaví pin na LOW hodnotu
led.on()
LED zabudované na vývojových doskách sú pripojené rôzne. Napríklad na ESP32 DevKit v1 a ESP32 D1 Mini sú pripojené ku GPIO 2, na M5StickC Plus je to GPIO 10. Vždy si skontrolujte pinout vašej konkrétnej dosky.