🛠 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.

Objetivos

Aprender a leer una entrada digital en el ESP32-S3 utilizando el botón BOOT (GPIO0), comprendiendo al mismo tiempo por qué este pin es especial: GPIO0 es un pin de *strapping* que determina el modo de arranque (flash o ejecución). Escribirás un programa que detecta las pulsaciones con antirrebote por software, y entenderás la regla de oro: nunca forzar GPIO0 a nivel BAJO durante el reinicio, so pena de hacer creer a la placa que queremos flashearla.

Material

Código completo

// 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);
}

Verificación esperada

Abre el monitor serie a 115200 baudios: cada pulsación del botón BOOT imprime una línea única, sin duplicados debidos al rebote. El segundo botón (si está conectado entre GPIO1 y GND) se comporta de manera idéntica. La placa se reinicia normalmente tras un reset: GPIO0 nunca se ha mantenido en nivel BAJO durante el reinicio.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales