Ciao a tutti
come molti vll. sanno, la scheda di sviluppo con ESP32 da Espressif supporta la modalità di sospensione profonda. Purtroppo, questa funzione non è stata implementata bene, ci sono diversi punti deboli che devono essere considerati. In primo luogo, il contenuto di tutte le variabili viene perso in una sospensione profonda e la seconda volta che eSP32 ricomincia dopo una riattivazione del sonno profondo nel ciclo void setup(). C'è anche un problema ancora peggiore: Wakeup non funziona in modo affidabile. Se l'ESP ha dormito un paio di volte, può accadere che semplicemente non si sveglia più. Senza queste insidie, la modalità Deep Sleep sarebbe solo una tre battute. Tuttavia, dal momento che molti clienti hanno problemi con questo, vorrei fornire uno schizzo qui e commentare brevemente ciò che conta.
Hardware:
- ESP32 Dev Board C
- LED rosso
- LED blu
Il cablaggio:
Commissione Sviluppo | LED rosso | LED blu |
22 | + | |
23 | + | |
Gnd | Gnd | Gnd |
Per i LED, si raccomandano resistori, non sono necessari :)
Il codice:
# define uS_TO_S_FACTOR 1000000 siamo stati fuori dall'esempio # define TIME_TO_SLEEP 10 nomen est. RTC_DATA_ATTR Int bootCount (conteggiodi caratteri) = 0; solo valori nella memoria RTC
Rimanere perché tutti noi
Scrivere variabili in quest'area di memoriaWrite variables to this memory area Led per verificare se funziona: Int REBOOT_LED = 23; Blu Int BOOT_LED = 22; Rosso Vuoto Installazione(){ ogni risveglio qui PinMode (Modalità pin)(REBOOT_LED,Output); ogni inizio PinMode (Modalità pin)(BOOT_LED,Output); al primo avvio Ritardo(500); ritardo non rimuovere! Solo con il ritardo a questo punto si sveglia in modo affidabile Se(bootCount (conteggiodi caratteri) == 0) Se il contatore nella memoria RTC è impostato su zero { digitalWrite (Scrittura digitale)(BOOT_LED,alto); bootCount (conteggiodi caratteri) = bootCount (conteggiodi caratteri)+1; }Altro con ogni risveglio { digitalWrite (Scrittura digitale)(REBOOT_LED,alto); } Ritardo(1000); I LED si accendono 1 secondo digitalWrite (Scrittura digitale)(REBOOT_LED,Basso); digitalWrite (Scrittura digitale)(BOOT_LED,Basso); prima di uscire di nuovo esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
imposta il timer esp_deep_sleep_start(); Buona notte! } Vuoto Ciclo(){ per il bene della completezza }
5 commenti
Bruno
Hallo,
der Source-Code des c‘t Projektes findet sich dort ( https://github.com/ct-Open-Source/ESP-Doorsensor ).
Peter N.
Ich habe diesen Aufbau getestet. Die Strommessung ergab folgende Werte:
Aufwachmodus 50mA mit zwei LEDs. Ohne 48mA. Der Schlafmodus hat erschreckende 9mA!
Dieser Wert ist einfach nicht für Batteriebetrieb geeignet.
Wenn ich den Wroom 32 Mini einsetze, komm ich auf 41mA aufgewacht und 1,6mA
im Sleepmodus. Das könnte man eventuell durch Entfernen der roten LED noch weiter senken.
Markus W
@Piet
Ist hier nicht eher das Problem die Selbstentladung der Batterien und dass diese nach der Woche einfach nicht mehr die notwendige Spannung besitzen? Wie sind denn deine Werte an den Batterien gemessen?
Ich selbst bin gerade in der letzten Phase meine ePaper-Display-Projektes. Das betreibe ich mit einem 18650-Akku mit 3000mAh. Laut Logik und Theorie sollte ich damit Jahre hinkommen. Zumal ich den ESP32 nur 1x täglich aufwecke.
Piet
ich habe da ein ganz anderes Problem … Ich versorge den ESP32 mit zweimal 2200 mAh Batterien. Der Chip ist im deep sleep modus (hibernation state), wacht alle 2 Stunden auf misst die Feuchtigkeit (capacitive sensor), sendet sie via Bluetooth Low Energy und geht wieder schlafen. Funktioniert soweit gut.
In dieser Konfiguation sollte der Chip Monate (mal liest sogar von Jahre) laufen. Tatsächlich bringt er es gerade mal auf eine Woche.
Veit
puh 500ms ist aber schon recht lang wenn man einen quick-wakeup haben will …. in der ct gabs mal einen türsensor mit esp32 der sich immer schlafen gelegt hat, da war sicherlich keine 500ms pause drin. wäre vielleicht mal interessant ob die auch das problem hatten bzw wie sie es gelöst haben.