Skip to main content

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.