🛠 Lire le bouton BOOT sur GPIO0 sans se piéger

ESP32-S3 · debutant · Schéma : IMG-esp32-s3-debutant-2-esp32-s3-bouton-boot-gpio0.svg — Bouton BOOT d'une carte ESP32-S3 relié à GPIO0 avec pull-up interne, un second bouton externe sur GPIO1, câble USB vers l'ordinateur.

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels