j’ai 2 ESp32C3 qui fonctionnent très bien entre eux en wifi directe, afin de réduire la conso de l’émetteur, je souhaite le plonger en veille profonde tant que la pin dédiée à un constat d’état d’un switch ne reçoive un front descendant. Le code futur prévoyant que ce front activera le réveil, envoi en wifi d’une information, et retour en veille au terme d’une minute. Voici un code minimaliste auquel en retour j’ai l’erreur suivante: Compilation error: 'esp_sleep_enable_ext0_wakeup' was not declared in this scope; did you mean 'esp_sleep_enable_bt_wakeup'? Or, je veux un réveil par 0 en pin 2 et non en bluetooth
Le code ( code test minimaliste) : Désolé, les balises ne veulent pas s’ouvrir malgré que je clique sur code
Any IO can be used as the external input to wake up the chip from Light-sleep. Each pin can be individually configured to trigger wakeup on high or low level using the gpio_wakeup_enable()function. Then the esp_sleep_enable_gpio_wakeup() function should be called to enable this wakeup source.
Additionally, IOs that are powered by the VDD3P3_RTC power domain can be used to wake up the chip from Deep-sleep. The wakeup pin and wakeup trigger level can be configured by calling esp_deep_sleep_enable_gpio_wakeup(). The function will enable the Deep-sleep wakeup for the selected pin.
Merci JMl pour votre guidage efficace. j’ai appliqué votre code, en y rajoutant la led Builtin pour visualiser le réveil. Voyant qu’elle clignotait , y ai ajouté un timer d’une minute. Le tout fonctionne, le réveil puis le retour en veille au terme de 60 secondes. Toutefois n’ai pas testé le wifi, à première vue la puce ne chauffe pas du tout comme avant de poser ce code, le wifi consommant assez, je crains que soit le delay bloque son démarrage, soit après un deep sleep il faille un code de démarrage spécifique au wifi. Qu’en pensez-vous? voici le code que j’ai testé avec succès.
#include <driver/gpio.h>
#define BUTTON_PIN GPIO_NUM_2
#define LED_PIN GPIO_NUM_8 // led builtin bleue témoin réveil
void setup() {
Serial.begin(115200);
gpio_set_direction(BUTTON_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON_PIN, GPIO_PULLUP_ONLY);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
gpio_set_level(LED_PIN, 1); // LED éteinte par défaut
esp_deep_sleep_enable_gpio_wakeup(1ULL << BUTTON_PIN, ESP_GPIO_WAKEUP_GPIO_LOW);
// Vérifier la cause du réveil
esp_sleep_wakeup_cause_t wakeup_reason = esp_sleep_get_wakeup_cause();
if (wakeup_reason == ESP_SLEEP_WAKEUP_GPIO) {
// Réveil par le bouton → allumer la LED
gpio_set_level(LED_PIN, 0);
delay(60000);}
esp_deep_sleep_start();
}
void loop() {}
Sur un ESP32-C3, le réveil depuis le deep sleep correspond à un redémarrage complet. Le microcontrôleur exécute à nouveau la fonction setup() et le contenu des variables globales est réinitialisé. La seule différence avec un reboot classique est que certaines informations de wakeup, comme la source du réveil ou le temps de sommeil, peuvent être récupérées via les fonctions spécifiques comme vous le faites.
Le Wi-Fi doit être réinitialisé comme s’il s’agissait d’un démarrage normal.
Un truc comme ça (tapé ici, non testé) devrait fonctionner
Comme spécifié tout au début, l’esp2C3 est prévue en émetteur wifi directe ( vers une autre ESp32C3) d’où je ne comprend pas pourquoi devoir saisir ses SSid et mot de passe, alors que l’on sert de son adresse mac uniquement, n’ayant pas d’interaction en retour avec d’autres points wifi. Pensant qu’un simple wifi.begin (); puisse suffir. elle ne fera qu’envoyer des informations, pas en recevoir. Je fais un édit de ma réponse et reviens un deuxième temps confirmer qu’avec votre code, la wifi est réactivée au réveil, sans même devoir reporter les coordonnées exactes SSID et MDP, les lignes de code recopiées telles que vous me les avez transmises. Toutefois, la dernière ligne avec While bloquant le timer, ce dernier ne s’arrêtait plus, en la supprimant le timer a reprit du service normalement. Merci beaucoup pour votre aide.