🛠 Lire le bouton BOOT sur GPIO9
Objectifs
Utiliser le bouton BOOT du ESP32-C3 comme une vraie entrée de l'application. Sur ces cartes, BOOT est relié à GPIO9, actif au niveau bas : on le lit avec une résistance de pull-up interne. Vous découvrirez le rôle de strapping de GPIO9 (maintenu enfoncé pendant un reset, il force le mode flash) et comment s'en prémunir.
Matériel
- 1 carte ESP32-C3 (le bouton BOOT embarqué suffit)
- 1 câble USB-C data
- Optionnel : bouton externe sur GPIO9 vers GND
Code complet
const uint8_t BOUTON = 9; // bouton BOOT, actif a l'état BAS
uint8_t etatPrecedent = HIGH;
uint32_t dernierAppui = 0;
uint32_t compteur = 0;
void setup {
Serial.begin(115200);
pinMode(BOUTON, INPUT_PULLUP);
}
void loop {
uint8_t état = digitalRead(BOUTON);
if (état == LOW && etatPrecedent == HIGH &&
millis - dernierAppui > 50) { // anti-rebond 50 ms
dernierAppui = millis;
compteur++;
Serial.printf("Appui n%u sur BOOT\n", compteur);
}
etatPrecedent = état;
delay(5);
}
Vérification attendue
Chaque appui sur BOOT affiche « Appui n1 sur BOOT », « Appui n2… », etc., sans doublons grâce à l'anti-rebond. Si l'on maintient BOOT en enfonçant le reset, la carte entre en mode téléchargement (log « Download mode ») : c'est le comportement de strapping attendu, pas un bug.
Erreurs fréquentes
- INPUT_PULLDOWN au lieu de INPUT_PULLUP : le bouton relie à la masse, il faut donc le pull-up ; avec le pull-down, l'entrée reste à 0 et aucun front n'est vu.
- Confondre appui applicatif et appui au reset : GPIO9 est échantillonné au démarrage (strapping) ; un appui maintenu pendant le flash bloque l'exécution du programme.
- Anti-rebond trop court (5 ms) : rebonds mécaniques visibles en double appuis.
- Attendre un front sur GPIO9 en interruption pendant le deep sleep : prévoir plutôt une broche RTC de réveil dédiée.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino