Bonjour j'ai une carte xiao esp32-c3 et je voudrais la passé en deep sleep et un réveille sur trois pins. J'ai eu du mal à trouvé mais il semblerait que les pins GPIO0 à 5 soit utilisable (A confirmé). Sur la carte seul les pins 2 à 5 sont dispo.
J'arrive à le faire sur une esp32 classique mais pas sur cette carte.
Il y a des explications et un exemple de code ici :
CAUTION
Currently the XIAO ESP32C3 only supports GPIO wake-up, and the only pins that support wake-up are D0~D3. This program may not work on other pins.
Merci mais j'avais déjà vu les liens. Je pence que les pins D0 à D3 devrait être utilisable mais bon j'ai toujours pas put vérifier. J'ai vraiment besoin de 3 pins pour mon utilisation.
J'ai activé esp_sleep_enable_ext1_wakeup et déactivé esp_sleep_enable_ext0_wakeup
Par conte, j'ai deux problème avec le code:
1 - BUTTON_PIN_BITMASK, je ne vois pas comment le calculé. soit par GPIO ou D...
2 - 'esp_sleep_enable_ext1_wakeup' was not declared in this scope lors de la compilation
Si on par du principe qui c'est bien les GPIO qui faut prendre. Sa règle le premier point mais pas le deuxième
Ce code fonctionne par conte faite attention de pas le compilé directe car après impossible de pouvoir envoyé un autre code:
RTC_DATA_ATTR int bootCount = 0;
/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch(wakeup_reason)
{
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
}
}
void setup(){
Serial.begin(115200);
delay(1000); //Take some time to open up the Serial Monitor
//Increment boot number and print it every reboot
++bootCount;
Serial.println("Boot number: " + String(bootCount));
//Print the wakeup reason for ESP32
print_wakeup_reason();
esp_deep_sleep_enable_gpio_wakeup(BIT(D0), ESP_GPIO_WAKEUP_GPIO_LOW);
esp_deep_sleep_enable_gpio_wakeup(BIT(D1), ESP_GPIO_WAKEUP_GPIO_LOW);
esp_deep_sleep_enable_gpio_wakeup(BIT(D2), ESP_GPIO_WAKEUP_GPIO_LOW);
delay(30000);
//Go to sleep now
Serial.println("Going to sleep now");
//esp_deep_sleep_start();
Serial.println("This will never be printed");
}
void loop(){
//This is not going to be called
}
SI sa arrive, Maintenez le bouton de démarrage enfoncé et connectez XIAO ESP32C3 au PC pour passer en mode chargeur de démarrage.
OK, mais tu l'as quand même adapté à ton besoin pour qu'il puisse se réveiller sur un niveau LOW sur l'une des 3 pins.
Que se passe t-il lors du réveil ? Est-ce qu'il se réveille bien lorsque tu connectes D0, D1 ou D2 sur GND ?
Il n'y a rien d'autre dans la console ensuite ?
Dans ce code rien, je voulais juste testé avant de l'ajouté au reste de mon code.
Les 3 pins sont en faite 3 capteur ouverture de porte (Boite au lettre) qui une fois ouverte va actionné un servo moteur pour indiqué à l'extérieur la présence de courrier et réveillé un NRF24L01 pour envoyé un message via radio fréquence sur un autre NRF24L01+ESP32-S3+Carte SD qui va envoyé un mail pour me dire que j'ai du courrier.
J'ai actuellement un ESP32 et 3 capteur de porte en filaire pour m’envoyai des mail.
La nouvelle version va être sans fil avec une porté de 800 m à 1,1 Km et a l'extérieur panneau solaire, chargeur, accu et indicateur.
Puis la finalité une boite à colis et lettre avec en plus digicode et écran