Xiao esp32-c3 rtc

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.

Si vous avez des pistes ? Merci d'avance

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.

La liste des cause de réveil est ici :
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html#_CPPv418esp_sleep_source_t

Ce sketch (à adapter au Xiao) est intéressant aussi : il peut te permettre d'identifier les GPIO utilisables pour le réveil :

Je pense que ce modèle n'a que deux pads utilisables pour le TouchPad : GPIO2 et 4 soit D0 et D2

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.

ExternalWakeUp.

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

Peut-être une piste ici :

Cherche " GPIOs Bitmask"

OK donc 2^2+2^3+2^4 = 28 donc 0x1C ?

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.

28 s'écrit bien 0x1C en hexa. Pour le reste je pense comme toi.

Merci pour ton aide

Je n'ai pas cette carte, mais je suis curieux de savoir ce que donne ton code. Peux-tu mettre une copie de la sortie console ? Merci

Ce n'est pas mon code.

Je les trouvé dans le doc Code

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

Beau projet, ça s'annonce bien
Bon courage

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.