🛠 Lire le bouton BOOT sur GPIO9
Objetivos
Utilizar el botón BOOT del ESP32-C3 como una entrada real de la aplicación. En estas tarjetas, BOOT está conectado a GPIO9, activo en nivel bajo: se lee con una resistencia de pull-up interna. Descubrirá el rol de strapping de GPIO9 (mantenido pulsado durante un reinicio, fuerza el modo flash) y cómo protegerse de ello.
Material
- 1 tarjeta ESP32-C3 (el botón BOOT integrado es suficiente)
- 1 cable USB-C de datos
- Opcional: botón externo en GPIO9 hacia GND
Código completo
const uint8_t BOUTON = 9; // bouton BOOT, actif a l'etat 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 etat = digitalRead(BOUTON);
if (etat == LOW && etatPrecedent == HIGH &&
millis - dernierAppui > 50) { // anti-rebond 50 ms
dernierAppui = millis;
compteur++;
Serial.printf("Appui n%u sur BOOT\n", compteur);
}
etatPrecedent = etat;
delay(5);
}
Verificación esperada
Cada pulsación de BOOT muestra «Pulsación n1 en BOOT», «Pulsación n2…», etc., sin duplicados gracias a la antirrebote. Si se mantiene BOOT pulsado mientras se reinicia, la tarjeta entra en modo de descarga (registro «Download mode»): es el comportamiento de strapping esperado, no un error.
Errores frecuentes
- INPUT_PULLDOWN en lugar de INPUT_PULLUP: el botón conecta a masa, por lo que se necesita el pull-up; con el pull-down, la entrada permanece en 0 y no se detecta ningún flanco.
- Confundir pulsación de aplicación y pulsación durante el reinicio: GPIO9 se muestrea al arrancar (strapping); una pulsación mantenida durante el flasheo bloquea la ejecución del programa.
- Antirrebote demasiado corto (5 ms): rebotes mecánicos visibles como pulsaciones dobles.
- Esperar un flanco en GPIO9 por interrupción durante el deep sleep: prever en su lugar un pin RTC de despertar dedicado.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino