NodeMCU: GPIO Verhalten beim Einschalten

Da ich keine brauchbaren Informationen gefunden habe, wie sich die GPIOs beim Einschalten des NodeMCU-Boards (Esp8266 ESP12 based) verhalten, habe ich sie mal mit einem einfachen Logik Analyser nachgemessen. Das Testprogramm (siehe unten) setzt die GPIO für 200 ms auf LOW und danach auf High.

einschaltverhalten-esp8266
Bitte beachtet, dass die GPIO-Nummern um eins versetzt sind: 0 => D1; 1 => D2; … 7 => D8

 

Ganz links (Zeitpunkt 2715) ist der Einschaltmoment, nach 311 ms (Zeitpunkt 3026) wird der erste Codeblock (LOW) ausgeführt und 200 ms später (Zeitpunkt 3226) der nächste Codeblock (HIGH). Anschließend habe ich noch getestet, wie sich die Ausgänge mit PULL-Downs verhalten.

Erkenntnisse:

  1. D3 und D4 sind beim Einschalten nicht stabil
  2. D8 ist LOW (passt zum Schaltplan)
  3. D1, D2, D5, D6, D7 kann man mit Pull-Downs schön auf LOW ziehen.
  4. D3 und D4 mögen (erwartungsgemäß) keine Pull-Downs.

Fazit:

  1. D1, D2, D5, D6, D7 sind problemlos zu nutzen. Je nach gewünschten Zustand ggf. mit Pull-Downs.
  2. D3 und D4 können für Aufgaben genutzt werden, die immun gegen die nicht stabilen Zustände in der Startphase sind und mit HIGH zurecht kommen.
  3. D8 kann für Aufgaben genutzt werden, wo der Zustand in der Startphase LOW sein darf.
D-Notation GPIO Feste Pull-UP/DOWN Notwendiger Zustand beim Booten Anmerkungen
D0 GPIO16
D1 GPIO5
D2 GPIO4
D3 GPIO0 PULL-UP HIGH Beim Einschalten nicht stabil; wird von der Schaltung beim Flashen auf Low gezogen
D4 GPIO2 PULL-UP HIGH Beim Einschalten nicht stabil
D5 GPIO14
D6 GPIO12
D7 GPIO13
D8 GPIO15 PULL-DOWN LOW

 

void setup() {
pinMode(D1, OUTPUT); digitalWrite(D1, LOW);
pinMode(D2, OUTPUT); digitalWrite(D2, LOW);
pinMode(D3, OUTPUT); digitalWrite(D3, LOW);
pinMode(D4, OUTPUT); digitalWrite(D4, LOW);
pinMode(D5, OUTPUT); digitalWrite(D5, LOW);
pinMode(D6, OUTPUT); digitalWrite(D6, LOW);
pinMode(D7, OUTPUT); digitalWrite(D7, LOW);
pinMode(D8, OUTPUT); digitalWrite(D8, LOW);
delay(200);

digitalWrite(D1, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D4, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D7, HIGH);
digitalWrite(D8, HIGH);

}

void loop() {
}

 

 

2 Gedanken zu „NodeMCU: GPIO Verhalten beim Einschalten“

  1. Hallo Sven,
    vielen Dank für diese Info, aber wie kann ich denn z.B. D1 und D2 auf DOWN lassen? Gibt es da einen Befehl für?

    pinMode(D1, OUTPUT_PULLDOWN); digitalWrite(D1, LOW);

    oder so ?
    Danke für ne kleine Info.
    CU Kai

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


The reCAPTCHA verification period has expired. Please reload the page.