bouton-led.ino
Un botón en D3 con pull-up interna, contado limpiamente por el filtro de 40 ms. En NodeMCU, GPIO0 es también el pin de boot: mantenerlo al conectar la alimentación mete la placa en modo flash.
Hardware necesario
Un módulo ESP-12E (ESP8266EX, Wi-Fi 2,4 GHz) montado en una placa NodeMCU / Wemos D1 mini, alimentada por micro-USB. 1 botón pulsador (D3 a GND).
Cableado
Botón entre D3 y GND; pull-up interna activada. Alternativa sin riesgo de boot: D1/D2 (GPIO4/5). Evite GPIO15 (TX) y GPIO16.
Funcionamiento
El nivel se muestrea continuamente; un flanco solo vale tras 40 ms de estabilidad. INPUT_PULLUP invierte la lógica: pulsado = LOW, de ahí la prueba == LOW. En el Arduino IDE, instale el paquete « esp8266 », elija « NodeMCU 1.0 (ESP-12E Module) » y suba (mantenga GPIO0 a LOW si falla). El ADC A0 lee 0-1 V (divisor NodeMCU: 0-3,3 V).
Para ir más lejos
Dos botones para un menú (subir/bajar/OK), o despertar en sueño profundo en ese mismo pin.
bouton-led.ino
// Bouton sur D3 (GPIO0, vers GND) + compteur anti-rebond 40 ms.
const int BOUTON = 0; // D3 — attention : GPIO0 = broche de boot !
const int LED = 2; // D4
const unsigned long ANTI_REBOND = 40;
bool dernier = HIGH, stable = HIGH;
unsigned long bord = 0;
int compteur = 0;
void setup() {
pinMode(BOUTON, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Serial.begin(115200);
}
void loop() {
bool lu = digitalRead(BOUTON);
unsigned long t = millis();
if (lu != dernier) bord = t;
if (t - bord >= ANTI_REBOND && lu != stable) {
stable = lu;
if (stable == LOW) {
compteur++;
digitalWrite(LED, LOW); // LED activee (actif-bas)
Serial.printf("Appui n°%d\n", compteur);
} else {
digitalWrite(LED, HIGH);
}
}
dernier = lu;
}