विषयसूची:

गहरी नींद के साथ बैटरी लाइफ की बचत: 20 कदम
गहरी नींद के साथ बैटरी लाइफ की बचत: 20 कदम

वीडियो: गहरी नींद के साथ बैटरी लाइफ की बचत: 20 कदम

वीडियो: गहरी नींद के साथ बैटरी लाइफ की बचत: 20 कदम
वीडियो: The 80/20 Principle (Pareto's Principle) by Richard Koch Audiobook | Book Summary in Hindi 2024, नवंबर
Anonim
Image
Image
ESP32 को जगाने के तरीके
ESP32 को जगाने के तरीके

क्या आप अपने ESP32 के साथ बैटरी का उपयोग करने में रुचि रखते हैं? यदि हां, तो मैं आज इस विषय से संबंधित कुछ महत्वपूर्ण तकनीकी जानकारी पर चर्चा करूंगा। हम जानते हैं कि यह माइक्रोकंट्रोलर सूचना प्रसारित करते समय बहुत अधिक ऊर्जा खर्च करता है। यह करीब 190 मिलीमीटर की खपत करता है। इस वीडियो में, मैं दिखाऊंगा कि तथाकथित "डीप स्लीप" फ़ंक्शन के साथ ESP32 से ऊर्जा का संरक्षण कैसे किया जाता है। हम इस मोड में प्रवेश करने के लिए चिप सेट करेंगे, इस मोड से बाहर निकलने के तरीके सीखेंगे, और ESP32 को जगाने के तीन अलग-अलग तरीकों को दिखाते हुए एक उदाहरण बनाएंगे।

यह याद रखना महत्वपूर्ण है कि रेडियो प्रोसेसर के बजाय बहुत अधिक ऊर्जा खर्च करता है। ऊर्जा की बचत बहुत जरूरी है। ऐसा इसलिए है क्योंकि एंडपॉइंट (सर्किट जो सूचना भेज रहे हैं) अक्सर बैटरी से चलने वाले होते हैं और पांच साल तक चलने चाहिए। कुछ निर्माता ऐसे हैं जो दस साल तक की अवधि का वादा करते हैं, और यह उच्च गुणवत्ता वाली बैटरियों के लिए मान्य है जो एंडपॉइंट का अधिक उपयोग नहीं करते हैं। अन्य सभी मामलों में, मैं आपको अपने सर्किट से ऊर्जा बचाने के लिए डीप स्लीप का उपयोग करने की सलाह देता हूं।

चरण 1: परिचय

ESP32 में एक पावर सेविंग मोड है, जिसे "डीप स्लीप" कहा जाता है। इस मोड में, CPU, अधिकांश RAM और सभी डिजिटल क्लॉक्ड पेरिफेरल्स बंद हो जाते हैं। चिप के एकमात्र हिस्से जो अभी भी जुड़े हो सकते हैं, वे हैं आरटीसी नियंत्रक, आरटीसी परिधीय (यूएलपी कोप्रोसेसर सहित), और आरटीसी यादें।

हमारे पास सोते समय ESP32 को जगाने के कई तरीके हैं। डीप स्लीप मोड में प्रवेश करने से पहले किसी भी समय वेक-अप स्रोत सेट किए जा सकते हैं।

चरण 2: ESP32 को जगाने के तरीके

ESP32 को जगाने के पांच तरीके हैं:

• टाइमर

• बाहरी वेकअप (ext0)

• बाहरी वेकअप (ext1)

• यूएलपी कोप्रोसेसर वेकअप

• टचपैड

चरण 3: टाइमर

आरटीसी नियंत्रक में एक अंतर्निहित टाइमर होता है जिसका उपयोग पूर्वनिर्धारित अवधि के बाद चिप को सक्रिय करने के लिए किया जा सकता है। समय माइक्रोसेकंड परिशुद्धता के साथ निर्दिष्ट किया गया है।

esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us)

time_in_us> माइक्रोसेकंड में समय है

चरण 4: बाहरी वेकअप (ext0)

आरटीसी आईओ मॉड्यूल में अलार्म को ट्रिगर करने के लिए तर्क होता है जब आरटीसी जीपीआईओ में से एक पूर्वनिर्धारित तर्क स्तर में प्रवेश करता है। RTC IO, RTC बाह्य उपकरणों के पावर डोमेन का हिस्सा है, इसलिए यदि सक्रियण के इस स्रोत का अनुरोध किया जाता है, तो RTC बाह्य उपकरणों को डीप स्लीप के दौरान जीवित रखा जाएगा।

esp_deep_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, इंट लेवल)

gpio_num> GPIO नंबर सक्रियण स्रोत के रूप में उपयोग किया जाता है। केवल RTC-कार्यात्मक GPIO का उपयोग किया जा सकता है: 0, 2, 4, 12-15, 25-27, 32-39।

स्तर> इनपुट स्तर जो अलार्म को ट्रिगर करेगा (0 = कम, 1 = उच्च)

चरण 5: बाहरी वेकअप (ext1)

RTC नियंत्रक में कई RTC GPIO का उपयोग करके अलार्म घड़ी को ट्रिगर करने के लिए तर्क होता है।

esp_deep_sleep_enable_ext1_wakeup(uint64_t मास्क, esp_ext1_wakeup_mode_t मोड)

मास्क> GPIO नंबरों का बिट मास्क जो सक्रियण का कारण बनेगा। इस बिटमैप में केवल RTC-सक्षम GPIO का उपयोग किया जा सकता है: 0, 2, 4, 12-15, 25-27, 32-39।

मोड> सक्रियण स्थिति निर्धारित करने के लिए उपयोग किए जाने वाले तर्क फ़ंक्शन का चयन करें:

• ESP_EXT1_WAKEUP_ALL_LOW: सभी चयनित GPIO कम होने पर जागता है

• ESP_EXT1_WAKEUP_ANY_HIGH: किसी भी चयनित GPIO के उच्च होने पर जागता है

चरण 6: यूएलपी कोप्रोसेसर वेकअप

यूएलपी कोप्रोसेसर तब काम कर सकता है जब चिप डीप स्लीप में हो और इसका उपयोग सेंसर खोजने, एडीसी या कैपेसिटिव टच सेंसर मानों की निगरानी करने और किसी विशिष्ट घटना का पता चलने पर चिप को सक्रिय करने के लिए किया जा सकता है।

यूएलपी कोप्रोसेसर आरटीसी बाह्य उपकरणों के पावर डोमेन का हिस्सा है और धीमी मेमोरी आरटीसी में संग्रहीत प्रोग्राम को चलाता है। इसलिए, यदि इस सक्रियण मोड का अनुरोध किया जाता है, तो डीप स्लीप के दौरान आरटीसी परिधीय और आरटीसी धीमी मेमोरी सक्रिय हो जाएगी।

चरण 7: टचपैड

आरटीसी नियंत्रक में कैपेसिटिव टच सेंसर का उपयोग करके अलार्म को ट्रिगर करने के लिए तर्क होता है। हालाँकि, टच पिन की परिभाषा अलग है। हमें प्रत्येक वांछित पिन के लिए टच इंटरप्ट का उपयोग करना चाहिए।

इंटरप्ट सेट करने के बाद, हमने सेंसर का उपयोग करने के लिए वेक-अप मोड को सक्षम किया।

// टचपैड को वेकअप स्रोत के रूप में कॉन्फ़िगर करें esp_sleep_enable_touchpad_wakeup ();

चरण 8: डीप स्लीप मोड में प्रवेश करना

वेक-अप मोड सेट करने के बाद, ESP32 को डीप स्लीप मोड (2.5 μA या उससे कम खर्च करने) में डालने के लिए एक ही कमांड पर्याप्त है। मैं यहां इस बात पर जोर देता हूं कि यह खर्च ईएसपी चिप से है न कि प्लेट से, क्योंकि बाद वाला अधिक खर्च करता है।

esp_deep_sleep_start ();

इस आदेश से, ESP32 सो जाता है और उदाहरण के लिए कोड की अगली पंक्तियों को निष्पादित नहीं करता है।

महत्वपूर्ण: उपरोक्त कमांड को निष्पादित करने से पहले सभी वेक-अप सेटिंग्स की जानी चाहिए।

चरण 9: यहां कुछ और महत्वपूर्ण जानकारी दी गई है

यहाँ कुछ और महत्वपूर्ण जानकारी है
यहाँ कुछ और महत्वपूर्ण जानकारी है

नीचे दिया गया कॉल ESP32 वेकअप का कारण देता है।

1: EXT0 2: EXT1 3: टाइमर 4: टचपैड 5: ULP

esp_sleep_get_wakeup_cause ();

यदि हम टचपैड द्वारा वेक अप सेट करते हैं, तो हम कमांड के माध्यम से किस GPIO को स्पर्श कर सकते हैं, इसे पुनर्प्राप्त कर सकते हैं

esp_sleep_get_touchpad_wakeup_status ();

हर बार जब ESP32 जागता है, तो यह फिर से सेटअप के माध्यम से चक्र करेगा। इस प्रकार वे सभी चर जो RTC मेमोरी में परिभाषित नहीं हैं, अपने गृह राज्य में वापस आ जाएंगे।

सो जाने के बाद भी वेरिएबल को मेमोरी में रखने के लिए, नीचे दिए गए उदाहरण में वेरिएबल डिक्लेरेशन का उपयोग करें:

//RTC_DATA_ATTR अलग-अलग यादें हैं RTCRTC_DATA_ATTR int bootCount = 0;

चरण 10: प्रदर्शन

प्रदर्शन
प्रदर्शन

वीडियो छवि के अनुसार काम कर रहे कार्यक्रम को दिखाता है।

चरण 11: वाईफाई NodeMCU-32S ESP-WROOM-32

वाईफाई NodeMCU-32S ESP-WROOM-32
वाईफाई NodeMCU-32S ESP-WROOM-32

चरण 12: विधानसभा

सभा
सभा

चरण 13: कार्यक्रम

अब हम एक प्रोग्राम बनाएंगे जहां हम ईएसपी 32 को डीप स्लीप मोड में प्रवेश करने के लिए कॉन्फ़िगर करेंगे। इसे तीन अलग-अलग तरीकों से जगाया जाएगा: एक बाहरी वेकअप (ext0) के लिए, एक टाइमर के लिए और दूसरा टचपैड के लिए। वे एक साथ काम नहीं कर सकते हैं, इसलिए हम एक वेरिएबल का उपयोग करेंगे जो ईएसपी32 द्वारा बूट को जागने के तरीके को कॉन्फ़िगर करने की संख्या के लिए एक काउंटर होगा।

चरण 14: पुस्तकालय की आवश्यकता

पुस्तकालय की आवश्यकता
पुस्तकालय की आवश्यकता

OLED डिस्प्ले को कंट्रोल करने के लिए हमें एक एक्सटर्नल लाइब्रेरी की जरूरत होती है। इसके लिए हम U8g2 लाइब्रेरी डाउनलोड करेंगे।

Arduino IDE में, स्केच मेनू >> लाइब्रेरी शामिल करें >> लाइब्रेरी प्रबंधित करें… पर जाएं।

चरण 15: पुस्तकालय और चर

हमने OLED डिस्प्ले को नियंत्रित करने के लिए लाइब्रेरी को शामिल किया है, साथ ही डिस्प्ले कंट्रोलर इंस्टेंस के कंस्ट्रक्टर को भी शामिल किया है। साथ ही, हम वेरिएबल को RTC मेमोरी में आवंटित करते हैं। हम स्पर्श स्वीकृति के लिए संवेदनशीलता, सेकंड के लिए माइक्रोसेकंड रूपांतरण कारक और ESP32 के स्लीप मोड में जाने का समय (सेकंड में) सेट करते हैं।

#include //biblioteca para controle पुराने प्रदर्शित करते हैं

//construtor da instancia do controlador do display //SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C डिस्प्ले (SCL, SDA, U8X8_PIN_NONE); //RTC_DATA_ATTR अलग और यादगार है RTC RTC_DATA_ATTR int bootCount = 0; // सेंसिबिलिडेड पैरा एसिटाकाओ डू टूक # डेफिन थ्रेसहोल्ड 40 // फेटर डी कन्वर्सो डे माइक्रोसेगुंडोस पैरा सेगुंडोस # डिफाइन यूएस_टीओ_एस_फैक्टर 1000000 // टेम्पो क्यू ओ ईएसपी 32 फिकारा एम मोडो स्लीप (एम सेगुंडोस) # डिफाइन टाइम_टीओ_स्लीप 3

चरण 16: सेटअप

सेटअप में, हम बूट होने की संख्या में वृद्धि करते हैं। हम बूट मोटिफ को प्रिंट करने के लिए फंक्शन को कॉल करते हैं। यदि बूट संख्या PAR है, तो हम ESP32 को (EXT0) बटन के माध्यम से जागने के लिए सेट करते हैं। यदि यह 3 का गुणज है, तो हम एक निर्धारित समय के बाद ESP32 को वेक करने के लिए सेट करते हैं। अन्यथा, हम ESP32 को जगाने के लिए कैपेसिटिव टच पिन सेट करते हैं। अंत में, हम टचपैड को वेकअप स्रोत के रूप में सेट करते हैं और ESP32 को स्लीप मोड में प्रवेश करने के लिए बाध्य करते हैं।

शून्य सेटअप () {Serial.begin(११५२००); देरी (1000); //incrementa o numero de vezes que o BOOT ocorreu ++bootCount; कॉन्फ़िगर डिस्प्ले (); // चमा ए फनकाओ पैरा इंप्रिमिर ओ मोटिवो डू बूट प्रिंट_वेकअप_रेसन (); // PAR configuramos o ESP32 पैरा डेस्पर्टर एट्रावेस डू बोटाओ (EXT0) के लिए नंबर डी बूट करें अगर (bootCount% 2 == 0) { esp_sleep_enable_ext0_wakeup(GPIO_NUM_39, 1); //1 = हाई, 0 = लो} // मल्टीप्लो डी 3 कॉन्फिगुरामोस ओ ईएसपी32 पैरा डेस्पर्टर डेपोइस डे उम टेम्पो डिफिनिडो के लिए और अगर (बूटकाउंट% 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR);] // टचपैड को वेकअप स्रोत के रूप में कॉन्फ़िगर करें esp_sleep_enable_touchpad_wakeup (); } Serial.println ("एंट्रेंडो एम मोडो स्लीप"); esp_deep_sleep_start (); // força o ESP32 एंट्र एम मोडो स्लीप}

चरण 17: लूप, कॉलबैक और कॉन्फ़िगर डिस्प्ले

लूप में, हमें कुछ नहीं करना है। हम तब कॉलबैक को बाधित करने के लिए आगे बढ़ते हैं यदि रुकावट होने पर हमें कुछ करना होता है। कॉन्फिगर डिस्प्ले के संबंध में, हम डिस्प्ले को इनिशियलाइज़ करते हैं और कुछ मापदंडों को कॉन्फ़िगर करते हैं। जितनी बार बूट हुआ, हम स्क्रीन पर प्रिंट करते हैं।

//नाडा ए से फेज़र नो लूपवॉइड लूप () { } // कॉलबैक दास इंटररुप्सेस शून्य कॉलबैक () {// कैसो क्विरा फेजर एल्गो एओ ओकोरर ए इंटररुपको } शून्य कॉन्फिगरडिसप्ले () {//inicializa ओ डिस्प्ले ई कॉन्फिगुरा एल्गन्स पैरामेट्रोस डिस्प्ले। शुरू(); डिस्प्ले.सेटपावरसेव (0); // मोडो पावरसेव (0-ऑफ? 1-ऑन) डिस्प्ले।सेटफॉन्ट (u8x8_font_torussansbold8_u); //fonte utilizada // इंप्राइम नो डिस्प्ले ओएस न्यूमेरो डे वेजेस क्यू एकॉन्टेसेयू या बूट डिस्प्ले। ड्रॉस्ट्रिंग (0, 0, "बूट नंबर:"); display.drawString(0, 2, String(bootCount).c_str()); डिस्प्ले.ड्रास्ट्रिंग (0, 4, "मोटिवो:"); }

चरण १८: Print_wakeup_reason (जागृति का कारण जानना)

यहां, हमारे पास ESP32 वेक अप के कारण को प्रिंट करने का कार्य है। पिन को चेक करें और डिस्प्ले पर प्रिंट करें।

// função para imrimir a causa do ESP32 despertarvoid print_wakeup_reason(){ esp_sleep_wakeup_cause_t Wakeup_reason; स्ट्रिंग कारण = ""; वेकअप_रेसन = esp_sleep_get_wakeup_cause (); // स्वस्थ होने का एक कारण निराशा स्विच (वेकअप_रेसन) {केस 1: कारण = "EXT0 RTC_IO BTN"; टूटना; केस 2: कारण = "EXT1 RTC_CNTL"; टूटना; केस 3: कारण = "टाइमर"; टूटना; केस 4: कारण = "टचपैड"; टूटना; केस 5: कारण = "यूएलपी कार्यक्रम"; टूटना; डिफ़ॉल्ट: कारण = "कोई डीएस कारण नहीं"; टूटना; } सीरियल.प्रिंट्लन (कारण); डिस्प्ले.क्लियरलाइन (6); // अपागा ए लिन्हा 6 डू डिस्प्ले डिस्प्ले। ड्रॉस्ट्रिंग (0, 6, कारण। c_str ()); // इंप्राइम ए कॉसा डू डेस्पर्टर नो डिस्प्ले // से डेस्परटौ पोर टचपैड, एंटो वेमोस वेरिफार एम क्वाल डॉस पिनोस ओकोररेउ अगर (वेकअप_रेसन == 4) {प्रिंट_वेकअप_टचपैड (); // सत्यापन ओ पिनो ई इंप्राइम नो डिस्प्ले } }

चरण 19: Print_wakeup_touchpad (GPIO टच को जानें)

अब, इस चरण में, हमारे पास स्पर्श किए गए पिन को प्रिंट करने का कार्य है। हमने GPIO को पुनर्प्राप्त किया जिसने ESP32 को जगाया और इसे डिस्प्ले पर प्रिंट किया।

// função para imprimir o pino que foi tocadovoid print_wakeup_touchpad() { touch_pad_t touchPin; टचपिन = esp_sleep_get_touchpad_wakeup_status (); // रिकवरी या GPIO कतार despertou या ESP32 स्ट्रिंग 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:"); डिस्प्ले.ड्रास्ट्रिंग (6, 7, GPIO.c_str ()); // इंप्राइम या GPIO }

चरण 20: फ़ाइलें डाउनलोड करें

पीडीएफ

मैं नहीं

सिफारिश की: