ዝርዝር ሁኔታ:

በጥልቅ እንቅልፍ የባትሪ ዕድሜን ማዳን 20 ደረጃዎች
በጥልቅ እንቅልፍ የባትሪ ዕድሜን ማዳን 20 ደረጃዎች

ቪዲዮ: በጥልቅ እንቅልፍ የባትሪ ዕድሜን ማዳን 20 ደረጃዎች

ቪዲዮ: በጥልቅ እንቅልፍ የባትሪ ዕድሜን ማዳን 20 ደረጃዎች
ቪዲዮ: ጥሩ ነገሮችን እንዴት መሳብ እንደሚቻል. ኦዲዮ መጽሐፍ 2024, ታህሳስ
Anonim
Image
Image
ESP32 ን ለማንቃት መንገዶች
ESP32 ን ለማንቃት መንገዶች

ከእርስዎ ESP32 ጋር ባትሪ ለመጠቀም ፍላጎት አለዎት? ከሆነ ፣ ዛሬ ስለዚህ ጉዳይ አንዳንድ አስፈላጊ ቴክኒካዊ መረጃዎችን እወያያለሁ። ይህ ማይክሮ መቆጣጠሪያ መረጃ ሲያስተላልፍ ብዙ ጉልበት እንደሚያጠፋ እናውቃለን። ወደ 190 ሚሊ ሜትር የሚጠጋ ፍጆታ ይወስዳል። በዚህ ቪዲዮ ውስጥ “ጥልቅ እንቅልፍ” ተብሎ በሚጠራው ተግባር ከ ESP32 ኃይልን እንዴት መቆጠብ እንደሚቻል አሳያለሁ። ወደዚህ ሁነታ ለመግባት ቺፕውን እናዘጋጃለን ፣ ከዚህ ሁናቴ ለመውጣት መንገዶችን ይማሩ እና ESP32 ን ለማንቃት ሶስት የተለያዩ መንገዶችን የሚያሳይ ምሳሌ እንፈጥራለን።

ሬዲዮው ከአቀነባባሪው ይልቅ ብዙ ኃይል እንደሚያጠፋ ማስታወሱ አስፈላጊ ነው። የኃይል ቁጠባ በጣም አስፈላጊ ነው። ይህ የሆነበት ምክንያት Endpoints (መረጃን የሚላኩ ወረዳዎች) ብዙውን ጊዜ በባትሪ ኃይል የሚሠሩ እና እስከ አምስት ዓመት ሊቆዩ ስለሚችሉ ነው። እስከ አስር ዓመት ድረስ የሚቆይ አንዳንድ አምራቾች አሉ ፣ እና ይህ የመጨረሻ ነጥቦችን ብዙም ለማይጠቀሙ ከፍተኛ ጥራት ላላቸው ባትሪዎች ልክ ነው። በሌሎች በሁሉም ጉዳዮች ላይ ኃይልን ከወረዳዎ ለማዳን ጥልቅ እንቅልፍን እንዲጠቀሙ እመክርዎታለሁ።

ደረጃ 1 መግቢያ

ESP32 “ጥልቅ እንቅልፍ” የሚባል ኃይል ቆጣቢ ሁናቴ አለው። በዚህ ሁናቴ ውስጥ ሲፒዩዎች ፣ አብዛኛዎቹ ራም እና ሁሉም ዲጂታል የሰዓት መለዋወጫዎች ጠፍተዋል። አሁንም ሊገናኙ የሚችሉት የቺፕ ክፍሎቹ ብቸኛው የ RTC መቆጣጠሪያ ፣ የ RTC መለዋወጫዎች (የ ULP ኮሰሰር ጨምሮ) እና የ RTC ትዝታዎች ናቸው።

በሚተኛበት ጊዜ ESP32 ን ለማንቃት በርካታ መንገዶች አሉን። ወደ ጥልቅ የእንቅልፍ ሁኔታ ከመግባታቸው በፊት የማንቂያ ምንጮች በማንኛውም ጊዜ ሊዘጋጁ ይችላሉ።

ደረጃ 2 ESP32 ን ለመቀስቀስ የሚረዱ መንገዶች

ESP32 ን ለማንቃት አምስት መንገዶች አሉ

• ሰዓት ቆጣሪ

• የውጭ መነቃቃት (ext0)

• የውጭ መነቃቃት (ext1)

• የ ULP ኮፕሰሰር መቀስቀሻ

• የመዳሰሻ ሰሌዳ

ደረጃ 3 ሰዓት ቆጣሪ

የ RTC መቆጣጠሪያው ከተወሰነ ጊዜ በኋላ ቺ chipን ለማግበር ሊያገለግል የሚችል አብሮገነብ ሰዓት ቆጣሪ አለው። ጊዜው በማይክሮሰከንድ ትክክለኛነት ተገል isል።

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us ውስጥ)

time_in_us> በማይክሮ ሰከንዶች ውስጥ ያለው ጊዜ ነው

ደረጃ 4 - የውጭ መነቃቃት (ext0)

የ RTC IO ሞጁል ከ RTC GPIO አንዱ ወደ ቀደመ ሎጂክ ደረጃ ሲገባ ማንቂያውን ለመቀስቀስ አመክንዮ ይ containsል። RTC IO የ RTC ተጓዳኝ አካላት የኃይል ጎራ አካል ነው ፣ ስለሆነም ይህ የማግበር ምንጭ ከተጠየቀ የ RTC ተጓipች በጥልቅ እንቅልፍ ወቅት በሕይወት እንዲቆዩ ይደረጋል።

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num ፣ int level)

gpio_num> GPIO ቁጥር እንደ ማግበር ምንጭ ሆኖ ያገለግላል። RTC- ተግባራዊ ጂፒኦዎች ብቻ ጥቅም ላይ ሊውሉ ይችላሉ-0 ፣ 2 ፣ 4 ፣ 12-15 ፣ 25-27 ፣ 32-39።

ማንቂያውን የሚቀሰቅሰው ደረጃ> የግብዓት ደረጃ (0 = LOW ፣ 1 = HIGH)

ደረጃ 5 - የውጭ መነቃቃት (ext1)

የ RTC መቆጣጠሪያው በርካታ የ RTC ጂፒኦዎችን በመጠቀም የማንቂያ ሰዓቱን ለመቀስቀስ አመክንዮ ይ containsል።

esp_deep_sleep_enable_ext1_wakeup (uint64_t ጭንብል ፣ esp_ext1_wakeup_mode_t ሁነታ)

ማግበርን የሚያስከትሉ የጂፒኦ ቁጥሮች ጭንብል> ቢት ጭንብል። በዚህ bitmap ውስጥ 0 ፣ 2 ፣ 4 ፣ 12-15 ፣ 25-27 ፣ 32-39 ውስጥ በ RTC የነቁ ጂፒኦዎች ብቻ ጥቅም ላይ ሊውሉ ይችላሉ።

ሁነታ> የማግበር ሁኔታን ለመወሰን ጥቅም ላይ የዋለውን የሎጂክ ተግባር ይምረጡ-

• ESP_EXT1_WAKEUP_ALL_LOW - ሁሉም የተመረጡ ጂፒኦዎች በዝቅተኛ ደረጃ ላይ ሲሆኑ ይነቃል

• ESP_EXT1_WAKEUP_ANY_HIGH: ከተመረጡት ጂፒኦዎች ማንኛውም ከፍተኛ በሚሆንበት ጊዜ ይነቃል

ደረጃ 6 የ ULP ፕሮሰሰር መነቃቃት

የ ULP አስተባባሪ ቺፕው በጥልቅ እንቅልፍ ውስጥ እያለ ሊሠራ ይችላል እና ዳሳሾችን ለመፈለግ ፣ ኤዲሲን ወይም የአቅም ንካ ዳሳሽ እሴቶችን ለመከታተል እና አንድ የተወሰነ ክስተት ሲታወቅ ቺፕውን ለማግበር ሊያገለግል ይችላል።

የ ULP አስተባባሪ የ RTC መለዋወጫዎች የኃይል ጎራ አካል ነው እና በዝቅተኛ ማህደረ ትውስታ RTC ውስጥ የተከማቸ ፕሮግራሙን ያካሂዳል። ስለዚህ ፣ ይህ የማግበር ሁኔታ ከተጠየቀ የ RTC ተጓዳኝ አካላት እና የ RTC ዘገምተኛ ማህደረ ትውስታ በጥልቅ እንቅልፍ ወቅት ይነቃቃሉ።

ደረጃ 7 ፦ የመዳሰሻ ሰሌዳ

የ RTC መቆጣጠሪያው አቅም ያለው የንክኪ ዳሳሾችን በመጠቀም ማንቂያውን ለመቀስቀስ አመክንዮ ይ containsል። የንክኪ ፒን ትርጓሜ ግን የተለየ ነው። ለእያንዳንዱ የፈለጉት ፒኖች የንክኪ ማቋረጫውን መጠቀም አለብን።

ማቋረጫዎችን ካቀናበርን በኋላ ፣ የመነቃቂያ ሁነታን ዳሳሾችን ለመጠቀም አስችለናል።

// የመዳሰሻ ሰሌዳውን እንደ መቀስቀሻ ምንጭ ያዋቅሩ esp_sleep_enable_touchpad_wakeup ();

ደረጃ 8: ወደ ጥልቅ የእንቅልፍ ሁኔታ መግባት

የማነቃቂያ ሁነታን ካቀናበሩ በኋላ ፣ ESP32 ን በጥልቅ የእንቅልፍ ሁኔታ ውስጥ (2.5 μ ኤ ወይም ከዚያ በታች ማውጣት) በቂ ነው። እኔ እዚህ ላይ አፅንዖት እሰጣለሁ ፣ ይህ ወጪ ከ ESP ቺፕ እንጂ ሳህኑ አይደለም ፣ ምክንያቱም የኋለኛው የበለጠ ስለሚያወጣ።

esp_deep_sleep_start ();

ከዚህ ትዕዛዝ ፣ ESP32 አንቀላፍቷል ፣ እና ቀጣዩን የኮድ መስመሮችን ለምሳሌ አያከናውንም።

አስፈላጊ-ከላይ ያለውን ትእዛዝ ከመፈጸሙ በፊት ሁሉም የማንቂያ ቅንብሮች መደረግ አለባቸው።

ደረጃ 9 አንዳንድ ተጨማሪ አስፈላጊ መረጃዎች እዚህ አሉ

አንዳንድ ተጨማሪ አስፈላጊ መረጃዎች እዚህ አሉ
አንዳንድ ተጨማሪ አስፈላጊ መረጃዎች እዚህ አሉ

ከታች ያለው ጥሪ የ ESP32 ንቃት መንስኤን ይመልሳል።

1: EXT0 2: EXT1 3: ሰዓት ቆጣሪ 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

መነቃቂያውን በመዳሰሻ ሰሌዳው ካዘጋጀነው ፣ ንክኪው በትእዛዙ በኩል የተከሰተውን GPIO መልሰን ማግኘት እንችላለን

esp_sleep_get_touchpad_wakeup_status ();

ESP32 ከእንቅልፉ በወጣ ቁጥር እንደገና በማዋቀሩ ውስጥ ይሽከረከራል። ስለዚህ በ RTC ማህደረ ትውስታ ውስጥ ያልተገለጹ ሁሉም ተለዋዋጮች ወደ ቤታቸው ሁኔታ ይመለሳሉ።

ከተኙ በኋላም ተለዋዋጮችን በማስታወስ ውስጥ ለማቆየት ፣ ከዚህ በታች ባለው ምሳሌ ውስጥ ተለዋዋጭ መግለጫውን ይጠቀሙ-

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

ደረጃ 10 - ሰልፍ

ሰልፍ
ሰልፍ

ቪዲዮው በምስሉ መሠረት ፕሮግራሙ እየሰራ መሆኑን ያሳያል።

ደረጃ 11: WiFi NodeMCU-32S ESP-WROOM-32

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

ደረጃ 12 - ስብሰባ

ስብሰባ
ስብሰባ

ደረጃ 13 - ፕሮግራም

አሁን ወደ ጥልቅ የእንቅልፍ ሁኔታ ለመግባት ESP32 ን የምናዋቅርበት ፕሮግራም እናደርጋለን። ይህ በሦስት የተለያዩ መንገዶች ይነቃል -አንደኛው ለውጫዊ መነቃቃት (ext0) ፣ አንዱ ለ ሰዓት ቆጣሪ ፣ እና አንዱ ለንክኪፓድ። አብረው ሊሠሩ አይችሉም ፣ ስለዚህ የሚነቃበትን መንገድ ለማዋቀር ESP32 ለቡቱ የሰጠውን ቁጥር ቆጣሪ የሚሆን ተለዋዋጭ እንጠቀማለን።

ደረጃ 14 ቤተ -መጽሐፍት ያስፈልጋል

ቤተ -መጽሐፍት ያስፈልጋል
ቤተ -መጽሐፍት ያስፈልጋል

የ OLED ማሳያውን ለመቆጣጠር ውጫዊ ቤተ -መጽሐፍት ያስፈልገናል። ለዚህ ፣ የ U8g2 ቤተ -መጽሐፍትን እናወርዳለን።

በ Arduino IDE ውስጥ ወደ የስዕል ምናሌው ይሂዱ >> ቤተ -መጽሐፍትን ያካትቱ >> ቤተ -ፍርግሞችን ያስተዳድሩ….

ደረጃ 15 ቤተ -መጻሕፍት እና ተለዋዋጮች

እኛ የ OLED ማሳያውን ለመቆጣጠር ቤተ -መጽሐፍቱን ፣ እንዲሁም የማሳያ መቆጣጠሪያ ምሳሌን ገንቢ አካተናል። እንዲሁም ፣ በ RTC ማህደረ ትውስታ ውስጥ ተለዋዋጭውን እንመድባለን። ንክኪን ለመቀበል ትብነት ፣ የማይክሮ ሰከንድ የመቀየሪያ ምክንያት ለሰከንዶች እና ESP32 ወደ የእንቅልፍ ሁኔታ (በሰከንዶች ውስጥ) የሚሄድበትን ጊዜ እናዘጋጃለን።

#ያካትቱ // biblioteca para controle do ማሳያ ዘይት

// construtor da instancia do controlador to display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C ማሳያ (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) #መግለፅ TIME_TO_SLEEP 3

ደረጃ 16: ማዋቀር

በማዋቀር ውስጥ ፣ ቡት የተከሰተበትን ጊዜ ብዛት እንጨምራለን። እኛ የቡት ዘይቤን ለማተም ተግባሩን እንጠራዋለን። የቡት ቁጥሩ PAR ከሆነ ፣ በ (EXT0) ቁልፍ በኩል እንዲነቃ ESP32 ን እናዘጋጃለን። የ 3 ብዜት ከሆነ ፣ ከተወሰነ ጊዜ በኋላ እንዲነቃ ESP32 ን እናዘጋጃለን። ያለበለዚያ ESP32 ን ለመቀስቀስ አቅም ያለው የንክኪ ፒኖችን እናዘጋጃለን። በመጨረሻ ፣ የመዳሰሻ ሰሌዳውን እንደ መቀስቀሻ ምንጭ እናዘጋጃለን እና ESP32 ን ወደ የእንቅልፍ ሁኔታ እንዲገባ አስገድደነዋል።

ባዶነት ማዋቀር () {Serial.begin (115200); መዘግየት (1000); // ጭማሪ ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር/ቁጥር 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 = ከፍተኛ ፣ 0 = ዝቅተኛ} // ለ multiplo de 3 configuramos o ESP32 para despertar depois de um tempo definido ሌላ ከሆነ (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 ሌላ {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5 ፣ callback ፣ Threshold) ፤ // የመዳሰሻ ሰሌዳውን እንደ መቀስቀሻ ምንጭ ያዋቅሩ esp_sleep_enable_touchpad_wakeup (); } Serial.println (“entrando em modo sleep”) ፤ esp_deep_sleep_start (); // força o ESP32 entrar em modo SLEEP}

ደረጃ 17: Loop ፣ Callback & ConfigureDisplay

በሉፕ ውስጥ እኛ የምናደርገው ነገር የለም። መቋረጡ በሚከሰትበት ጊዜ እኛ ማድረግ ያለብን ነገር ካለ መልሶ ጥሪን ማቋረጥ እንቀጥላለን። ስለ configureDisplay ን ፣ ማሳያውን እናስጀምራለን እና አንዳንድ ልኬቶችን እናዋቅራለን። ቡት የተከሰተበትን ብዛት በማያ ገጹ ላይ እናተምታለን።

// nada a se fazer no loopvoid loop () {} // callback das interrupções ባዶ callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializa o display e configura alguns parametros ማሳያ። ጀምር (); 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:”) ፤ }

ደረጃ 18: የህትመት_ዋቄ_ፕሬስ (የንቃት መንስ knowingን ማወቅ)

እዚህ ፣ የ ESP32 ንቃት መንስኤን የማተም ተግባር አለን። ፒኑን ይፈትሹ እና በማሳያው ላይ ያትሙ።

// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; ሕብረቁምፊ ምክንያት = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {case 1: reason = "EXT0 RTC_IO BTN"; ሰበር; ጉዳይ 2: ምክንያት = "EXT1 RTC_CNTL"; ሰበር; ጉዳይ 3: ምክንያት = "ሰዓት ቆጣሪ"; ሰበር; ጉዳይ 4: ምክንያት = "TOUCHPAD"; ሰበር; ጉዳይ 5: ምክንያት = "ULP ፕሮግራም"; ሰበር; ነባሪ: ምክንያት = "ምንም DS CAUSE"; ሰበር; } Serial.println (ምክንያት); 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 ከሆነ (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime no display}}

ደረጃ 19: የህትመት_ዋቄፕ_ቶክፓድ (የ GPIO ንካ ን ይወቁ)

አሁን ፣ በዚህ ደረጃ ፣ የተነካውን ፒን የማተም ተግባር አለን። ESP32 ን ከእንቅልፉ ያነሳውን ጂፒኦ መልሰን በማሳያው ላይ አተመው።

// 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 = ""; መቀየሪያ (ንክኪ ፒን) {ጉዳይ 0: GPIO = "4"; ሰበር; ጉዳይ 1 GPIO = "0"; ሰበር; ጉዳይ 2 GPIO = "2"; ሰበር; ጉዳይ 3 GPIO = "15"; ሰበር; ጉዳይ 4 GPIO = "13"; ሰበር; ጉዳይ 5 GPIO = "12"; ሰበር; ጉዳይ 6 GPIO = "14"; ሰበር; ጉዳይ 7 GPIO = "27"; ሰበር; ጉዳይ 8 GPIO = "33"; ሰበር; ጉዳይ 9 GPIO = "32"; ሰበር; ነባሪ: Serial.println ("መነቃቃት በመዳሰሻ ሰሌዳ አይደለም"); ሰበር; } 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 ወይም GPIO}

ደረጃ 20 - ፋይሎቹን ያውርዱ

ፒዲኤፍ

INO

የሚመከር: