ESP8266 GPIO
Label |
GPIO |
Input |
Output |
Notes |
D0 |
GPIO16 |
no interrupt |
no PWM or I2C support |
HIGH at boot - used to wake up from deep sleep |
D1 |
GPIO5 |
OK |
OK |
often used as SCL (I2C) |
D2 |
GPIO4 |
OK |
OK |
often used as SDA (I2C) |
D3 |
GPIO0 |
pulled up |
OK |
connected to FLASH button, boot fails if pulled LOW |
D4 |
GPIO2 |
pulled up |
OK |
HIGH at boot - connected to on-board LED, boot fails if pulled LOW |
D5 |
GPIO14 |
OK |
OK |
SPI (SCLK) |
D6 |
GPIO12 |
OK |
OK |
SPI (MISO) |
D7 |
GPIO13 |
OK |
OK |
SPI (MOSI) |
D8 |
GPIO15 |
pulled to GND |
OK |
SPI (CS) - Boot fails if pulled HIGH |
RX |
GPIO3 |
OK |
RX pin |
HIGH at boot |
TX |
GPIO1 |
TX pin |
OK |
HIGH at boot - debug output at boot, boot fails if pulled LOW |
A0 |
ADC0 |
Analog Input |
X |
|
Source
NodeMCU - GPIO |
ESP8266 - GPIO |
Behaviour - Flash Mode |
Behaviour - Dummy Arduino App |
Behaviour - Arduino Set GPIOs Low |
D0 |
16 |
High |
High during boot, falls after ~110ms (to ~1V?) |
High during boot, falls after ~110ms (to ~1V) |
D1 |
5 |
Low |
Low |
Low |
D2 |
4 |
Low |
Low |
Low |
D3 |
0 |
Low then oscillates |
Varies, stabilizes high after ~100ms |
Varies, stabilizes low after ~110ms |
D4 |
2 |
Varies, stabilizes high after ~60ms |
Varies, stabilizes high after ~70ms |
Varies, stabilizes low after ~110ms |
D5 |
14 |
High |
High, then low after ~110ms |
High, then low after ~110ms |
D6 |
12 |
High |
High, then low after ~110ms |
High, then low after ~110ms |
D7 |
13 |
High |
High, then low after ~110ms |
High, then low after ~110ms |
D8 |
15 |
Low |
Low, with glitch ~110ms |
Low, with glitch ~110ms |
D9 |
3 |
Low |
Low until ~50ms then high |
Low until ~50ms then high until ~110ms then low |
D10 |
1 |
Low |
Low until ~50ms then high |
Low until ~50ms then high until ~110ms then low |
Conclusion: GPIOs D1 and D2 are the only safe GPIOs I can use to drive relays if I don't want them to operate autonomously at boot.
Source