Inhoudsopgave:
- Stap 1: Inleiding
- Stap 2: Manieren om de ESP32 te wekken
- Stap 3: Timer
- Stap 4: Externe activering (ext0)
- Stap 5: Externe activering (ext1)
- Stap 6: ULP Coprocessor Wakeup
- Stap 7: Touchpad
- Stap 8: In de diepe slaapmodus gaan
- Stap 9: Hier is wat meer belangrijke informatie
- Stap 10: Demonstratie
- Stap 11: WiFi NodeMCU-32S ESP-WROOM-32
- Stap 12: Montage
- Stap 13: Programmeren
- Stap 14: Bibliotheek vereist
- Stap 15: Bibliotheken en variabelen
- Stap 16: Instellen
- Stap 17: Loop, terugbellen en configurerenDisplay
- Stap 18: Print_wakeup_reason (de oorzaak van het ontwaken kennen)
- Stap 19: Print_wakeup_touchpad (ken de GPIO Touch)
- Stap 20: Download de bestanden
Video: Levensduur van de batterij besparen met diepe slaap: 20 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Bent u geïnteresseerd in het gebruik van een batterij met uw ESP32? Als dat zo is, zal ik vandaag enkele belangrijke technische informatie over dit onderwerp bespreken. We weten dat deze microcontroller veel energie verbruikt bij het verzenden van informatie. Het verbruikt bijna 190 milliampère. In deze video laat ik zien hoe je energie kunt besparen met de ESP32 met de zogenaamde "DEEP SLEEP"-functie. We zullen de chip instellen om naar deze modus te gaan, de manieren leren om deze modus te verlaten en een voorbeeld maken met drie verschillende manieren om de ESP32 te wekken.
Het is belangrijk om te onthouden dat de radio veel energie verbruikt, in plaats van de processor. Energiebesparing is erg belangrijk. Dit komt omdat eindpunten (de circuits die informatie verzenden) vaak op batterijen werken en tot vijf jaar mee moeten gaan. Sommige fabrikanten beloven een levensduur van maximaal tien jaar, en dit geldt voor batterijen van hoge kwaliteit die de eindpunten niet zo vaak gebruiken. In alle andere gevallen raad ik je aan om Deep Sleep te gebruiken om energie uit je circuit te besparen.
Stap 1: Inleiding
De ESP32 heeft een energiebesparende modus, genaamd "Deep Sleep". In deze modus zijn CPU's, de meeste RAM en alle digitaal geklokte randapparatuur uitgeschakeld. De enige onderdelen van de chip die nog aangesloten kunnen worden zijn de RTC-controller, RTC-randapparatuur (inclusief ULP-coprocessor) en RTC-geheugens.
We hebben verschillende manieren om de ESP32 wakker te maken als hij slaapt. Wekbronnen kunnen op elk moment worden ingesteld voordat u naar de diepe slaapmodus gaat.
Stap 2: Manieren om de ESP32 te wekken
Er zijn vijf manieren om ESP32 te wekken:
• Timer
• Externe activering (ext0)
• Externe wekfunctie (ext1)
• ULP-coprocessor-activering
• Touchpad
Stap 3: Timer
De RTC-controller heeft een ingebouwde timer die kan worden gebruikt om de chip na een vooraf gedefinieerde tijdsperiode te activeren. De tijd wordt gespecificeerd met een precisie van microseconden.
esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us)
time_in_us> is de tijd in microseconden
Stap 4: Externe activering (ext0)
De RTC IO-module bevat logica om het alarm te activeren wanneer een van de RTC GPIO's een vooraf gedefinieerd logisch niveau binnengaat. De RTC IO maakt deel uit van het vermogensdomein van de RTC-randapparatuur, dus de RTC-randapparatuur wordt tijdens Deep Sleep in leven gehouden als deze activeringsbron wordt gevraagd.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int-niveau)
gpio_num> GPIO-nummer gebruikt als activeringsbron. Alleen RTC-functionele GPIO's kunnen worden gebruikt: 0, 2, 4, 12-15, 25-27, 32-39.
niveau> ingangsniveau dat het alarm activeert (0 = LAAG, 1 = HOOG)
Stap 5: Externe activering (ext1)
De RTC-controller bevat logica om de wekker te activeren met behulp van meerdere RTC GPIO's.
esp_deep_sleep_enable_ext1_wakeup (uint64_t masker, esp_ext1_wakeup_mode_t modus)
mask> bit mask van GPIO-nummers die activering veroorzaken. Alleen RTC-compatibele GPIO's kunnen in deze bitmap worden gebruikt: 0, 2, 4, 12-15, 25-27, 32-39.
mode> selecteer de logische functie die wordt gebruikt om de activeringsvoorwaarde te bepalen:
• ESP_EXT1_WAKEUP_ALL_LOW: ontwaakt wanneer alle geselecteerde GPIO's op LAAG staan
• ESP_EXT1_WAKEUP_ANY_HIGH: ontwaakt wanneer een van de geselecteerde GPIO's HOOG is
Stap 6: ULP Coprocessor Wakeup
De ULP-coprocessor kan werken terwijl de chip zich in Deep Sleep bevindt en kan worden gebruikt om sensoren te zoeken, ADC- of capacitieve aanraaksensorwaarden te bewaken en de chip te activeren wanneer een specifieke gebeurtenis wordt gedetecteerd.
De ULP-coprocessor maakt deel uit van het vermogensdomein van de RTC-randapparatuur en voert het programma uit dat is opgeslagen in het trage geheugen RTC. Daarom worden RTC-randapparatuur en langzaam RTC-geheugen geactiveerd tijdens Deep Sleep als deze activeringsmodus wordt gevraagd.
Stap 7: Touchpad
De RTC-controller bevat logica om het alarm te activeren met behulp van de capacitieve aanraaksensoren. De definitie van de aanraakpin is echter anders. We moeten de touch-interrupt gebruiken voor elk van de gewenste pinnen.
Na het instellen van de interrupts hebben we de wekmodus ingeschakeld om de sensoren te gebruiken.
// Configureer Touchpad als ontwaakbron esp_sleep_enable_touchpad_wakeup ();
Stap 8: In de diepe slaapmodus gaan
Na het instellen van een wekmodus is een enkele opdracht om de ESP32 in de diepe slaapmodus te zetten (2,5 μA of minder) voldoende. Ik benadruk hier dat deze uitgave afkomstig is van de ESP-chip en niet van de plaat, omdat deze meer uitgeeft.
esp_deep_sleep_start();
Vanuit dit commando valt de ESP32 in slaap en voert bijvoorbeeld de volgende coderegels niet uit.
Belangrijk: Alle wake-up-instellingen moeten worden gemaakt voordat de bovenstaande opdracht wordt uitgevoerd.
Stap 9: Hier is wat meer belangrijke informatie
De onderstaande oproep retourneert de oorzaak van ESP32-activering.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause();
Als we de activering door het touchpad instellen, kunnen we via de opdracht herstellen welke GPIO de aanraking heeft plaatsgevonden
esp_sleep_get_touchpad_wakeup_status();
Elke keer dat de ESP32 ontwaakt, doorloopt hij de instellingen opnieuw. Alle variabelen die niet in het RTC-geheugen zijn gedefinieerd, keren dus terug naar hun thuisstatus.
Gebruik de variabeledeclaratie in het onderstaande voorbeeld om de variabelen in het geheugen te bewaren, zelfs nadat u in slaap bent gevallen:
//RTC_DATA_ATTR heeft verschillende herinneringen aan RTCRTC_DATA_ATTR int bootCount = 0;
Stap 10: Demonstratie
De video toont het programma werkend, in overeenstemming met de afbeelding.
Stap 11: WiFi NodeMCU-32S ESP-WROOM-32
Stap 12: Montage
Stap 13: Programmeren
We gaan nu een programma maken waarin we de ESP32 configureren om naar de diepe slaapmodus te gaan. Dit wordt op drie verschillende manieren gewekt: een voor extern wekken (ext0), een voor timer en een voor touchpad. Ze kunnen niet samenwerken, dus we zullen een variabele gebruiken die een teller zal zijn voor het aantal keren dat de ESP32 Boot heeft gegeven om de manier te configureren om wakker te worden.
Stap 14: Bibliotheek vereist
Om het OLED-scherm te bedienen, hebben we een externe bibliotheek nodig. Hiervoor downloaden we de U8g2-bibliotheek.
Ga in de Arduino IDE naar het Sketch-menu >> Bibliotheek opnemen >> Bibliotheken beheren ….
Stap 15: Bibliotheken en variabelen
We hebben de bibliotheek toegevoegd om het OLED-scherm te besturen, evenals een constructor van de weergavecontroller-instantie. We wijzen de variabele ook toe aan het RTC-geheugen. We hebben de gevoeligheid ingesteld voor aanraakacceptatie, de microseconde conversiefactor voor seconden en de tijd dat de ESP32 naar de slaapstand gaat (in seconden).
#include //biblioteca para controle do display oled
// constructor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display (SCL, SDA, U8X8_PIN_NONE); //RTC_DATA_ATTR heeft een verscheidenheid aan herinneringen RTC RTC_DATA_ATTR int bootCount = 0; //gevoel voor aceitação do toque #define Threshold 40 //fator de conversão de microsegundos para segundos #define us_TO_S_FACTOR 1000000 //tempo que o ESP32 ficará em modo sleep (em segundos) #define TIME_TO_SLEEP 3
Stap 16: Instellen
In Setup verhogen we het aantal keren dat Boot heeft plaatsgevonden. We noemen de functie om het Boot-motief af te drukken. Als het Boot-nummer PAR is, stellen we de ESP32 in om wakker te worden via de (EXT0)-knop. Als het een veelvoud van 3 is, stellen we de ESP32 in om na een ingestelde tijd wakker te worden. Anders hebben we de capacitieve aanraakpinnen ingesteld om de ESP32 te wekken. Ten slotte stellen we het Touchpad in als de wekbron en dwingen we de ESP32 om naar de slaapmodus te gaan.
void setup() { Serial.begin(115200); vertraging (1000); //incrementa o numero de vezes o BOOT ocorreu ++bootCount; configureDisplay(); //chama a função para imprimir of motivo do BOOT print_wakeup_reason(); // Se o numero de boot voor PAR-configuraties o ESP32 voor despertar através do botão (EXT0) if (bootCount % 2 == 0) { esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); //1 = Hoog, 0 = Laag} // se voor multiplo de 3 configuraties o ESP32 para despertar depois de um tempo definido else if (bootCount % 3 == 0) { esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } //caso contrario configuraties voor touch capacitivo para despertar o ESP32 else { // Setup-onderbreking op Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // Configureer Touchpad als ontwaakbron esp_sleep_enable_touchpad_wakeup (); } Serial.println ("entrando em modo sleep"); esp_deep_sleep_start(); //força o ESP32 entrar em modo SLEEP }
Stap 17: Loop, terugbellen en configurerenDisplay
In de Loop hebben we niets te doen. We gaan dan over tot het onderbreken van terugbellen als we iets te doen hebben wanneer de onderbreking optreedt. Met betrekking tot configureDisplay initialiseren we het display en configureren we enkele parameters. We printen op het scherm het aantal keren dat het opstarten plaatsvond.
//nada a se fazer no loopvoid loop() {} //callback das interrupções void callback(){ //caso queira fazer algo ao ocorrer a interrupção} void configureDisplay() { //inicializa o display en configuratie alguns parametros display. beginnen(); display.setPowerSave(0); //modo powerSave (0-uit ? 1-aan) display.setFont(u8x8_font_torussansbold8_u); //fonte utilizada //imprime no display os numero de vezes que aconteceu o BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString(0, 2, String(bootCount).c_str()); display.drawString (0, 4, "MOTIVO:"); }
Stap 18: Print_wakeup_reason (de oorzaak van het ontwaken kennen)
Hier hebben we de functie om de oorzaak van het wakker worden van de ESP32 af te drukken. Controleer de pin en print op het display.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason(){ esp_sleep_wakeup_cause_t wakeup_reason; String reden = ""; wakeup_reason = esp_sleep_get_wakeup_cause(); // recupera a causa do despertar switch (wakeup_reason) { case 1: reden = "EXT0 RTC_IO BTN"; pauze; geval 2: reden = "EXT1 RTC_CNTL"; pauze; geval 3: reden = "TIMER"; pauze; geval 4: reden = "TOUCHPAD"; pauze; geval 5: reden = "ULP-PROGRAMMA"; pauze; standaard:reason = "GEEN DS OORZAAK"; pauze; } Serial.println(reden); display.clearLine(6); //apaga a linha 6 display.drawString(0, 6, reason.c_str()); //Imprime a causa do despertar no display //se despertou por TOUCHPAD, então vamos verificar em qual dos pinos ocorreu if (wakeup_reason == 4) { print_wakeup_touchpad (); // verifica o pino e imprime geen weergave } }
Stap 19: Print_wakeup_touchpad (ken de GPIO Touch)
Nu, in deze stap, hebben we de functie om de pin af te drukken die is aangeraakt. We hebben de GPIO teruggevonden die de ESP32 heeft gewekt en op het scherm afgedrukt.
// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () { touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status(); // recupera of GPIO que despertou of ESP32 String GPIO = ""; schakelaar (touchPin) {geval 0: GPIO = "4"; pauze; geval 1: GPIO = "0"; pauze; geval 2: GPIO = "2"; pauze; geval 3: GPIO = "15"; pauze; geval 4: GPIO = "13"; pauze; geval 5: GPIO = "12"; pauze; geval 6: GPIO = "14"; pauze; geval 7: GPIO = "27"; pauze; geval 8: GPIO = "33"; pauze; geval 9: GPIO = "32"; pauze; standaard: Serial.println ("Wakeup niet door touchpad"); pauze; } Serial.println("GPIO: "+GPIO); display.clearLine(7);//apaga a linha 7 display.drawString(0, 7, "GPIO: "); display.drawString(6, 7, GPIO.c_str()); //imprimeren of GPIO}
Stap 20: Download de bestanden
INO
Aanbevolen:
Hoe de levensduur van de batterij van AAA-zaklampen te verdrievoudigen - Ajarnpa
Hoe de levensduur van de batterij van AAA-zaklampen te verdrievoudigen: Als u 3W LED-zaklampen gebruikt die worden aangedreven door AAA-batterijen, verwacht u dat ze ongeveer 30 minuten meegaan. Er is een manier om de looptijd te verdrievoudigen door AA-batterijen te gebruiken, die ik je zal laten zien door er een AA-batterijhouder op aan te sluiten
Levensduur batterij van actiecamera hacken: 4 stappen (met afbeeldingen)
Hack Action Camera Batterijduur: Of je nu een GoPro, Contour of een andere camera hebt, deze is voor jou! Camcorderbatterijen zijn vaak een probleem. Of je maakt lange video's en ze gaan niet lang genoeg mee, of je bent gewoon vergeten om hem eerder volledig op te laden. Misschien is het heel co
Weerstation: ESP8266 met diepe slaap, SQL, grafieken door Flask & Plotly - Ajarnpa
Weerstation: ESP8266 Met Deep Sleep, SQL, Graphing by Flask&Plotly: Zou het leuk zijn om de temperatuur, vochtigheid of lichtintensiteit op je balkon te weten? Ik weet dat ik dat zou doen. Dus maakte ik een eenvoudig weerstation om dergelijke gegevens te verzamelen. De volgende secties zijn de stappen die ik heb genomen om er een te bouwen. Laten we beginnen
ESP-01 bewegingssensor met diepe slaap - Ajarnpa
ESP-01 bewegingssensor met diepe slaap: ik heb gewerkt aan het maken van zelfgemaakte bewegingssensoren die een e-mailbericht verzenden wanneer ze worden geactiveerd. Er zijn veel voorbeelden van instructables en andere voorbeelden om dit te doen. Ik moest dit onlangs doen met een op batterijen werkende PIR-bewegingssensor en een ESP
Verdubbel de levensduur van de batterij van de DX3-radio van Spektrum voor minder dan $ 20: 11 stappen
Verdubbel de levensduur van de batterij van de DX3-radio van Spektrum voor minder dan $ 20: ik kreeg het idee hiervoor voor het eerst op de draad voor de DX6/7 op RCGRoups.com-forums. Ik rijd met nitro-auto's, dus kocht ik een DX3. Ik heb de radio een tijdje gebruikt en mijn batterijduur was aan de betere kant van de meeste radio's - maar de DX7-bezitters begonnen