Obsah:

Úspora výdrže baterie s hlubokým spánkem: 20 kroků
Úspora výdrže baterie s hlubokým spánkem: 20 kroků

Video: Úspora výdrže baterie s hlubokým spánkem: 20 kroků

Video: Úspora výdrže baterie s hlubokým spánkem: 20 kroků
Video: Jak efektivně zlepšit výdrž iPhone baterie? 🔋 2024, Listopad
Anonim
Image
Image
Způsoby, jak probudit ESP32
Způsoby, jak probudit ESP32

Máte zájem o použití baterie s vaším ESP32? Pokud ano, dnes budu diskutovat o některých důležitých technických informacích týkajících se tohoto tématu. Víme, že tento mikrokontrolér vydává spoustu energie při přenosu informací. Spotřebuje téměř 190 miliampérů. V tomto videu ukážu, jak ušetřit energii z ESP32 pomocí takzvané funkce „DEEP SLEEP“. Nastavíme čip, aby vstoupil do tohoto režimu, naučíme se způsoby, jak z tohoto režimu vystoupit, a vytvoříme příklad ukazující tři různé způsoby probuzení ESP32.

Je důležité si uvědomit, že rádio vydává spoustu energie, nikoli procesor. Úspora energie je velmi důležitá. Důvodem je, že koncové body (obvody, které odesílají informace) jsou často napájeny baterií a měly by vydržet až pět let. Někteří výrobci slibují až desetileté trvání, a to platí pro vysoce kvalitní baterie, které tolik nepoužívají koncové body. Ve všech ostatních případech vám doporučuji použít Deep Sleep, abyste ušetřili energii z vašeho okruhu.

Krok 1: Úvod

ESP32 má režim úspory energie, který se nazývá „hluboký spánek“. V tomto režimu jsou vypnuty CPU, většina RAM a všechna digitálně taktovaná periferie. Jediné části čipu, které lze stále připojit, jsou řadič RTC, periferní zařízení RTC (včetně koprocesoru ULP) a paměti RTC.

Existuje několik způsobů, jak probudit ESP32, když spí. Zdroje probuzení lze nastavit kdykoli před vstupem do režimu hlubokého spánku.

Krok 2: Způsoby probuzení ESP32

Existuje pět způsobů, jak probudit ESP32:

• Časovač

• Externí probuzení (ext0)

• Externí probuzení (ext1)

• probuzení koprocesoru ULP

• Touchpad

Krok 3: Časovač

Řadič RTC má vestavěný časovač, který lze použít k aktivaci čipu po předem definovaném časovém období. Čas je zadán s přesností na mikrosekundy.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> je čas v mikrosekundách

Krok 4: Externí probuzení (ext0)

Modul RTC IO obsahuje logiku pro spuštění alarmu, když jeden z RTC GPIO vstoupí do předdefinované logické úrovně. RTC IO je součástí výkonové domény periferních zařízení RTC, takže periferní zařízení RTC budou udržována naživu během hlubokého spánku, pokud je tento zdroj aktivace požadován.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int úroveň)

gpio_num> GPIO číslo použité jako aktivační zdroj. Lze použít pouze GPIO s funkcí RTC: 0, 2, 4, 12-15, 25-27, 32-39.

úroveň> vstupní úroveň, která spustí alarm (0 = LOW, 1 = HIGH)

Krok 5: Externí probuzení (ext1)

Řadič RTC obsahuje logiku pro spuštění budíku pomocí více RTC GPIO.

esp_deep_sleep_enable_ext1_wakeup (maska uint64_t, režim esp_ext1_wakeup_mode_t)

maska> bitová maska čísel GPIO, která způsobí aktivaci. V této bitmapě lze použít pouze GPIO podporující RTC: 0, 2, 4, 12-15, 25-27, 32-39.

režim> vyberte logickou funkci použitou k určení podmínky aktivace:

• ESP_EXT1_WAKEUP_ALL_LOW: probudí se, když jsou všechna vybraná GPIO v LOW

• ESP_EXT1_WAKEUP_ANY_HIGH: probudí se, když jsou některá z vybraných GPIO VYSOKÁ

Krok 6: Probuzení koprocesoru ULP

Koprocesor ULP může pracovat, když je čip v režimu hlubokého spánku, a lze jej použít k vyhledávání senzorů, monitorování hodnot ADC nebo kapacitních dotykových senzorů a aktivaci čipu, když je detekována konkrétní událost.

Koprocesor ULP je součástí výkonové domény periferií RTC a spouští program uložený v RTC s pomalou pamětí. Proto budou během hlubokého spánku aktivovány periferie RTC a pomalá paměť RTC, pokud je tento aktivační režim požadován.

Krok 7: Touchpad

Regulátor RTC obsahuje logiku pro spuštění alarmu pomocí kapacitních dotykových senzorů. Definice dotykového kolíku je však odlišná. Pro každý z požadovaných kolíků musíme použít dotykové přerušení.

Po nastavení přerušení jsme pro použití senzorů aktivovali režim probuzení.

// Konfigurace Touchpadu jako zdroje probuzení esp_sleep_enable_touchpad_wakeup ();

Krok 8: Vstup do režimu hlubokého spánku

Po nastavení režimu probuzení stačí jeden příkaz k přepnutí ESP32 do režimu hlubokého spánku (výdaje 2,5 μA nebo méně). Zde zdůrazňuji, že tyto výdaje pocházejí z čipu ESP a ne z desky, protože ta utrácí více.

esp_deep_sleep_start ();

Z tohoto příkazu ESP32 usne a například neprovede další řádky kódu.

Důležité: Všechna nastavení probuzení je nutné provést před spuštěním výše uvedeného příkazu.

Krok 9: Zde jsou některé další důležité informace

Zde jsou některé další důležité informace
Zde jsou některé další důležité informace

Níže uvedené volání vrací příčinu probuzení ESP32.

1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Pokud nastavíme probuzení pomocí touchpadu, můžeme pomocí příkazu obnovit, které GPIO, ke kterému dotyku došlo

esp_sleep_get_touchpad_wakeup_status ();

Pokaždé, když se ESP32 probudí, bude znovu procházet nastavením. Všechny proměnné, které nejsou definovány v paměti RTC, se tedy vrátí do výchozího stavu.

Chcete -li zachovat proměnné v paměti i po usnutí, použijte deklaraci proměnné v následujícím příkladu:

// RTC_DATA_ATTR aloca a variável na memória RTCRTC_DATA_ATTR int bootCount = 0;

Krok 10: Ukázka

Demonstrace
Demonstrace

Video ukazuje, jak program pracuje podle obrázku.

Krok 11: WiFi NodeMCU-32S ESP-WROOM-32

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

Krok 12: Sestavení

Shromáždění
Shromáždění

Krok 13: Program

Nyní vytvoříme program, kde nakonfigurujeme ESP32 tak, aby vstoupil do režimu hlubokého spánku. Probudí se to třemi různými způsoby: jedním pro externí probuzení (ext0), jedním pro časovač a druhým pro touchpad. Nemohou spolupracovat, takže použijeme proměnnou, která bude čítačem pro počet, kolikrát ESP32 poskytl Boot, aby nakonfiguroval způsob probuzení.

Krok 14: Je vyžadována knihovna

Je vyžadována knihovna
Je vyžadována knihovna

K ovládání OLED displeje potřebujeme externí knihovnu. Za tímto účelem stáhneme knihovnu U8g2.

V Arduino IDE přejděte do nabídky Skica >> Zahrnout knihovnu >> Spravovat knihovny….

Krok 15: Knihovny a proměnné

Zahrnuli jsme knihovnu pro ovládání OLED displeje a také konstruktor instance řadiče zobrazení. Rovněž přidělíme proměnnou v paměti RTC. Nastavili jsme citlivost pro akceptaci dotykem, mikrosekundový převodní faktor na sekundy a čas, kdy ESP32 přejde do režimu spánku (v sekundách).

#include // biblioteca para controle do display oled

// konstantor instancí do ovládání zobrazit // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C displej (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR aloca a variável with memoria RTC RTC_DATA_ATTR int bootCount = 0; // senzibilizace 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

Krok 16: Nastavení

V instalačním programu zvyšujeme počet spuštění. Voláme funkci tisku motivu Boot. Pokud je spouštěcí číslo PAR, nastavíme ESP32 na probuzení pomocí tlačítka (EXT0). Pokud se jedná o násobek 3, nastavíme ESP32, aby se po nastaveném čase probudil. V opačném případě jsme nastavili kapacitní dotykové piny, aby probudily ESP32. Nakonec jsme jako zdroj probuzení nastavili Touchpad a přinutili ESP32 přejít do režimu spánku.

neplatné nastavení () {Serial.begin (115200); zpoždění (1000); // přírůstek o počet čísel, o které se mají spustit BOOT ocorreu ++ bootCount; configureDisplay (); // chama a funcaão para imprimir o motivo do BOOT print_wakeup_reason (); // se o spouštěcí číslo pro PAR konfiguruje o ESP32 se může zoufale lišit (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Vysoká, 0 = Nízká} // pro více konfigurací 3 konfigurací nebo ESP32 pro depo z depois de um tempo definido else if (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // konfigurace konfigurace dotykové plochy nebo dotykové kapacity ESP32 nebo jiného {// přerušení instalace na zařízení Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, zpětné volání, prahová hodnota); // Konfigurace Touchpadu jako zdroje probuzení esp_sleep_enable_touchpad_wakeup (); } Serial.println („entrando em modo sleep“); esp_deep_sleep_start (); // for oa ESP32 entrar em modo SLEEP}

Krok 17: Smyčka, zpětné volání a konfigurace zobrazení

Ve smyčce nemáme co dělat. Poté pokračujeme k přerušení zpětného volání, pokud máme co dělat, když dojde k přerušení. Pokud jde o configureDisplay, inicializujeme zobrazení a konfigurujeme některé parametry. Tiskneme na obrazovku, kolikrát došlo ke spuštění.

// 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 parameterros display. začít(); display.setPowerSave (0); // modo powerSave (0-vypnuto? 1-zapnuto) display.setFont (u8x8_font_torussansbold8_u); // využití fontu // zobrazení bez zobrazení počet čísel, které se mají zobrazit o BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Krok 18: Print_wakeup_reason (znalost Příčiny probuzení)

Zde máme funkci vytisknout příčinu probuzení ESP32. Zkontrolujte kolík a vytiskněte jej na displeji.

// základní funkce ESP32 se zoufale vyhýbejte print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Řetězec důvod = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // rekuperace a zapnutí přepínače (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; přestávka; případ 2: důvod = "EXT1 RTC_CNTL"; přestávka; případ 3: důvod = "ČASOVAČ"; přestávka; případ 4: důvod = "TOUCHPAD"; přestávka; případ 5: důvod = "ULP PROGRAM"; přestávka; výchozí: reason = "BEZ PŘÍČINY DS"; přestávka; } Serial.println (důvod); display.clearLine (6); // apaga a linha 6 do display display.drawString (0, 6, reason.c_str ()); // zobrazování a zobrazování žádného zobrazení // se zoufale snaží o TOUCHPAD, ověřte si, zda je vše možné, pokud (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime no display}}

Krok 19: Print_wakeup_touchpad (znáte GPIO Touch)

Nyní v tomto kroku máme funkci vytisknout pin, kterého se dotkl. Obnovili jsme GPIO, které probudilo ESP32, a vytiskli ho na displej.

// funkce pro tisk nebo přehrávání tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // rekuperace o GPIO que despertou o ESP32 String GPIO = ""; switch (touchPin) {case 0: GPIO = "4"; přestávka; případ 1: GPIO = "0"; přestávka; případ 2: GPIO = "2"; přestávka; případ 3: GPIO = "15"; přestávka; případ 4: GPIO = "13"; přestávka; případ 5: GPIO = "12"; přestávka; případ 6: GPIO = "14"; přestávka; případ 7: GPIO = "27"; přestávka; případ 8: GPIO = "33"; přestávka; případ 9: GPIO = "32"; přestávka; výchozí: Serial.println ("Wakeup not by touchpad"); přestávka; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a linha 7 do display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Krok 20: Stáhněte si soubory

PDF

INO

Doporučuje: