ESP: GPIO
Z MiS
Obsah |
Porty GPIO
- Piny sběrnice GPIO slouží pro digitální vstup a výstup a umožňují využít pulzně-šířkovou modulaci (PWM) pro simulaci analogového výstupu.
- Pro analogový vstup je vyhrazen speciálně port
A0
devboardu NodeMCU. - Pokud chceme pin použít, musíme:
- Nastavit mód pinu
- Přečíst/nastavit hodnotu
Nastavení módu
- Nastavení módu pro pin:
pinMode(číslo_pinu, mód)
- Módy:
-
OUTPUT
-
INPUT
-
INPUT_PULLUP
-
Digitální výstup
- Digitální výstup nastavuje pouze hodnoty 0 nebo 1.
- Tyto hodnoty jsou reprezentovány napětím 0 V nebo 3,3 V vzhledem k zemi (pin
GND
).
digitalWrite(číslo_pinu, hodnota)
- Hodnoty:
-
LOW
-
HIGH
-
Digitální vstup
- Můžeme také přečíst hodnotu napětí na daném vstupu.
- Počítač rozhodne, zda je hodnota blíže 0 V nebo 3,3 V vzhledem k zemi (pin
GND
) a vrátí správnou výstupní hodnotu. - Pokud vstup není připojen, je hodnota napětí nedefinovaná a může se náhodně měnit. Tomu předejdeme například zapnutím režimu
INPUT_PULLUP
. Pak je nepřipojený vstup vyhodnocen jako hodnotaHIGH
.
int vysledek = digitalRead(číslo_pinu);
- Výsledkem volání funkce jsou hodnoty:
-
LOW
-
HIGH
-
Analogový vstup
- Pro analogový vstup je vyhrazen pin
A0
. - Funkce vrátí hodnotu 0..1023 podle toho, jak je hodnota napětí na pinu
A0
blízko hodnota 0 V (výsledek 0) nebo 3,3 V (výsledek 1023). - Všechna napětí měříme vzhledem k zemi (pin
GND
). - Pokud vstup není připojen, je hodnota napětí nedefinovaná a může se náhodně měnit.
int vysledek = analogRead(číslo_pinu);
- Výsledkem volání funkce jsou hodnoty:
0
..1023
-
0
... 0 V -
1023
... 3,3 V
-
Pulzně-šířková modulace — „analogový výstup“
- Analogový výstup nastavuje libovolnou hodnotu v rozmezí 0 až 1.
- Tyto hodnoty jsou reprezentovány napětím 0 V nebo 3,3 V vzhledem k zemi (pin
GND
). - Zde se ale nejedná o skutečné hodnoty, výstup se pouze velmi rychle přepíná mezi hodnotami 0 a 1 ve správném poměru tak, aby výsledný efekt pro pomalejší součástky (třeba diodu) byl obdobný zvolené hodnotě napětí.
- Tato technologie se označuje jako „pulzně-šířková modulace“ („Pulse-width Modulation“ — PWM).
analogWrite(číslo_pinu, hodnota)
- Hodnota:
0
..1023
-
0
... efekt obdobný napětí 0 V, výstup trvaleLOW
-
511
... efekt obdobný napětí 1,65 V, výstup 50 % časuLOW
a 50 % časuHIGH
-
1023
... efekt obdobný napětí 3,3 V, výstup trvaleHIGH
-
Čísla pinů (pinout)
- Na devboardu NodeMCU jsou výstupy označeny kódy
D0
...D12
a dalším. - Číslo pinu v kódu je třeba převést na odpovídající číslo portu GPIO a najít odpovídající pin devboardu.
Knihovny Arduino IDE mají předdefinované konstanty
D1
..D12
, které můžeme s výhodou použít, abychom nemuseli čísla převádět.- Pokud je třeba, přiřazení pinů najdete například na odkazu: IoTBytes.Wordpress.com → NodeMCU-pinout.
- Vybrané hodnoty uvádíme dále:
Číslo pinu v kódu | ESP GPIO | Označení na devboardu NodeMCU 1.0 |
Funkce |
---|---|---|---|
3 | GPIO 16 | D0 | Na některých zařízeních ovládá vestavěnou diodu. Neměl by být používán pro vstup a připojování zařízení. Používá se při nahrávání firmware. ?Nelze zde použít PWM? |
5 | GPIO 5 | D1 | |
2 | GPIO 2 | D4 | Na některých zařízeních ovládá vestavěnou diodu. |
Příklady
- Analogové zhasínání diody
int pin = 5; void stmivej() { for (int i = 1023; i > 0; i -= 255) { analogWrite(pin, i); delay(500); } } void setup() { pinmode(5, OUTPUT); } void loop() { stmivej(); }
Zdroje
- Arduino.ESP8266.com → Reference
- Alokace pinů na NodeMCU: ESP8266.com > Wiki > Doku