Bonjour à tous,
Je confectionne un projet de sonde de température/humidité avec un ESP32 C3 Super Mini.
Le fonctionnement avec le DHT11 est parfait (ou presque) ainsi que l'écran OLED.
Le deep sleep avec réveil par RTC fonctionne bien.
Mais j'aimerai aussi pouvoir le réveiller avec un bouton poussoir, et là je n'y arrive pas.
J'ai testé les pins de 0 à 3 en pull_up ou pull_down mais rien n'y fait.
Dans le SETUP j'ai mis:
(les déclarations sont correctes et placées avant)
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_enable_gpio_wakeup(WAKEUP_GPIO, ESP_GPIO_WAKEUP_GPIO_HIGH);
Merci pour la réponse, désolé pour ne pas avoir mis le code, mais le reste du code ne sert qu'a la gestion de l'écran et du DHT11 j'ai donc voulu rester simplement sur le problème que j'ai sur le réveille.
Le site que tu me donne je l'ai déjà dans mes favoris et consulté, il donne des pistes pas du concret sur mon problème. Je ne suis pas un débutant, je sais que les pins a utiliser doivent être RTC mais pas obligatoirement (surtout qu'avec ce processeur on ne peut pas utiliser les commande de sleep liées au RTC). Celles que j'ai testé sont RTC. L'ESP32 C3 est particulier, 1 core, peu d'IO (suffisamment pour moi) mais son grand avantage est sa consommation en deep sleep, c'est pourquoi mon choix. Je voulais surtout savoir si quelqu'un a déjà pratiqué le deep sleep avec ce petit module. Merci encore pour ton aide.
Je n'ai pas encore testé le réveil Externe de deep-sleep avec un ESP32-C3 sur une carte C3 Super Mini , C3 Mini ou Xiao C3 (les deux dernières ayant pour moi l'avantage d'avoir un fabricant identifié documentant la carte avec un leur schéma)
je ne me souvient pas d'avoir rencontré des pbs pour ce qui est du réveil de deep-sleep temporisé
Oui le site RandomNerdTutorials donne des pistes en ce sens qu'il renseigne essentiellement sur l'ESP32 première version , peu ou pas sur les particularités -C3, -C6, -S2, -S3......
Merci pour ta réponse et le lien, je l'avais consulté.
Malheureusement, j'ai besoin des 2 types de réveille:
Par RTC (redémarrage toutes les 15mn) et ça c'est bon ça fonctionne comme attendu.
Par une pin de réveille, juste pour afficher les dernières valeurs (sans connexion WiFi)
Voila l'essentiel du programme, plus simple impossible, après c'est le blink!
EN , accessible en soudant un fil du bon côté du bouton RST, n'est pas une pin capable de réveiller d'un deep-sleep sans programmation spécifique en attendant de pouvoir faire autrement ?
Merci beaucoup pour l'aide.
Mais faire un reset c'est pas propre (je trouve) mais je continu de chercher, j'ai regardé aussi du coté du S3 Zero qui ressemble pas mal, mais une organisation différente, j'en ai un et après mes derniers test avec le C3 je testerai le S3.
J'ai fini par trouver en fouillant la librairie du C3.
Il faut mettre en plus des déclarations, le "sleep gpio enabled".
Ligne pour le GPIO Wake up dans le SETUP:
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); // Reveille par timer
esp_deep_sleep_enable_gpio_wakeup(BUTTON_PIN_BITMASK(WAKEUP_GPIO), ESP_GPIO_WAKEUP_GPIO_HIGH); // Reveille par GPIO
gpio_pullup_dis(WAKEUP_GPIO);
gpio_pulldown_en(WAKEUP_GPIO);
esp_sleep_enable_gpio_wakeup();
Déclaration avant SETUP:
#define uS_TO_S_FACTOR 1000000 // Conversion factor for micro seconds to seconds (il faut 1 million de µs pour 1 s)
#define BUTTON_PIN_BITMASK(GPIO) (1ULL << GPIO) // 2 ^ GPIO_NUMBER in hex
#define USE_EXT0_WAKEUP 1 // 1 = EXT0 wakeup, 0 = EXT1 wakeup
#define WAKEUP_GPIO GPIO_NUM_2 // Bouton de réveil (GPIO 3) - Only RTC IO are allowed - ESP32 Pin example
uint32_t TIME_TO_SLEEP = 900; // Temps pendant lequel l'ESP32 va se mettre en veille (en secondes) - 900 s = 15 mn
En faisant comme cela arrives-tu à gérer de manière spécifique chacune des sources de réveil ?
j'ai testé et en cas de réveil par BP quand je demande l'affichage de la cause du reset je n'ai pas, comme attendu, un message mentionnant un signal externe , malgré la présence de cette ligne :
#define USE_EXT0_WAKEUP 1
je vois juste :
Wakeup was not caused by deep sleep: 7
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
if (wakeup_reason == ESP_SLEEP_WAKEUP_EXT0) {
// Ce que tu veux
}
Je comptais là dessus mais içi le réveil par BP se produit bien ..... mais sans être associé à la 'bonne cause' (cf #11)
quelle version du 'core ESP32 pour IDE Arduino' utilises-tu actuellement ?
3.11 pour moi en essayant de te suivre aujourd'hui sur un sujet que je n'avais jamais expérimenté : le réveil de deepsleep par BP sur un ESP32-C3.
Dans mes essais le pull down est désactivé, le pull up activé et je déclenche sur un état bas , ça fonctionne bien (sortie de deep sleep) bien à part le 'reset cause' mal identifié.
mais bon je garde ça en l'état , je n'en ai pas besoin maintenant
J'ai lu dans le datasheet du circuit qu'il était préférable de déclencher le réveil sur un état haut. Moi j'ai mis une résistance de 10k sur l'entrée 2 (RTC) qui tire vers le bas (GND) et le bouton amène le plus 3.3V quand on appui. Avec l'interception du démarrage, j'affiche les valeurs des données (Température, Humidité, T° ressentie) juste pendant 5s (paramétrable) et je remet l'ESP32 en sommeil sans passer par la case connexion WiFi. Le timer pendant ce temps continu, et refait une mesure puis envoi les données vers mon serveur (oui, j'ai un serveur perso). Pour la température extérieur, pression et humidité c'est un Wemos ESP8266 qui s'en charge, sans jamais être mit en sommeil, l'alimentation est constante.
N'hésites pas si tu veux d'autres infos.
Ajout de dernière minute: Version Core 3.1.1 et Processeur dans IDE : MakerGO ESP32 C3 Super Mini
Remplaces ```
ESP_SLEEP_WAKEUP_EXT0 par ESP_SLEEP_WAKEUP_GPIO