Sisällysluettelo:

Akun käyttöiän säästäminen syvässä lepotilassa: 20 vaihetta
Akun käyttöiän säästäminen syvässä lepotilassa: 20 vaihetta

Video: Akun käyttöiän säästäminen syvässä lepotilassa: 20 vaihetta

Video: Akun käyttöiän säästäminen syvässä lepotilassa: 20 vaihetta
Video: Lonely (short version) 2024, Marraskuu
Anonim
Image
Image
Tapoja herättää ESP32
Tapoja herättää ESP32

Oletko kiinnostunut käyttämään paristoa ESP32: n kanssa? Jos näin on, keskustelen tänään tärkeistä teknisistä tiedoista tästä aiheesta. Tiedämme, että tämä mikro -ohjain kuluttaa paljon energiaa lähettäessään tietoja. Se kuluttaa lähes 190 milliampeeria. Tässä videossa näytän kuinka säästää energiaa ESP32: sta niin kutsutulla "DEEP SLEEP" -toiminnolla. Asetamme sirun siirtymään tähän tilaan, opimme poistumaan tästä tilasta ja luomme esimerkin, joka näyttää kolme eri tapaa herättää ESP32.

On tärkeää muistaa, että radio kuluttaa paljon energiaa prosessorin sijaan. Energiansäästö on erittäin tärkeää. Tämä johtuu siitä, että päätepisteet (tiedot lähettävät piirit) ovat usein paristokäyttöisiä ja niiden pitäisi kestää jopa viisi vuotta. Jotkut valmistajat lupaavat jopa kymmenen vuoden kestoa, ja tämä koskee korkealaatuisia akkuja, jotka eivät käytä päätepisteitä niin paljon. Kaikissa muissa tapauksissa suosittelen, että käytät Deep Sleep -toimintoa energian säästämiseksi piiristäsi.

Vaihe 1: Johdanto

ESP32: ssa on virransäästötila, nimeltään "Deep Sleep". Tässä tilassa suorittimet, suurin osa RAM -muistista ja kaikki digitaaliset kellot oheislaitteet on kytketty pois päältä. Ainoat sirun osat, jotka voidaan edelleen yhdistää, ovat RTC -ohjain, RTC -oheislaitteet (mukaan lukien ULP -yhteisprosessori) ja RTC -muistit.

Meillä on useita tapoja herättää ESP32 unessa. Herätyslähteet voidaan määrittää milloin tahansa ennen syvän lepotilan siirtymistä.

Vaihe 2: Tapoja herättää ESP32

ESP32 voidaan herättää viidellä tavalla:

• Ajastin

• Ulkoinen herätys (ext0)

• Ulkoinen herätys (ext1)

• ULP -yhteisprosessorin herätys

• Kosketuslevy

Vaihe 3: Ajastin

RTC-ohjaimessa on sisäänrakennettu ajastin, jolla voidaan aktivoida siru ennalta määrätyn ajan kuluttua. Aika ilmoitetaan mikrosekunnin tarkkuudella.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> on aika mikrosekunneissa

Vaihe 4: Ulkoinen herätys (ext0)

RTC IO -moduuli sisältää logiikan hälytyksen laukaisemiseksi, kun yksi RTC GPIO -laitteista siirtyy ennalta määritettyyn logiikkatasoon. RTC IO on osa RTC -oheislaitteiden tehoalueita, joten RTC -oheislaitteet pidetään hengissä syvän lepotilan aikana, jos tätä aktivointilähdettä pyydetään.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int taso)

gpio_num> GPIO -numero, jota käytetään aktivointilähteenä. Vain RTC-toiminnallisia GPIO-laitteita voidaan käyttää: 0, 2, 4, 12-15, 25-27, 32-39.

taso> tulotaso, joka laukaisee hälytyksen (0 = LOW, 1 = HIGH)

Vaihe 5: Ulkoinen herätys (ext1)

RTC -ohjain sisältää logiikan herätyskellon laukaisemiseksi useiden RTC GPIO: iden avulla.

esp_deep_sleep_enable_ext1_wakeup (uint64_t -maski, esp_ext1_wakeup_mode_t -tila)

mask> GPIO -numeroiden bittimaski, joka aiheuttaa aktivoinnin. Tässä bittikartassa voidaan käyttää vain RTC-yhteensopivia GPIO: ita: 0, 2, 4, 12-15, 25-27, 32-39.

tila> valitse aktivointitilan määrittämiseen käytettävä logiikkatoiminto:

• ESP_EXT1_WAKEUP_ALL_LOW: herää, kun kaikki valitut GPIO: t ovat matalalla

• ESP_EXT1_WAKEUP_ANY_HIGH: herää, kun jokin valitusta GPIO: sta on KORKEA

Vaihe 6: ULP -rinnakkaisprosessorin herätys

ULP -rinnakkaisprosessori voi toimia, kun siru on syvässä lepotilassa, ja sitä voidaan käyttää antureiden etsimiseen, ADC- tai kapasitiivisten kosketusanturien arvojen valvontaan ja sirun aktivointiin, kun tietty tapahtuma havaitaan.

ULP -rinnakkaisprosessori on osa RTC -oheislaitteiden tehoalueita ja ajaa RTC -muistiin tallennettua ohjelmaa. Siksi RTC -oheislaitteet ja RTC -hidas muisti aktivoidaan syvän lepotilan aikana, jos tätä aktivointitilaa pyydetään.

Vaihe 7: Kosketuslevy

RTC -ohjain sisältää logiikan hälytyksen laukaisemiseksi kapasitiivisten kosketusantureiden avulla. Kosketustapin määritelmä on kuitenkin erilainen. Meidän on käytettävä kosketuksen keskeytystä jokaiselle halutulle nastalle.

Keskeytysten asettamisen jälkeen otimme herätystilan käyttöön antureiden käyttämiseksi.

// Määritä kosketuslevy herätyslähteeksi esp_sleep_enable_touchpad_wakeup ();

Vaihe 8: Syvä lepotilaan siirtyminen

Herätystilan asettamisen jälkeen riittää yksi komento ESP32: n asettamiseksi syvään lepotilaan (kulutus 2,5 μA tai vähemmän). Korostan tässä, että tämä kulu tulee ESP -sirusta eikä levystä, koska jälkimmäinen kuluttaa enemmän.

esp_deep_sleep_start ();

Tästä komennosta ESP32 nukahtaa eikä suorita esimerkiksi seuraavia koodirivejä.

Tärkeää: Kaikki herätysasetukset on tehtävä ennen yllä olevan komennon suorittamista.

Vaihe 9: Tässä muutamia tärkeitä tietoja

Tässä muutama tärkeä tieto
Tässä muutama tärkeä tieto

Alla oleva puhelu palauttaa ESP32 -herätyksen syyn.

1: ULK0 2: ULK1 3: AJASTIN 4: KOSKETUSPAPPI 5: ULP

esp_sleep_get_wakeup_cause ();

Jos asetamme herätyksen kosketuslevyllä, voimme palauttaa, mikä GPIO kosketus tapahtui komennon kautta

esp_sleep_get_touchpad_wakeup_status ();

Joka kerta, kun ESP32 herää, se käy asetusten läpi uudelleen. Siten kaikki muuttujat, joita ei ole määritelty RTC -muistissa, palaavat kotitilaansa.

Jos haluat säilyttää muuttujat muistissa myös nukahtamisen jälkeen, käytä muuttujan ilmoitusta seuraavassa esimerkissä:

// RTC_DATA_ATTR muisti ja muisti RTCRTC_DATA_ATTR int bootCount = 0;

Vaihe 10: Esittely

Esittely
Esittely

Video näyttää ohjelman toimivan kuvan mukaisesti.

Vaihe 11: WiFi-solmuMCU-32S ESP-WROOM-32

WiFi-solmuMCU-32S ESP-WROOM-32
WiFi-solmuMCU-32S ESP-WROOM-32

Vaihe 12: Kokoonpano

Kokoonpano
Kokoonpano

Vaihe 13: Ohjelmoi

Teemme nyt ohjelman, jossa määritämme ESP32: n siirtymään syvään lepotilaan. Tämä herätetään kolmella eri tavalla: yksi ulkoiselle herätykselle (ext0), toinen ajastimelle ja toinen kosketuslevylle. Ne eivät voi toimia yhdessä, joten käytämme muuttujaa, joka on laskuri sille, kuinka monta kertaa ESP32 antoi Bootille määrittääksemme herätystavan.

Vaihe 14: Kirjasto vaaditaan

Kirjasto Pakollinen
Kirjasto Pakollinen

OLED -näytön ohjaamiseen tarvitaan ulkoinen kirjasto. Tätä varten lataamme U8g2 -kirjaston.

Siirry Arduino IDE: ssä Luonnos -valikkoon >> Sisällytä kirjasto >> Hallitse kirjastoja….

Vaihe 15: Kirjastot ja muuttujat

Olemme sisällyttäneet kirjastoon OLED -näytön ohjaamiseen sekä näytönohjaimen ilmentymän rakentaja. Lisäksi varaamme muuttujan RTC -muistiin. Asetamme kosketuksen hyväksymisen herkkyyden, mikrosekunnin muuntokerroin sekunneiksi ja ajan, jonka ESP32 siirtyy lepotilaan (sekunteina).

#include // biblioteca para controle do display oled

// muokkaaja, joka voi näyttää näytön // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C -näyttö (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR alku ja muisti muistiin 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

Vaihe 16: Asennus

Asetuksissa lisäämme käynnistyskertojen määrää. Kutsumme toimintoa tulostaa Boot -motiivi. Jos käynnistysnumero on PAR, asetamme ESP32: n heräämään (EXT0) -painikkeen kautta. Jos se on 3: n monikerta, asetamme ESP32: n heräämään asetetun ajan kuluttua. Muussa tapauksessa asetamme kapasitiiviset kosketustapit herättämään ESP32: n. Lopuksi asetamme kosketuslevyn herätyslähteeksi ja pakotamme ESP32: n siirtymään lepotilaan.

void setup () {Serial.begin (115200); viive (1000); // lisää tai o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se numero numero boot for PAR configiguramos o ESP32 para despertar através do botão (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Korkea, 0 = Matala} // se useiden kokoonpanojen määrityksille tai 3 ESP32 -asetukselle, jos ei ole määritetty muuta tempoa if 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); // Määritä kosketuslevy herätyslähteeksi esp_sleep_enable_touchpad_wakeup (); } Serial.println ("entrando em modo sleep"); esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}

Vaihe 17: Silmukka, takaisinsoitto ja näytön konfigurointi

Loopissa meillä ei ole mitään tekemistä. Jatkamme sitten keskeyttää takaisinsoiton, jos meillä on jotain tehtävää keskeytyksen sattuessa. Mitä tulee configureDisplayn, alustamme näytön ja määritämme joitakin parametreja. Tulostamme näytölle kuinka monta kertaa käynnistys tapahtui.

// 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. alkaa(); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // imprime no display os number de vezes que aconteceu tai BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, merkkijono (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

Vaihe 18: Print_wakeup_reason (tietäen heräämisen syyn)

Tässä meillä on toiminto tulostaa ESP32 -herätyksen syy. Tarkista nasta ja tulosta näyttöön.

// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Merkkijonon syy = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // palauta syy -kytkin (herätyksen_syy) {case 1: reason = "EXT0 RTC_IO BTN"; tauko; tapaus 2: syy = "EXT1 RTC_CNTL"; tauko; tapaus 3: syy = "AJASTIN"; tauko; tapaus 4: syy = "TOUCHPAD"; tauko; tapaus 5: syy = "ULP -OHJELMA"; tauko; oletus: syy = "EI DS -SYY"; tauko; } Sarja.println (syy); display.clearLine (6); // esimerkki a linha 6 do display.drawString (0, 6, reason.c_str ()); // impime a causa do despertar no display // se despertou por TOUCHPAD, então vamos verificar em kval dos pinos ocorreu if (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime no display}}

Vaihe 19: Print_wakeup_touchpad (tunne GPIO Touch)

Nyt tässä vaiheessa meillä on toiminto tulostaa kosketettu tappi. Palautimme GPIO: n, joka herätti ESP32: n, ja tulostimme sen näytölle.

// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // elvytys tai GPIO que despertou o ESP32 String GPIO = ""; kytkin (touchPin) {tapaus 0: GPIO = "4"; tauko; tapaus 1: GPIO = "0"; tauko; tapaus 2: GPIO = "2"; tauko; tapaus 3: GPIO = "15"; tauko; tapaus 4: GPIO = "13"; tauko; tapaus 5: GPIO = "12"; tauko; tapaus 6: GPIO = "14"; tauko; tapaus 7: GPIO = "27"; tauko; tapaus 8: GPIO = "33"; tauko; tapaus 9: GPIO = "32"; tauko; oletus: Serial.println ("Herätys ei ole kosketuslevyä"); tauko; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // kuten linja 7 näyttää display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}

Vaihe 20: Lataa tiedostot

PDF

INO

Suositeltava: