ESP: GPIO

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Čísla pinů (pinout): Oprava D4 u čísla 2. Změna pořadí sloupců tabulky - pin v kódu první)
(Doplněn digitální a analogový vstup, upřesněno PWM.)
 
Řádka 2: Řádka 2:
  
 
== Porty GPIO ==
 
== Porty GPIO ==
* Piny sběrnice GPIO slouží pro digitální vstup a výstup a pro digitální vstup.
+
* 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 vyhraze speciálně port A0 devboardu NodeMCU.
+
* Pro analogový vstup je vyhrazen speciálně port <code>A0</code> devboardu NodeMCU.
 
* Pokud chceme pin použít, musíme:
 
* Pokud chceme pin použít, musíme:
 
*# Nastavit mód pinu
 
*# Nastavit mód pinu
Řádka 13: Řádka 13:
 
  pinMode(''číslo_pinu'', ''mód'')
 
  pinMode(''číslo_pinu'', ''mód'')
 
* Módy:
 
* Módy:
** OUTPUT
+
** <code>OUTPUT</code>
** INPUT
+
** <code>INPUT</code>
** INPUT_PULLUP
+
** <code>INPUT_PULLUP</code>
  
  
Řádka 23: Řádka 23:
 
  digitalWrite(''číslo_pinu'', ''hodnota'')
 
  digitalWrite(''číslo_pinu'', ''hodnota'')
 
* Hodnoty:
 
* Hodnoty:
** LOW
+
** <code>LOW</code>
** HIGH
+
** <code>HIGH</code>
  
  
== Analogový výstup ==
+
== 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&nbsp;V nebo 3,3&nbsp;V vzhledem k zemi (pin <code>GND</code>) a vrátí správnou výstupní hodnotu.
 +
* Pokud vstup není připojen, je hodnota napětí nedefinovaná a&nbsp;může se náhodně měnit. Tomu předejdeme například zapnutím režimu <code>INPUT_PULLUP</code>. Pak je nepřipojený vstup vyhodnocen jako hodnota <code>HIGH</code>.
 +
int ''vysledek'' = digitalRead(''číslo_pinu'');
 +
* Výsledkem volání funkce jsou hodnoty:
 +
** <code>LOW</code>
 +
** <code>HIGH</code>
 +
 
 +
 
 +
== Analogový vstup ==
 +
* Pro analogový vstup je vyhrazen pin <code>A0</code>.
 +
* Funkce vrátí hodnotu 0..1023 podle toho, jak je hodnota napětí na pinu <code>A0</code> blízko hodnota 0&nbsp;V (výsledek 0) nebo 3,3&nbsp;V (výsledek 1023).
 +
* Všechna napětí měříme vzhledem k zemi (pin <code>GND</code>).
 +
* Pokud vstup není připojen, je hodnota napětí nedefinovaná a&nbsp;může se náhodně měnit.
 +
int ''vysledek'' = analogRead(''číslo_pinu'');
 +
* Výsledkem volání funkce jsou hodnoty: <code>0</code>..<code>1023</code>
 +
** <code>0</code>... 0&nbsp;V
 +
** <code>1023</code>... 3,3&nbsp;V
 +
 
 +
 
 +
== Pulzně-šířková modulace &mdash; „analogový výstup“ ==
 
* Analogový výstup nastavuje libovolnou hodnotu v rozmezí 0 až 1.
 
* Analogový výstup nastavuje libovolnou hodnotu v rozmezí 0 až 1.
* Tyto hodnoty jsou reprezentovány napětím 0&nbsp;V nebo 3,3&nbsp;V vzhledem k zemi (pin <code>GND</code>) a jsou realizovány střídáním hodnot 0 a 1 (PWM).
+
* Tyto hodnoty jsou reprezentovány napětím 0&nbsp;V nebo 3,3&nbsp;V vzhledem k zemi (pin <code>GND</code>).
 +
* Zde se ale nejedná o&nbsp;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“ &mdash; PWM).
 
  analogWrite(''číslo_pinu'', ''hodnota'')
 
  analogWrite(''číslo_pinu'', ''hodnota'')
* Hodnota: <code>0</code>-<code>1023</code>
+
* Hodnota: <code>0</code>..<code>1023</code>
 +
** <code>0</code>... efekt obdobný napětí 0&nbsp;V, výstup trvale <code>LOW</code>
 +
** <code>511</code>... efekt obdobný napětí 1,65&nbsp;V, výstup 50&nbsp;% času <code>LOW</code> a 50&nbsp;% času <code>HIGH</code>
 +
** <code>1023</code>... efekt obdobný napětí 3,3&nbsp;V, výstup trvale <code>HIGH</code>
  
  
 
== Čísla pinů (pinout) ==
 
== Čísla pinů (pinout) ==
* Čí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.
 
 
* Na devboardu NodeMCU jsou výstupy označeny kódy <code>D0</code>...<code>D12</code> a dalším.
 
* Na devboardu NodeMCU jsou výstupy označeny kódy <code>D0</code>...<code>D12</code> a dalším.
* Přiřazení pinů najdete například na odkazu: [https://iotbytes.wordpress.com/nodemcu-pinout/ IoTBytes.Wordpress.com &rarr; NodeMCU-pinout].
+
* Čí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.
 +
 
 +
<div class="Poznamka">Knihovny Arduino IDE mají předdefinované konstanty <code>D1</code>..<code>D12</code>, které můžeme s&nbsp;výhodou použít, abychom nemuseli čísla převádět.</div>
 +
 
 +
* Pokud je třeba, přiřazení pinů najdete například na odkazu: [https://iotbytes.wordpress.com/nodemcu-pinout/ IoTBytes.Wordpress.com &rarr; NodeMCU-pinout].
 
* Vybrané hodnoty uvádíme dále:
 
* Vybrané hodnoty uvádíme dále:
 
{| class="wikitable"
 
{| class="wikitable"

Aktuální verze z 22. 5. 2018, 10:22


Obsah

Porty GPIO


Nastavení módu

pinMode(číslo_pinu, mód)


Digitální výstup

digitalWrite(číslo_pinu, hodnota)


Digitální vstup

int vysledek = digitalRead(číslo_pinu);


Analogový vstup

int vysledek = analogRead(číslo_pinu);


Pulzně-šířková modulace — „analogový výstup“

analogWrite(číslo_pinu, hodnota)


Čísla pinů (pinout)

Knihovny Arduino IDE mají předdefinované konstanty D1..D12, které můžeme s výhodou použít, abychom nemuseli čísla převádět.
Čí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

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje