🛠 Lire le bouton BOOT sur GPIO0 sans se piéger
Objectifs
Apprendre à lire une entrée numérique sur l'ESP32-S3 en utilisant le bouton BOOT (GPIO0), tout en comprenant pourquoi cette broche est spéciale : GPIO0 est une broche de strapping qui décide du mode de démarrage (flash ou exécution). Vous écrirez un programme qui détecte les appuis avec anti-rebond logiciel, et vous comprendrez la règle d'or : ne jamais forcer GPIO0 à l'état BAS pendant la remise sous tension, sous peine de faire croire à la carte qu'on veut flasher.
Matériel
- 1 carte ESP32-S3 (le bouton BOOT est présent sur toutes : DevKitC-1, XIAO, T-Display-S3)
- 1 câble USB data
- Optionnel : 1 bouton poussoir externe entre GPIO1 et GND pour comparer
Code complet
// GPIO0 = bouton BOOT embarque (vers GND), pull-up interne obligatoire
// GPIO1 = bouton externe optionnel, entre GPIO1 et GND
const uint8_t BTN_BOOT = 0;
const uint8_t BTN_EXT = 1;
unsigned long dernierAppui = 0;
const unsigned long ANTI_REBOND = 60; // ms
void setup {
Serial.begin(115200);
pinMode(BTN_BOOT, INPUT_PULLUP);
pinMode(BTN_EXT, INPUT_PULLUP);
}
void loop {
if (digitalRead(BTN_BOOT) == LOW && millis - dernierAppui > ANTI_REBOND) {
dernierAppui = millis;
Serial.println("Bouton BOOT (GPIO0) presse !");
}
if (digitalRead(BTN_EXT) == LOW && millis - dernierAppui > ANTI_REBOND) {
dernierAppui = millis;
Serial.println("Bouton externe (GPIO1) presse !");
}
delay(5);
}
Vérification attendue
Ouvrez le moniteur série à 115200 bauds : chaque appui sur le bouton BOOT imprime une ligne unique, sans doublons dus au rebond. Le second bouton (s'il est câblé entre GPIO1 et GND) se comporte à l'identique. La carte redémarre normalement après un reset : GPIO0 n'a jamais été maintenu BAS pendant la remise sous tension.
Erreurs fréquentes
- Entrée flottante : oublier INPUT_PULLUP et lire des états aléatoires ; le S3 possède des pull-up/pull-down internes, utilisez-les.
- Câbler une charge sur GPIO0 : si cette broche est tirée BAS à la remise sous tension, la carte entre en mode téléchargement et semble « morte » ; c'est le piège classique des broches de strapping (GPIO0, GPIO3, GPIO45, GPIO46).
- Confondre appui et maintien : le code ci-dessus détecte le niveau, pas le front ; pour un comptage strict, mémorisez l'état précédent.
- Anti-rebond trop court : sous 30 ms les rebonds mécaniques créent des appuis fantômes ; 50 à 60 ms est un bon compromis.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino