esp-pinouts


54. díl – OctopusLAB
ESP32 – vstupní a výstupní piny

Práci s piny (to jsou „nožičky“ kontroleru) nám ulehčuje přednastanený pinout, převodní tabulka, která je uložená v konfiguračním souboru. Konfigurační soubory pro jednotlivé hw moduly se nachází v samostatném adresáři /pinouts. Názvy pinů jsou přiřazeny jejich číslům na základě HW platformy. Nastavení modulu se provádí po nainstalování Octopus frameworku pomocí příkazu setup() a následně se napíše volba ds.

  [w]    - wifi submenu
  [cw]   - connect wifi
  [cl]   - connect LAN
  [sd]   - system download > stable octopus modules from URL
 >[ds]   - device setting
  [ios]  - I/O setting submenu
  [wr]   - run web repl
  [ftp]  - start FTP

Volba ds vám nabídne 9 možností, z nichž nejvíce používáme tyto tři:
A – 1: oLAB DOIT adapter | esp32
B – 5: oLAB RobotBoard1 | esp32
C – 9: oLAB ESP32board1 | esp32

Na druhé straně desek je také tabulka s názvy pinů a jejich čísly:

Princip je jednoduchý: máme definovány číselné konstanty (v programu se neměnící čísla), například pro vestavěnou Led diodu: 
BUILT_IN_LED = const(číslo)Číslo je zde číslo pinu a může se lišit podle dané desky. Tato konstanta je uložena v souborech pinouts/file_name. Pro ROBOTboart je to 2, takže v souboru pro definici pinů najdete řádek BUILT_IN_LED = const(2). Výchozí společné piny jsou definované v /pinouts/olab_esp32_base.py a ROBOTboard je přebírá.

BUILT_IN_LED (2)        | HALL_SENSOR  (8)
# I2C: I2C_SCL_PIN (22) | I2C_SDA_PIN (21)
# SPI: SPI_CLK_PIN (18) | SPI_MISO_PIN (19)
       SPI_MOSI_PIN (23)| SPI_CS0_PIN  (5)
# UART: RXD0 (3) | TXD0 (1) # Used for REPL
... 

Jak se s modulem pinout pracuje? Můžete si zkusit z terminálu Micropythonu: >>>

>>> from utils.pinout import set_pinout
>>> pinout = set_pinout()

A už máme dostupné piny na pinout.NAZEV_PINU (v ukázce pro desku ROBOTboard). Dají se zjistit i osatní PINy, po pinout tečka TAB:

>>> pinout.
__class__       __name__        const           __file__
WS_LED_PIN      ONE_WIRE_PIN    PIEZZO_PIN      MOTOR_12EN
MOTOR_34EN      MOTOR_1A        MOTOR_2A        MOTOR_3A
MOTOR_4A        ANALOG_PIN      PWM1_PIN        PWM2_PIN
PWM3_PIN        SERVO_MIN       SERVO_MAX       I39_PIN
BUILT_IN_LED    ...
>>> pinout.BUILT_IN_LED
2

Vidíme, že pro BUILT_IN_LED nám „dohledá“ číslo deklarované 2, takže se to dá použít:

led = Led(pinout.BUILT_IN_LED)

je shodné s:

led = Led(2)

ale číslo 2 si nemusíme pamatovat, navíc u různých modulů se může lišit.

Celá ukázka pro blikání vestavěné Ledky na různých modulech – může být na pinu 2 nebo také na 15… nebo úplně jiném. A my toto číslo při správné konfiguraci modulu (desky) nemusíme řešit a k vestavěné Ledce přistupujeme názvem pinu: BUILT_IN_LED.

from components.led import Led
from utils.pinout import set_pinout

pinout = set_pinout()   # set board pinout
led = Led(pinout.BUILT_IN_LED)

# start main loop
while True:
    led.blink()

Hlavní výhodu pocítíme při práci se sběrnicemi (UART, I2C, SPI), kde se čísla pinů na různých deskách mohou také lišit, ale my k nim stále přistupujeme pomocí jejich „názvů“ a naše programy jsou tak snadněji přenostitelné.


56. díl – OctopusLAB
ESP32 – vstupní a výstupní piny 2

V předminulém díle jsme se zabývali piny mikrokontroléru ESP32 obecněji a soustředili jsme se na naši knihovnu pinout. Tentokrát se zaměříme na náš oblíbený modul DoIt a v následujících několika dílech ukážeme i pár jednoduchých projektů.
DoIt (DEVKIT, DO1T…) je malá deska plošných spojů, na které je kromě „známky“ ESP32 i „programátor“ (převodník USB na UART), konektor USB, stabilizátor 3,3V (z 5V dodávaných USB) a mívá už napájené datové hřebeny (využíváme verzi 2×15 i pro ní máme rozšiřující desky ROBOTboart či DOITadapter).

GPIO/GPI – všeobecný vstupně výstupní pin (některé jsou pouze vstupní GPI)
PWM – výstup s pulsní modulací (má IO většina pinů)
ADC – vstupy pro analogově digitální převodník
Touch – kapacitní vstup, pro realizaci „dotykového“ tlačítka
Sběrnice a porty: UART – sériová linka, SPI/I2C…

Čísla pinu (HW desky) se liší od SW čísel pinů. Stejně tak ADC nebo Touch mají vlastní číslování. Na obrázku ho neuvádíme. Většinou nám totiž stačí vědět, na jakém HW pinu je připojen SW pin. Modul DoIt ani nemá HW piny číslované (mohlo by být 1 až 30), ale rovnou uvádí jejich nejběžnější SW označení.

Označení pinů pro sběrnice udávají většinou výchozí HW nastavení. Podle potřeby se dají „přemapovat“ jinam, ale pak je nutno dát pozor (například na potřebné PULL-UP odpory).

Jednoduchý projekt – ovládání vestavěné LEDky dotykem.

Jedno z nejjednodušších zapojení vlastně ani zapojením není. Využijeme zabudované svítivé diody (LED) a jako tlačítko tentokrát vyzkoušíme kapacitní vstup. Při tom nemusíme nic propojovat, ukázka bude fungovat jen s mikro USB kabelem, kterým modul napájíme (i programujeme).
Stačilo by mít destičku DoIt volně nebo v nepájivém poli, my ale využíváme DoIt adapter, protože nám při dalších projektech usnadní velkou část zapojování.

Zadání není složité. Podržíme prst na vstupním pinu jako na „senzorickém“ tlačítku a se LED rozsvítí. Chceme-li ji zhasnout, provedeme to opět jedním delším dotykem kontaktu. Nevadí když se dotkneme i okolních pinů, ty nejsou v našem projektu „citlivé“.
Základ tvoří třída TouchPad, jejíž instanční metoda read() vrací číslo podle toho co naměří. Stanovili jsme hranici cca 300, pod kterou jsme se v testu dotýkali kontaktu. Princip čtení hodnoty senzoru je vidět z následujícího fragmentu programu, kdy v nekonečné smyčce čteme vstupní hodnotu a vyhodnotíme, kdy je tlačítko stisknuté:

from machine import Pin, TouchPad
TOUCH_PIN = 4

touch = TouchPad(Pin(TOUCH_PIN))

while True:
  # print(touch.read())  # test  
  if touch.read() < 300: 
        print("button pressed")
  sleep(0.1)  

Celý program trochu „složitější“, vyhodnotím delší stisk tlačítka a měníme stav svícení LEDky. Výsledek je na githubu:
https://github.com/octopuslab-cz/hamik_cz/blob/master/doit-adapter/touch-led.py

Obdobně by se dalo použít i fyzické tlačítko BOOT, které je na pinu „0“, ale je velmi titěrné a v praxi se často zamění za druhé tlačítko na desce, které je EN (RESET). Navíc často chceme mít tlačítko někde jinde. Při použití kapacitního nám postačí kousek vodivé plošky s připájeným vodičem 10-25 cm a tlačítko si můžeme umístit kam potřebujeme.


co se do tištěné verze nepoužije - obrázek na jeden sloupec je špatně čitelný - a na dva by byl zbytečně obrovský