Innehållsförteckning:
- Steg 1: Introduktion
- Steg 2: Sätt att väcka ESP32
- Steg 3: Timer
- Steg 4: Extern väckning (ext0)
- Steg 5: Extern väckning (ext1)
- Steg 6: ULP Coprocessor Wakeup
- Steg 7: Pekplatta
- Steg 8: Öppna djupt viloläge
- Steg 9: Här är mer viktig information
- Steg 10: Demonstration
- Steg 11: WiFi-nodMCU-32S ESP-WROOM-32
- Steg 12: Montering
- Steg 13: Program
- Steg 14: Bibliotek krävs
- Steg 15: Bibliotek och variabler
- Steg 16: Inställning
- Steg 17: Loop, Callback & ConfigureDisplay
- Steg 18: Print_wakeup_reason (att veta orsaken till uppvaknandet)
- Steg 19: Print_wakeup_touchpad (känner till GPIO Touch)
- Steg 20: Ladda ner filerna
Video: Spara batterilivslängd med djup sömn: 20 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Är du intresserad av att använda ett batteri med din ESP32? I så fall kommer jag att diskutera idag viktig teknisk information om detta ämne. Vi vet att denna mikrokontroller spenderar mycket energi när den överför information. Den förbrukar nära 190 miljampar. I den här videon visar jag hur du sparar energi från ESP32 med den så kallade "DEEP SLEEP" -funktionen. Vi kommer att ställa in chippet för att gå in i det här läget, lära oss hur man går ur det här läget och skapa ett exempel som visar tre olika sätt att väcka ESP32.
Det är viktigt att komma ihåg att radion spenderar mycket energi, snarare än processorn. Energibesparing är mycket viktigt. Detta beror på att slutpunkter (kretsarna som skickar information) ofta är batteridrivna och bör vara upp till fem år. Det finns vissa tillverkare som lovar upp till tio år, och detta gäller för högkvalitativa batterier som inte använder slutpunkterna så mycket. I alla andra fall rekommenderar jag dig att använda Deep Sleep för att spara energi från din krets.
Steg 1: Introduktion
ESP32 har ett energisparläge som kallas "Deep Sleep". I det här läget är processorer, det mesta RAM -minnet och alla digitalt klockade kringutrustning avstängda. De enda delarna av chipet som fortfarande kan anslutas är RTC -styrenheten, RTC -kringutrustning (inklusive ULP -samprocessor) och RTC -minnen.
Vi har flera sätt att väcka ESP32 när du sover. Väckningskällor kan ställas in när som helst innan du går in i djupt viloläge.
Steg 2: Sätt att väcka ESP32
Det finns fem sätt att väcka ESP32:
• Timer
• Extern väckning (ext0)
• Extern väckning (ext1)
• ULP coprocessor väckning
• Pekplatta
Steg 3: Timer
RTC-styrenheten har en inbyggd timer som kan användas för att aktivera chipet efter en fördefinierad tid. Tiden anges med mikrosekundprecision.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> är tiden i mikrosekunder
Steg 4: Extern väckning (ext0)
RTC IO -modulen innehåller logik för att utlösa larmet när en av RTC GPIO: erna går in på en fördefinierad logiknivå. RTC IO är en del av kraftdomänen för RTC -kringutrustningen, så RTC -kringutrustningen kommer att hållas vid liv under djup sömn om denna aktiveringskälla begärs.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int -nivå)
gpio_num> GPIO -nummer som används som aktiveringskälla. Endast RTC-funktionella GPIO: er kan användas: 0, 2, 4, 12-15, 25-27, 32-39.
nivå> ingångsnivå som utlöser larmet (0 = LÅG, 1 = HÖG)
Steg 5: Extern väckning (ext1)
RTC -styrenheten innehåller logik för att utlösa väckarklockan med flera RTC GPIO: er.
esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)
mask> bitmask av GPIO -nummer som kommer att orsaka aktivering. Endast RTC-aktiverade GPIO: er kan användas i denna bitmapp: 0, 2, 4, 12-15, 25-27, 32-39.
läge> välj den logiska funktion som används för att bestämma aktiveringsvillkoret:
• ESP_EXT1_WAKEUP_ALL_LOW: vaknar när alla valda GPIO: er är låga
• ESP_EXT1_WAKEUP_ANY_HIGH: vaknar när någon av de valda GPIO: erna är HIGH
Steg 6: ULP Coprocessor Wakeup
ULP -coprocessorn kan fungera medan chipet är i djup sömn och kan användas för att söka efter sensorer, övervaka ADC eller kapacitiva beröringssensorvärden och aktivera chipet när en specifik händelse detekteras.
ULP -samprocessorn är en del av effektdomänen för RTC -kringutrustningen och kör programmet som lagras i RTC med långsamt minne. Därför kommer RTC -kringutrustning och RTC -långsamt minne att aktiveras under djup sömn om detta aktiveringsläge begärs.
Steg 7: Pekplatta
RTC -styrenheten innehåller logik för att utlösa larmet med hjälp av kapacitiva beröringssensorer. Definitionen av beröringsstiftet är dock en annan. Vi måste använda touchavbrottet för var och en av de önskade stiften.
Efter att ha ställt in avbrotten aktiverade vi väckningsläget för att använda sensorerna.
// Konfigurera pekplattan som väckarkälla esp_sleep_enable_touchpad_wakeup ();
Steg 8: Öppna djupt viloläge
Efter att ha ställt in ett väckningsläge räcker det med ett enda kommando för att sätta ESP32 i djupt viloläge (spenderar 2,5 μA eller mindre). Jag betonar här att denna kostnad kommer från ESP -chipet och inte plattan, eftersom den senare spenderar mer.
esp_deep_sleep_start ();
Från detta kommando somnar ESP32 och exekverar till exempel inte nästa kodrad.
Viktigt: Alla väckningsinställningar måste göras innan ovanstående kommando utförs.
Steg 9: Här är mer viktig information
Samtalet nedan returnerar orsaken till ESP32 -väckning.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Om vi ställer in väckningen med pekplattan kan vi återställa vilken GPIO som beröringen inträffade genom kommandot
esp_sleep_get_touchpad_wakeup_status ();
Varje gång ESP32 vaknar kommer det att gå igenom installationen igen. Således kommer alla variabler som inte är definierade i RTC -minnet att återgå till sitt hemtillstånd.
För att behålla variablerna i minnet även efter att ha somnat, använd variabeldeklarationen i exemplet nedan:
// RTC_DATA_ATTR aloca a variável na memoria RTCRTC_DATA_ATTR int bootCount = 0;
Steg 10: Demonstration
Videon visar hur programmet fungerar i enlighet med bilden.
Steg 11: WiFi-nodMCU-32S ESP-WROOM-32
Steg 12: Montering
Steg 13: Program
Vi kommer nu att göra ett program där vi konfigurerar ESP32 för att gå in i djupt viloläge. Detta kommer att väckas på tre olika sätt: ett för extern väckning (ext0), ett för timer och ett för pekplatta. De kan inte fungera tillsammans, så vi använder en variabel som kommer att vara en räknare för hur många gånger ESP32 gav Boot för att konfigurera sättet att vakna.
Steg 14: Bibliotek krävs
För att styra OLED -displayen behöver vi ett externt bibliotek. För detta kommer vi att ladda ner U8g2 -biblioteket.
I Arduino IDE, gå till skissmenyn >> Inkludera bibliotek >> Hantera bibliotek….
Steg 15: Bibliotek och variabler
Vi har inkluderat biblioteket för att styra OLED -skärmen, liksom en konstruktör av displaykontrollinstansen. Vi tilldelar också variabeln i RTC -minnet. Vi ställer in känsligheten för beröringsacceptans, mikrosekundomvandlingsfaktorn i sekunder och tiden ESP32 går till viloläge (i sekunder).
#include // biblioteca para control do display oled
// konstruktör för instans för visning // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR aloca a variável na memoria RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para 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
Steg 16: Inställning
I installationen ökar vi antalet gånger Boot startade. Vi kallar funktionen för att skriva ut Boot -motivet. Om Boot -numret är PAR ställer vi in ESP32 för att vakna via (EXT0) -knappen. Om det är en multipel av 3 ställer vi in ESP32 för att vakna efter en viss tid. Annars sätter vi upp de kapacitiva pekpinnarna för att väcka ESP32. Slutligen ställer vi in styrplattan som väckarkälla och tvingar ESP32 att gå in i viloläge.
void setup () {Serial.begin (115200); fördröjning (1000); // incrementa o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o numero de boot for PAR configuramos o ESP32 para despertar através do botão (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Hög, 0 = Låg} // se för multiplo de 3 konfiguramos 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 configuramos os pinos de touch capacitivo para despertar o ESP32 else {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // Konfigurera pekplattan som väckarkälla esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}
Steg 17: Loop, Callback & ConfigureDisplay
I Loop har vi ingenting att göra. Vi fortsätter sedan att avbryta återuppringning om vi har något att göra när avbrottet inträffar. När det gäller configureDisplay initierar vi displayen och konfigurerar några parametrar. Vi skriver ut på skärmen hur många gånger Boot startade.
// 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 e configura alguns parametros display. Börja(); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) 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:"); }
Steg 18: Print_wakeup_reason (att veta orsaken till uppvaknandet)
Här har vi funktionen att skriva ut orsaken till ESP32 -väckningen. Kontrollera stiftet och skriv ut på displayen.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String reason = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; ha sönder; fall 2: orsak = "EXT1 RTC_CNTL"; ha sönder; fall 3: orsak = "TIMER"; ha sönder; fall 4: orsak = "TOUCHPAD"; ha sönder; fall 5: orsak = "ULP -PROGRAM"; ha sönder; default: reason = "NO DS ORSAK"; ha sönder; } Serial.println (anledning); display.clearLine (6); // apaga a linha 6 do display 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 no display}}
Steg 19: Print_wakeup_touchpad (känner till GPIO Touch)
Nu, i det här steget, har vi funktionen att skriva ut stiftet som rördes. Vi återhämtade GPIO som väckte ESP32 och skrev ut den på displayen.
// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // recupera o GPIO que despertou o ESP32 String GPIO = ""; switch (touchPin) {case 0: GPIO = "4"; ha sönder; fall 1: GPIO = "0"; ha sönder; fall 2: GPIO = "2"; ha sönder; fall 3: GPIO = "15"; ha sönder; fall 4: GPIO = "13"; ha sönder; fall 5: GPIO = "12"; ha sönder; fall 6: GPIO = "14"; ha sönder; fall 7: GPIO = "27"; ha sönder; fall 8: GPIO = "33"; ha sönder; fall 9: GPIO = "32"; ha sönder; standard: Serial.println ("Wakeup not by touchpad"); ha sönder; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a linha 7 visar display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Steg 20: Ladda ner filerna
INO
Rekommenderad:
Hack Action Camera Batterilivslängd: 4 steg (med bilder)
Hack Action Camera Batterilivslängd: Antingen har du en GoPro, Contour eller någon annan kamera den här är för dig! Videokamerans batterier är ofta ett problem. Antingen spelar du in långa videor och de håller inte tillräckligt länge, eller så har du bara glömt att ladda det helt innan. Kanske är det mycket bra
Gör din egen anslutna värmetermostat och spara med värme: 53 steg (med bilder)
Gör din egen anslutna värmetermostat och spara med värme: Vad är syftet? Öka komforten genom att värma ditt hus precis som du vill Spara och minska utsläppen av växthusgaser genom att värma ditt hus bara när du behöver Håll kontroll över din uppvärmning var du än är Var stolt över att du gjorde det
Väderstation: ESP8266 Med djup sömn, SQL, diagram efter flaska & Plotly: 3 steg
Weather Station: ESP8266 Med Deep Sleep, SQL, Graphing by Flask & Plotly: Skulle det vara kul att veta temperaturen, luftfuktigheten eller ljusintensiteten på din balkong? Jag vet att jag skulle. Så jag gjorde en enkel väderstation för att samla in sådan information. Följande avsnitt är stegen jag tog för att bygga en. Låt oss komma igång
ESP-01 rörelsessensor med djup sömn: 5 steg
ESP-01 Rörelsessensor med djup sömn: Jag har arbetat med att göra hemlagade rörelsesensorer som skickar ett e-postmeddelande när de utlöses. Det finns många exempel på instruktioner och andra exempel på att göra detta. Jag behövde nyligen göra detta med en batteridriven PIR -rörelsesensor och en ESP
Spåra accelerationsvariationer med Raspberry Pi och MMA7455 med Python: 6 steg
Spåra accelerationsvariationer med Raspberry Pi och MMA7455 med Python: Jag snubblade inte, jag testade gravitationen. Det fungerar fortfarande … En representation av en accelererande rymdfärja klargjorde att en klocka vid pendelns högsta punkt skulle plocka snabbare än en vid basen på grund av gravitationstidsutvidgning. Vissa