🛠 Lire un bouton sur GPIO4 avec l'ESP8266-ESP-12E
Objetivos
Aprender a leer una entrada digital en el ESP8266-ESP-12E utilizando un botón pulsador conectado al GPIO4 (pin D2 en las placas NodeMCU). El GPIO4 forma parte de los pines «seguros» del módulo, junto con el GPIO5: no tienen ninguna restricción durante el arranque, a diferencia del GPIO0, GPIO2 y GPIO15. Activamos la resistencia de pull-up interna (aproximadamente 45 kΩ) con INPUT_PULLUP, lo que evita añadir una resistencia externa: el botón conecta el pin a masa cuando se pulsa, y la entrada lee entonces LOW. Mostramos las pulsaciones en la consola serie UART0 a 115200 baudios, y descubrimos el papel de yield para alimentar al watchdog de software.
Material
- 1 módulo ESP8266-ESP-12E (o placa NodeMCU / Wemos D1 Mini)
- 1 botón pulsador
- 1 LED integrada (GPIO2) o externa con una resistencia de 330 Ω
- Fuente de alimentación estable de 3,3 V (pico recomendado ≥ 500 mA)
- Cable USB-serie (CP2102/CH340) para la consola
Código completo
// Bouton sur GPIO4 (D2), LED sur GPIO2 (D4, active-LOW sur la plupart des modules)
const uint8_t BTN = 4;
const uint8_t LED = 2;
void setup {
pinMode(BTN, INPUT_PULLUP); // pull-up interne ~45 kΩ, pas de résistance externe
pinMode(LED, OUTPUT);
Serial.begin(115200); // console sur UART0 : GPIO1 TX / GPIO3 RX
Serial.println("Pret : appuyez sur le bouton GPIO4");
}
void loop {
static uint8_t last = HIGH;
uint8_t now = digitalRead(BTN);
if (now != last) { // anti-rebond logiciel simple
delay(30);
now = digitalRead(BTN);
if (now != last) {
last = now;
Serial.println(last == LOW ? "Bouton APPUYE" : "Bouton lache");
}
}
digitalWrite(LED, last); // LED embarquée s'allume quand on appuie (active-LOW)
yield; // nourrit le watchdog logiciel (WDT)
}
Verificación esperada
Abre el monitor serie a 115200 baudios y reinicia el módulo: se mostrará el mensaje de bienvenida. En cada pulsación, la consola muestra «Botón PULSADO» y el LED se enciende; en cada liberación, «Botón liberado» y el LED se apaga. No debe producirse ningún reinicio inesperado: si ocurriera, sospecha de una alimentación insuficiente más que del código.
Errores frecuentes
- Olvidar INPUT_PULLUP y dejar el pin flotante: la entrada capta ruido y muestra pulsaciones fantasma.
- Conectar el botón entre el GPIO4 y los 3,3 V con INPUT_PULLUP: esto cortocircuita el pull-up; con este montaje se debe usar INPUT simple y una resistencia de pull-down externa.
- Usar los pines GPIO6 a GPIO11: estos pines están conectados a la memoria flash interna del módulo, por lo que el programa falla o no arranca.
- Ejecutar un bucle bloqueante largo sin yield: el watchdog de software (WDT) provoca un reinicio tras unos segundos.
- Pulsar el botón durante el arranque: el GPIO4 no tiene restricciones, pero esto sí es cierto para el GPIO0/GPIO2 — verifícalo antes de concluir que es un error del programa.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino