2.5 Ovládanie digitálneho výstupu
Digitálny výstup v MicroPython
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})
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.
Nastavenie hodnoty
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ú.

Obmedzovač prúdu
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!).
Invertovaný výstup
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()