- आवश्यकताओं को
- ESP32 स्लीप मोड सर्किट आरेख
- ESP32 में स्लीप मोड्स का अवलोकन
- गहरी नींद मोड के लिए प्रोग्रामिंग ESP32
- दीप स्लीप मोड में ईएसपी 32 का परीक्षण
ESP32 सबसे लोकप्रिय वाई-फाई आधारित माइक्रोकंट्रोलर मॉड्यूल में से एक है और यह कई पोर्टेबल IoT अनुप्रयोगों में एक लोकप्रिय विकल्प है । यह एक शक्तिशाली कंट्रोलर है जो डुअल कोर प्रोग्रामिंग का समर्थन करता है और इसमें इन-बिल्ट ब्लूटूथ कम एनर्जी (BLE) सपोर्ट है जो इसे पोर्टेबल एप्लिकेशन जैसे iBeacon डिवाइसेस, GPS ट्रैकर्स इत्यादि के लिए एक अच्छा विकल्प बनाता है। हालाँकि, इन जैसे बैटरी से चलने वाले एप्लिकेशन में मुख्य चिंता बैटरी बैकअप है। इस बैटरी बैकअप को माइक्रोकंट्रोलर यूनिट पर होशियार नियंत्रण से बढ़ाया जा सकता है, जैसे कि डिवाइस की बैटरी बैकअप बढ़ाने के लिए आदर्श स्थिति के दौरान स्लीप मोड में ईएसपी 32 को प्रोग्राम कर सकता है।
इस परियोजना में, हम सामान्य रूप से काम कर रहे मोड और गहरी नींद मोड में व्यापक रूप से लोकप्रिय वाई-फाई और ब्लूटूथ सक्षम माइक्रोकंट्रोलर यूनिट ईएसपी 32 की वर्तमान खपत की जांच करेंगे। इसके अलावा, हम अंतर का परीक्षण करेंगे और जांचेंगे कि ईएसपी 32 को गहरी नींद मोड में कैसे रखा जाए। आप अन्य युक्तियों के लिए माइक्रोकंट्रोलरों में बिजली की खपत को कम करने के तरीके के बारे में भी लेख देख सकते हैं, जिनका उपयोग आपके डिज़ाइन को अधिक शक्ति-कुशल बनाने के लिए किया जा सकता है। इसके अलावा, यदि आप अन्य माइक्रोकंट्रोलर के स्लीप मोड में रुचि रखते हैं, तो आप Arduino Sleep मोड और ESP8266 NodeMCU स्लीप मोड को भी चबा सकते हैं।
आवश्यकताओं को
ऐसा करने के लिए, हम एस्प्रेसिफ से ईएसपी 32 आधारित देवकीट वी 4.0 का उपयोग करेंगे जिसमें यूएसबी से यूएआर पुल और साथ ही आसान कनेक्शन के लिए अन्य ईएसपी 32 पिनआउट हैं। प्रोग्रामिंग Arduino IDE के साथ की जाएगी। यदि आप पूरी तरह से नए हैं, तो Arduino का उपयोग करके ESP32 के साथ शुरुआत करने के लिए, आगे बढ़ने से पहले लिंक किए गए लेख को पढ़ें।
इस परियोजना की आवश्यकताएँ निम्नलिखित हैं-
- यह एक बटन के प्रेस द्वारा गहरी नींद मोड में जाएगा।
- यह एक अन्य बटन के प्रेस द्वारा गहरी नींद मोड से जाग जाएगा।
- ईएसपी 32 की स्थिति का पता लगाने के लिए, 1000 मिलीसेकंड के समय के साथ एक एलईडी झपकी लेगा। स्लीप मोड के दौरान, इसे बंद कर दिया जाएगा।
इसलिए, आवश्यक अतिरिक्त घटक-
- एलईडी - 1 पीसी
- पुश-बटन (टैक्टाइल स्विच) - 2 पीसी
- 4.7k प्रतिरोधों - 2 पीसी
- 680R रोकनेवाला - 1 पीसी
- ब्रेड बोर्ड
- तार बांधना
- 5V एडाप्टर या बिजली आपूर्ति इकाई
- एक माइक्रो-यूएसबी केबल
- एक पीसी या लैपटॉप में ईएसपी 32 प्रोग्रामिंग इंटरफेस के साथ Arduino IDE।
ESP32 स्लीप मोड सर्किट आरेख
ESP32 को पुश बटन के साथ सोने के लिए रखने के लिए योजनाबद्ध नीचे दिखाया गया है।
योजनाबद्ध बहुत सरल है। इसके दो बटन हैं। नींद का बटन ESP32 को गहरी नींद मोड में डाल देगा और नींद मोड से ESP32 को जगाने के लिए एक और स्विच का उपयोग किया जाता है। दोनों बटन पिन 16 और पिन 33 में जुड़े हुए हैं। दोनों बटन दबाने पर सक्रिय कम के रूप में कॉन्फ़िगर किए जाते हैं, इसलिए एक अतिरिक्त पुल-अप दिया जाता है। हालांकि, यह पता लगाने के लिए कि ईएसपी 32 स्लीप मोड या सामान्य कामकाजी स्थिति मोड में है, एलईडी आईओ पिन 4 से जुड़ा है।
ESP32 में स्लीप मोड्स का अवलोकन
ESP32 के लिए कई अलग-अलग पावर मोड हैं, अर्थात् सक्रिय मोड, मॉडेम स्लीप मोड, लाइट स्लीप मोड, डीप स्लीप मोड और हाइबरनेशन मोड।
सामान्य कामकाजी स्थिति के दौरान, ESP32 सक्रिय मोड पर चलता है। ESP32 सक्रिय मोड के दौरान, सीपीयू, वाईफाई / बीटी हार्डवेयर, आरटीसी मेमोरी, और आरटीसी बाह्य उपकरणों, ULP सह-प्रोसेसर, सभी सक्रिय होते हैं और कार्यभार के आधार पर काम करते हैं। हालांकि, अलग-अलग पावर मोड पर, एक या अधिक बाह्य उपकरणों को बंद कर दिया जाता है। विभिन्न पावर मोड संचालन की जांच करने के लिए, नीचे दी गई तालिका का पालन करें-
हार्डवेयर |
सक्रिय मोड |
मोडम-स्लीप मोड |
लाइट स्लीप मोड |
गहरी नींद मोड |
सीतनिद्रा |
सी पी यू |
पर |
पर |
रोकें |
बंद |
बंद |
वाईफाई / बीटी |
पर |
बंद |
बंद |
बंद |
बंद |
RTC और RTC परिधीय |
पर |
पर |
पर |
पर |
बंद |
ULP- सह प्रोसेसर |
पर |
पर |
पर |
चालू बंद |
बंद |
जैसा कि हम उपरोक्त तालिका में देख सकते हैं कि ESP32 में गहरी नींद मोड जिसे अक्सर ULP सेंसर मॉनिटर किया हुआ पैटर्न कहा जाता है - CPU, WiFi / BT, RTC मेमोरी और पेरिफेरल्स, ULP सह-प्रोसेसर सभी बंद हो जाते हैं। केवल आरटीसी मेमोरी और आरटीसी परिधीय चालू हैं।
वेक-अप स्थिति के दौरान, ESP32 को वेक-अप स्रोत द्वारा अधिसूचित करने की आवश्यकता होती है जो ESP32 को गहरी नींद मोड से जगाएगा । हालाँकि, जब से RTC बाह्य उपकरणों को चालू किया जाता है, ESP32 को RTC सक्षम GPIO के माध्यम से जगाया जा सकता है। अन्य विकल्प भी हैं। इसे एक्सटर्नल वेक अप इंटरप्ट पिन के माध्यम से या ईएसपी 32 को जगाने के लिए टाइमर का उपयोग करके जगाया जा सकता है। इस परियोजना में, हम पिन 33 पर ext0 वेकअप का उपयोग कर रहे हैं।
गहरी नींद मोड के लिए प्रोग्रामिंग ESP32
पूरा कार्यक्रम इस पृष्ठ के नीचे पाया जा सकता है। यह Arduino IDE के लिए लिखा गया है और इसलिए इसे आसानी से अपनी आवश्यकताओं में अनुकूलित किया जा सकता है। कोड की व्याख्या इस प्रकार है।
कोड की शुरुआत में, // पुशबटन वैरिएबल बनाएं पुशबंट पुशबंट = {GPIO_NUM_16, 0, false}; // LED पिन को परिभाषित करें uint8_t led_pin = GPIO_NUM_4; // डिफाइन वेक अप पिन uint8_t awUp_pin = GPIO_NUM_33;
उपरोक्त तीन लाइनें वेक-अप पिन, एलईडी पिन और स्लीप मोड पिन को परिभाषित करती हैं।
शून्य सेटअप () { // अपना सेटअप कोड यहां रखें, एक बार चलाने के लिए: // सीरियल पोर्ट को 115200 Serial.begin (115200) पर सेट करें ; देरी (1000); // पुश पुशबटन पिन को आंतरिक पुलप पिनकोड (pushBtn.pin, INPUT_PULLUP) के साथ इनपुट के रूप में सेट करें ; // फ़ॉलिंग मोड अटैचमेंट में पुशबटन पिन के साथ इंटरप्ट हैंडलर सेट करेंइंटरेरक्ट (पुशबटन, पिन, आईएसआर_हैंडल, फालिंग); // एलईडी पिन को ouput pinMode (led_pin, OUTPUT) के रूप में सेट करें ; // ऐसा कार्य बनाएं जिसे निमिषत () फ़ंक्शन में निष्पादित किया जाएगा, प्राथमिकता 1 के साथ और कोर 0 xTaskCreate ( blinkLed, / * Task function ) पर निष्पादित किया जाएगा । * / "blinkLed", / * कार्य का नाम। * / 1024 * 2, / * कार्य का स्टैक आकार * / NULL, / * कार्य का पैरामीटर * / 5, / * कार्य की प्राथमिकता * / & taskBlinkled); / * टास्क हैंडल बनाए गए कार्य का ट्रैक रखने के लिए * / देरी (500); // पिन 33 को एलओयू वेव सोर्स के रूप में लो लॉजिक लेवल के साथ कॉन्फ़िगर करें esp_sleep_enable_ext0_wakeup ((gpio_num_t) awUp_pin, 0); }
उपरोक्त में, कोड स्निपेट द्वारा अंतराल को एक गिरते मोड पर सेट किया गया है
संलग्न करें
इसलिए, जब भी स्विच दबाया जाता है, तो तर्क स्तर 1 (3.3V) से तर्क 0 (0V) में बदल जाएगा। बटन पिन का वोल्टेज गिर जाएगा और ESP32 यह पहचान लेगा कि स्विच दबाया गया है। एलईडी को ब्लिंक करने के लिए एक कार्य भी बनाया गया है।
xTaskCreate ( blinkLed, / * कार्य फ़ंक्शन। * / "blinkLed", / कार्य का नाम। * / 1024 * 2, / * कार्य का स्टैक आकार * / NULL, / * कार्य का पैरामीटर / 5, / * प्राथमिकता कार्य का * / & taskBlinkled); / * टास्क हैंडल बनाए गए कार्य का ट्रैक रखने के लिए * / देरी (500);
पिन 33 को नीचे दिए गए कोड स्निपेट का उपयोग करके कॉन्फ़िगर किया गया है, जो एक्सट्रीम के रूप में पहचाने गए बाहरी वेक अप स्रोत के रूप में है।
esp_sleep_enable_ext0_wakeup ((gpio_num_t) awUp_pin, 0);
अगला, जबकि लूप में-
शून्य लूप () { // अपना मुख्य कोड यहां रखें, बार-बार चलाने के लिए: अगर (pushBtn.pressed) { Serial.printf ("PushButton (% d) दबाया गया \ n", pushBtn.pin); Serial.printf ("निमिष निलंबित 'टास्क \ n"); // पलक झपकते टास्क को स्थगित करें vTaskSuspend (taskBlinkled); digitalWrite (led_pin, LOW); Serial.printf ("सोने जा रहा है….. \ n", pushBtn.pin); pushBtn.pressed = false; // सो जाओ अब esp_deep_sleep_start (); } esp_sleep_wakeup_cause_t awupReason; awupReason = esp_sleep_get_wakeup_cause (); स्विच (वेकप्रिसन) { केस ESP_SLEEP_WAKEUP_EXT0: Serial.println ("नींद से वेकअप के लिए बाहरी सिग्नल ext0 का उपयोग कर"); टूटना; मामला ESP_SLEEP_WAKEUP_EXT1: Serial.println ("नींद से वेकअप के लिए बाहरी सिग्नल ext1 का उपयोग करके"); टूटना; मामला ESP_SLEEP_WAKEUP_TIMER: Serial.println ("नींद से जागने के लिए टाइमर संकेत का उपयोग"); टूटना; मामला ESP_SLEEP_WAKEUP_TOUCHPAD: Serial.println ("स्लीप से वाकेअप के लिए टचपैड सिग्नल का उपयोग करना"); टूटना; मामला ESP_SLEEP_WAKEUP_ULP: Serial.println ("नींद से वेकअप के लिए ULP सिग्नल का उपयोग करना"); टूटना; डिफ़ॉल्ट: ब्रेक; Serial.printf ("ब्लिंकल्ड 'टास्क \ n" फिर से शुरू करें); // पलक झपकते टास्क को फिर से शुरू करें vTaskResume (taskBlinkled); } }
जबकि लूप लगातार जाँच रहा है कि नींद बटन दबाया गया है या नहीं। यदि बटन दबाया जाता है, तो यह एलईडी ब्लिंक कार्य को रोक देगा या निलंबित कर देगा और एस्प गहरी नींद प्रारंभ समारोह को चलाएगा-
esp_deep_sleep_start ();
इस स्थिति में, अगर एक्स 0 एक्सटर्नल इंटरप्ट बटन दबाया जाता है, तो यह तुरंत गहरी नींद मोड से जाग जाएगा, और एलईडी सिंक कार्य को फिर से शुरू करेगा।
अंत में, एलईडी ब्लिंक फ़ंक्शन को नीचे के स्निपेट्स में देखा जा सकता है, यह एलईडी 1000 एमएस सेकंड को झपकी देगा।
शून्य निमिष (शून्य * परम) { जबकि (1) { स्थिर uint32_t pin_val = 0; // पिन मूल्य टॉगल करें pin_val ^ = 1; digitalWrite (led_pin, pin_val); Serial.printf ("LED -----------------% s \ n", pin_val? "On": "Off"); / * बस हर 1000ms या 1sec * / vTaskDelay (1000 / portTICK_PERIOD_MS) एलईडी को चालू करें ; } taskBlinkled = NULL; vTaskDelete (NULL); }
दीप स्लीप मोड में ईएसपी 32 का परीक्षण
सर्किट का निर्माण एक ब्रेडबोर्ड में किया जाता है और एक मेट्रावी एक्सबी संस्करण मल्टीमीटर का उपयोग करंट को मापने के लिए किया जाता है। सक्रिय मोड में सर्किट द्वारा खींचा गया वर्तमान लगभग 58 एमए है लेकिन गहरी नींद मोड में, वर्तमान लगभग 4.10 एमए है। नीचे दी गई छवि ESP32 सक्रिय मोड वर्तमान खपत दिखा रही है -
गहरी नींद मोड में, वर्तमान खपत लगभग 3.95mA दर्ज की गई है, नीचे दी गई छवि ईएसपी 32 डीप स्लीप मोड वर्तमान खपत- दिखाती है
हालांकि, गहरी नींद मोड में, ESP32 की वर्तमान खपत लगभग 150 यूए है। लेकिन इस ईएसपी 32 देवकिट बोर्ड के लिए वर्तमान में दर्ज खपत लगभग 4.10 एमए है। यह CP2102 और रैखिक नियामक के कारण है। ये दोनों 5 वी पावर लाइन से जुड़े हैं। पावर लाइन में एक पावर एलईडी भी जुड़ा हुआ है जो लगभग 2mA की खपत कर रहा है।
इसलिए, यह आसानी से पहचाना जा सकता है कि ईएसपी 32 गहरी नींद मोड की स्थिति में बहुत कम मात्रा में ऊर्जा की खपत करता है जो कि संचालित बिजली के संचालन के लिए बहुत उपयोगी है। यह कैसे काम करता है, इसके बारे में अधिक जानकारी के लिए, नीचे दिए गए वीडियो को देखें। यदि आपके कोई प्रश्न हैं, तो उन्हें नीचे टिप्पणी अनुभाग में छोड़ दें या अन्य तकनीकी प्रश्नों के लिए हमारे मंचों का उपयोग करें।