bouton-led.ino
Un bouton entre GPIO4 et GND, tiré en l'air par la résistance interne : chaque appui franc est compté et affiché. Le filtre anti-rebond de 40 ms élimine les rebonds mécaniques qui feraient compter deux fois.
Matériel requis
Une carte ESP32 classique (module ESP32-WROOM-32, double cœur Xtensa 240 MHz, Wi-Fi + Bluetooth) type DevKitC / DOIT V1, alimentée par micro-USB. 1 bouton poussoir (une patte GPIO4, l'autre GND).
Branchement
Bouton sur GPIO4 et GND ; la résistance de tirage INPUT_PULLUP est interne. Évitez GPIO6-11 (flash) et GPIO34-39 (entrées seules, sans pull-up).
Fonctionnement
On mémorise le dernier niveau lu et l'horodatement du dernier changement ; un front n'est validé que si le niveau reste stable 40 ms. INPUT_PULLUP inverse la logique : appui = LOW. Dans l'Arduino IDE, installez le paquet « esp32 » (Gestionnaire de cartes), choisissez « Dev Module », le port, puis Téléverser (maintenez BOOT si la détection échoue). GPIO34-39 sont entrées seules ; évitez GPIO6-11 et GPIO12.
Pour aller plus loin
Double-clic (mesurer l'intervalle entre appuis), ou éveil profond sur ce même GPIO avec esp_sleep_enable_ext0_wakeup.
bouton-led.ino
// Bouton sur GPIO4 (vers GND, résistance interne) + compteur anti-rebond.
const int BOUTON = 4;
const int LED = 2;
const unsigned long ANTI_REBOND = 40; // ms
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) { // front d'appui (logique inversée)
compteur++;
digitalWrite(LED, HIGH);
Serial.printf("Appui n°%d\n", compteur);
} else {
digitalWrite(LED, LOW);
}
}
dernier = lu;
}