- అవసరాలు
- ESP32 స్లీప్ మోడ్ సర్క్యూట్ రేఖాచిత్రం
- ESP32 లో స్లీప్ మోడ్ల అవలోకనం
- డీప్ స్లీప్ మోడ్ కోసం ప్రోగ్రామింగ్ ESP32
- డీప్ స్లీప్ మోడ్లో ESP32 ను పరీక్షిస్తోంది
ESP32 అత్యంత ప్రాచుర్యం పొందిన Wi-Fi ఆధారిత మైక్రోకంట్రోలర్ మాడ్యూళ్ళలో ఒకటి మరియు ఇది చాలా పోర్టబుల్ IoT అనువర్తనాలలో ప్రసిద్ధ ఎంపిక. ఇది డ్యూయల్ కోర్ ప్రోగ్రామింగ్కు మద్దతిచ్చే శక్తివంతమైన నియంత్రిక మరియు అంతర్నిర్మిత బ్లూటూత్ లో ఎనర్జీ (బిఎల్ఇ) మద్దతును కలిగి ఉంది, ఇది ఐబీకాన్ పరికరాలు, జిపిఎస్ ట్రాకర్స్ వంటి పోర్టబుల్ అనువర్తనాలకు మంచి ఎంపికగా చేస్తుంది. అయితే, బ్యాటరీతో నడిచే అనువర్తనాల్లో, ప్రధాన ఆందోళన బ్యాటరీ బ్యాకప్. ఈ బ్యాటరీ బ్యాకప్ను మైక్రోకంట్రోలర్ యూనిట్పై తెలివిగా నియంత్రించడం ద్వారా పరికరం యొక్క బ్యాటరీ బ్యాకప్ను పెంచడానికి అనువైన స్థితిలో ESP32 ని స్లీప్ మోడ్లో ప్రోగ్రామ్ చేయవచ్చు.
ఈ ప్రాజెక్ట్లో, సాధారణ వర్కింగ్ మోడ్ మరియు డీప్ స్లీప్ మోడ్లో విస్తృతంగా ప్రాచుర్యం పొందిన వై-ఫై మరియు బ్లూటూత్ ఎనేబుల్డ్ మైక్రోకంట్రోలర్ యూనిట్ ESP32 యొక్క ప్రస్తుత వినియోగాన్ని మేము తనిఖీ చేస్తాము. అలాగే, మేము వ్యత్యాసాన్ని పరీక్షిస్తాము మరియు ESP32 ను డీప్ స్లీప్ మోడ్లో ఎలా ఉంచాలో తనిఖీ చేస్తాము. మీ డిజైన్ను మరింత శక్తి-సమర్థవంతంగా చేయడానికి ఉపయోగపడే ఇతర చిట్కాల కోసం మైక్రోకంట్రోలర్లలో విద్యుత్ వినియోగాన్ని ఎలా తగ్గించాలో కూడా మీరు కథనాన్ని చూడవచ్చు. ఇంకా, మీకు ఇతర మైక్రోకంట్రోలర్ల స్లీప్ మోడ్ పట్ల ఆసక్తి ఉంటే, మీరు ఆర్డునో స్లీప్ మోడ్ మరియు ESP8266 నోడ్ఎంసియు స్లీప్ మోడ్ను కూడా తనిఖీ చేయవచ్చు.
అవసరాలు
దీన్ని చేయడానికి, మేము ఎస్ప్రెస్సిఫ్ నుండి ESP32 ఆధారిత దేవ్కిట్ V4.0 ను ఉపయోగిస్తాము, అది USB నుండి UART వంతెనతో పాటు ఇతర ESP32 పిన్అవుట్లను సులభంగా కనెక్షన్ కోసం ఉపయోగిస్తుంది. ప్రోగ్రామింగ్ Arduino IDE తో చేయబడుతుంది. మీరు పూర్తిగా క్రొత్తవారైతే, ఆర్డునో ఉపయోగించి ESP32 తో ప్రారంభించడానికి, మీరు కొనసాగడానికి ముందు లింక్ చేసిన కథనాన్ని చదవండి.
ఈ ప్రాజెక్ట్ యొక్క అవసరాలు క్రిందివి-
- ఇది ఒక బటన్ నొక్కడం ద్వారా డీప్ స్లీప్ మోడ్లోకి వెళ్తుంది.
- ఇది డీప్ స్లీప్ మోడ్ నుండి మరొక బటన్ నొక్కడం ద్వారా మేల్కొంటుంది.
- ESP32 యొక్క స్థితిని గుర్తించడానికి, ఒక LED 1000 మిల్లీసెకన్ల టర్న్-ఆన్ సమయంతో మెరిసిపోతుంది. స్లీప్ మోడ్ సమయంలో, ఇది ఆపివేయబడుతుంది.
అందువల్ల, అదనపు భాగాలు అవసరం-
- LED - 1 pc
- పుష్-బటన్ (స్పర్శ స్విచ్) - 2 PC లు
- 4.7 కే రెసిస్టర్లు - 2 పిసిలు
- 680 ఆర్ రెసిస్టర్ - 1 పిసి
- బ్రెడ్బోర్డ్
- హుక్ అప్ వైర్
- 5 వి అడాప్టర్ లేదా విద్యుత్ సరఫరా యూనిట్
- మైక్రో-యుఎస్బి కేబుల్
- PC లేదా ల్యాప్టాప్లో ESP32 ప్రోగ్రామింగ్ ఇంటర్ఫేస్తో Arduino IDE.
ESP32 స్లీప్ మోడ్ సర్క్యూట్ రేఖాచిత్రం
పుష్ బటన్తో నిద్రించడానికి ESP32 ను ఉంచే స్కీమాటిక్ క్రింద చూపబడింది.
స్కీమాటిక్ చాలా సులభం. దీనికి రెండు బటన్లు ఉన్నాయి. స్లీప్ బటన్ ESP32 ని డీప్ స్లీప్ మోడ్లో ఉంచుతుంది మరియు స్లీప్ మోడ్ నుండి ESP32 ని మేల్కొలపడానికి మరొక స్విచ్ ఉపయోగించబడుతుంది. రెండు బటన్లు పిన్ 16 మరియు పిన్ 33 లలో అనుసంధానించబడి ఉన్నాయి. రెండు బటన్లు నొక్కినప్పుడు చురుకుగా తక్కువగా కాన్ఫిగర్ చేయబడతాయి, కాబట్టి అదనపు పుల్-అప్ ఇవ్వబడుతుంది. అయినప్పటికీ, ESP 32 స్లీప్ మోడ్లో ఉందా లేదా సాధారణ వర్కింగ్ కండిషన్ మోడ్లో ఉందో లేదో తెలుసుకోవడానికి, LED IO పిన్ 4 కి అనుసంధానించబడి ఉంది.
ESP32 లో స్లీప్ మోడ్ల అవలోకనం
ESP32 కోసం అనేక విభిన్న పవర్ మోడ్లు ఉన్నాయి, అవి యాక్టివ్ మోడ్, మోడెమ్ స్లీప్ మోడ్, లైట్ స్లీప్ మోడ్, డీప్ స్లీప్ మోడ్ మరియు హైబర్నేషన్ మోడ్.
సాధారణ పని స్థితిలో, ESP32 యాక్టివ్ మోడ్లో నడుస్తుంది. ESP32 యాక్టివ్ మోడ్ సమయంలో, CPU, WiFi / BT హార్డ్వేర్, RTC మెమరీ మరియు RTC పెరిఫెరల్స్, ULP కో-ప్రాసెసర్లు అన్నీ సక్రియం చేయబడతాయి మరియు పనిభారాన్ని బట్టి పనిచేస్తాయి. అయితే, వేర్వేరు శక్తి మోడ్లలో, ఒకటి లేదా అంతకంటే ఎక్కువ పెరిఫెరల్స్ ఆపివేయబడతాయి. విభిన్న పవర్ మోడ్ కార్యకలాపాలను తనిఖీ చేయడానికి, క్రింది పట్టికను అనుసరించండి-
హార్డ్వేర్ |
సక్రియ మోడ్ |
మోడెమ్-స్లీప్ మోడ్ |
లైట్ స్లీప్ మోడ్ |
డీప్-స్లీప్ మోడ్ |
నిద్రాణస్థితి |
CPU |
పై |
పై |
పాజ్ చేయండి |
ఆఫ్ |
ఆఫ్ |
వైఫై / బిటి |
పై |
ఆఫ్ |
ఆఫ్ |
ఆఫ్ |
ఆఫ్ |
ఆర్టీసీ మరియు ఆర్టీసీ పెరిఫెరల్స్ |
పై |
పై |
పై |
పై |
ఆఫ్ |
ULP-Co ప్రాసెసర్ |
పై |
పై |
పై |
ఆఫ్ |
ఆఫ్ |
పై పట్టికలో మనం చూడగలిగినట్లుగా ESP32 డీప్ స్లీప్ మోడ్లో తరచుగా ULP సెన్సార్ మానిటర్డ్ ప్యాటర్న్ అని పిలుస్తారు - CPU, WiFi / BT, RTC మెమరీ మరియు పెరిఫెరల్స్, ULP కో-ప్రాసెసర్లు అన్నీ ఆపివేయబడతాయి. RTC మెమరీ మరియు RTC పెరిఫెరల్స్ మాత్రమే ఆన్ చేయబడతాయి.
మేల్కొనే పరిస్థితిలో, లోతైన నిద్ర మోడ్ నుండి ESP32 ను మేల్కొనే మేల్కొలుపు మూలం ద్వారా ESP32 కి తెలియజేయాలి. అయినప్పటికీ, RTC పెరిఫెరల్స్ ఆన్ చేయబడినందున, ESP32 ను RTC ప్రారంభించబడిన GPIO ల ద్వారా మేల్కొలపవచ్చు. ఇతర ఎంపికలు కూడా ఉన్నాయి. ఇది బాహ్య వేక్ అప్ ఇంటరప్ట్ పిన్స్ ద్వారా మేల్కొలపవచ్చు లేదా ESP32 ను మేల్కొలపడానికి టైమర్ను ఉపయోగించవచ్చు. ఈ ప్రాజెక్ట్లో, మేము పిన్ 33 లో ext0 మేల్కొలుపును ఉపయోగిస్తున్నాము.
డీప్ స్లీప్ మోడ్ కోసం ప్రోగ్రామింగ్ ESP32
పూర్తి ప్రోగ్రామ్ ఈ పేజీ దిగువన చూడవచ్చు. ఇది Arduino IDE కోసం వ్రాయబడింది మరియు అందువల్ల మీ అవసరాలకు సులభంగా స్వీకరించవచ్చు. కోడ్ యొక్క వివరణ క్రింది విధంగా ఉంది.
కోడ్ ప్రారంభంలో, // పుష్బటన్ వేరియబుల్ సృష్టించండి PushBnt pushBtn = {GPIO_NUM_16, 0, తప్పుడు}; // లెడ్ పిన్ను నిర్వచించండి uint8_t led_pin = GPIO_NUM_4; // మేల్కొలపడానికి పిన్ నిర్వచించండి uint8_t వేక్అప్_పిన్ = GPIO_NUM_33;
పై మూడు పంక్తులు వేక్-అప్ పిన్, ఎల్ఈడి పిన్ మరియు స్లీప్ మోడ్ పిన్ను నిర్వచించాయి.
శూన్య సెటప్ () { // ఒకసారి సెటప్ చేయడానికి మీ సెటప్ కోడ్ను ఇక్కడ ఉంచండి: // సీరియల్ పోర్ట్ను 115200 సీరియల్.బెగిన్ (115200) వద్ద సెట్ చేయండి ; ఆలస్యం (1000); // పుష్బటన్ పిన్ను అంతర్గత పుల్అప్ పిన్మోడ్తో ఇన్పుట్గా సెట్ చేయండి (pushBtn.pin, INPUT_PULLUP); // ఫాలింగ్ మోడ్లో పుష్బటన్ పిన్తో ఇంటరప్ట్ హ్యాండ్లర్ను సెట్ చేయండి అటాచ్ఇంటరప్ట్ (pushBtn.pin, isr_handle, FALLING); // లెడ్ పిన్ను up పిట్ పిన్మోడ్ (లెడ్_పిన్, OUTPUT) గా సెట్ చేయండి; // బ్లింక్ లెడ్ () ఫంక్షన్ లో, ప్రాధాన్యత 1 తో, కోర్ 0 x టాస్క్ క్రియేట్ ( బ్లింక్ లెడ్, / * టాస్క్ ఫంక్షన్. * / "బ్లింక్ లెడ్", / * టాస్క్ పేరు మీద అమలు చేయబడే పనిని సృష్టించండి. * / 1024 * 2, / * విధి యొక్క స్టాక్ పరిమాణం * / NULL, / * విధి యొక్క పరామితి * / 5, / * విధి యొక్క ప్రాధాన్యత * / & టాస్క్బ్లింక్డ్); / * సృష్టించిన పనిని ట్రాక్ చేయడానికి టాస్క్ హ్యాండిల్ * / ఆలస్యం (500); // తక్కువ లాజిక్ స్థాయి esp_sleep_enable_ext0_wakeup ((gpio_num_t) ವೇక్అప్_పిన్, 0) తో పిన్ 33 ను ext0 మేల్కొలుపు మూలంగా కాన్ఫిగర్ చేయండి ; }
పై వాటిలో, కోడ్ స్నిప్పెట్ ద్వారా అంతరాయం పడిపోయే మోడ్కు సెట్ చేయబడింది
అటాచ్ఇంటరప్ట్ (pushBtn.pin, isr_handle, FALLING);
అందువల్ల, స్విచ్ నొక్కినప్పుడల్లా, లాజిక్ స్థాయి లాజిక్ 1 (3.3 వి) నుండి లాజిక్ 0 (0 వి) కు మారుతుంది. బటన్ పిన్ యొక్క వోల్టేజ్ పడిపోతుంది మరియు స్విచ్ నొక్కినట్లు ESP32 గుర్తిస్తుంది. ఎల్ఈడీని రెప్ప వేయడానికి ఒక టాస్క్ కూడా ఉంది.
x టాస్క్ క్రియేట్ ( బ్లింక్ లెడ్, / * టాస్క్ ఫంక్షన్. * / "బ్లింక్ లెడ్", / * టాస్క్ పేరు. * / 1024 * 2, / * టాస్క్ యొక్క స్టాక్ పరిమాణం * / NULL, / * టాస్క్ యొక్క పారామితి * / 5, / * ప్రాధాన్యత విధి యొక్క * / & టాస్క్బ్లింక్డ్); / * సృష్టించిన పనిని ట్రాక్ చేయడానికి టాస్క్ హ్యాండిల్ * / ఆలస్యం (500);
పిన్ 33 కూడా దిగువ కోడ్ స్నిప్పెట్ను ఉపయోగించి బాహ్య మేల్కొలుపు మూలంగా ext0 గా గుర్తించబడింది.
esp_sleep_enable_ext0_wakeup ((gpio_num_t) ವೇక్అప్_పిన్, 0);
తరువాత, అయితే లూప్-
void loop () { // మీ ప్రధాన కోడ్ను పదేపదే అమలు చేయడానికి ఇక్కడ ఉంచండి: if (pushBtn.pressed) { Serial.printf ("పుష్బటన్ (% d) నొక్కిన \ n", pushBtn.pin); సీరియల్.ప్రింట్ఫ్ ("బ్లింక్ లెడ్ 'టాస్క్ సస్పెండ్"); // బ్లింక్ లెడ్ టాస్క్ vTaskSuspend ( టాస్క్ బ్లింక్డ్) ను సస్పెండ్ చేయండి ; డిజిటల్ రైట్ (led_pin, LOW); సీరియల్.ప్రింట్ఫ్ ("నిద్రపోతోంది….. \ n", pushBtn.pin); pushBtn.pressed = తప్పుడు; // ఇప్పుడు నిద్రపోండి esp_deep_sleep_start (); } esp_sleep_wakeup_cause_t మేల్కొలుపు కారణం; වේకప్ రీజన్ = 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 సిగ్నల్ ఉపయోగించి"); విచ్ఛిన్నం; డిఫాల్ట్: విరామం; సీరియల్.ప్రింట్ఫ్ ("బ్లింక్ లెడ్ 'టాస్క్ను తిరిగి ప్రారంభించండి); // బ్లింక్ లెడ్ టాస్క్ vTaskResume (టాస్క్బ్లింక్డ్) ను పున art ప్రారంభించండి ; } }
స్లీప్ బటన్ నొక్కినట్లు కాదా అని లూప్ నిరంతరం తనిఖీ చేస్తుంది. బటన్ నొక్కితే, అది LED బ్లింక్ పనిని ఆపివేస్తుంది లేదా నిలిపివేస్తుంది మరియు esp డీప్ స్లీప్ స్టార్ట్ ఫంక్షన్ను అమలు చేస్తుంది-
esp_deep_sleep_start ();
ఈ పరిస్థితిలో, ext0 బాహ్య అంతరాయ బటన్ నొక్కితే, అది వెంటనే లోతైన నిద్ర మోడ్ నుండి మేల్కొంటుంది మరియు దారితీసిన బ్లింక్ పనిని తిరిగి ప్రారంభిస్తుంది.
చివరగా, LED బ్లింక్ ఫంక్షన్ క్రింద ఉన్న స్నిప్పెట్లలో చూడవచ్చు, ఇది LED 1000 ms సెకన్లను బ్లింక్ చేస్తుంది.
void blinkLed (void * param) { అయితే (1) { స్టాటిక్ uint32_t పిన్_వాల్ = 0; // పిన్ విలువను టోగుల్ చేయండి పిన్_వాల్ ^ = 1; డిజిటల్ రైట్ (led_pin, pin_val); సీరియల్.ప్రింట్ఫ్ ("లెడ్ -----------------% s \ n", పిన్_వాల్? "ఆన్": "ఆఫ్"); / * ప్రతి 1000ms లేదా 1sec * / vTaskDelay (1000 / portTICK_PERIOD_MS) ను LED ని టోగుల్ చేయండి ; } టాస్క్బ్లింక్డ్ = NULL; vTaskDelete (NULL); }
డీప్ స్లీప్ మోడ్లో ESP32 ను పరీక్షిస్తోంది
సర్క్యూట్ బ్రెడ్బోర్డ్లో నిర్మించబడింది మరియు కరెంటును కొలవడానికి మెట్రావి ఎక్స్బి ఎడిషన్ మల్టీమీటర్ ఉపయోగించబడుతుంది. యాక్టివ్ మోడ్లో సర్క్యూట్ గీసిన కరెంట్ దాదాపు 58 mA అయితే డీప్ స్లీప్ మోడ్లో, కరెంట్ దాదాపు 4.10 mA. చిత్రం క్రింద ESP32 యాక్టివ్ మోడ్ ప్రస్తుత వినియోగాన్ని చూపుతోంది -
లోతైన నిద్ర మోడ్లో, ప్రస్తుత వినియోగం సుమారు 3.95mA కి పడిపోయింది, ఈ క్రింది చిత్రం ESP32 డీప్ స్లీప్ మోడ్ ప్రస్తుత వినియోగం-
అయితే, డీప్ స్లీప్ మోడ్లో, ESP32 యొక్క ప్రస్తుత వినియోగం దాదాపు 150 uA. కానీ ఈ ESP32 దేవ్కిట్ బోర్డు కోసం ప్రస్తుత వినియోగం దాదాపు 4.10 mA. దీనికి కారణం CP2102 మరియు లీనియర్ రెగ్యులేటర్. ఈ రెండు 5 వి విద్యుత్ లైన్కు అనుసంధానించబడి ఉన్నాయి. విద్యుత్ లైన్లో కనెక్ట్ చేయబడిన పవర్ ఎల్ఇడి కూడా ఉంది, ఇది దాదాపు 2 ఎంఏ కరెంట్ను తీసుకుంటుంది.
అందువల్ల, బ్యాటరీతో నడిచే ఆపరేషన్లకు చాలా ఉపయోగకరంగా ఉండే డీప్ స్లీప్ మోడ్ స్థితిలో ESP32 చాలా తక్కువ శక్తిని వినియోగిస్తుందని సులభంగా గుర్తించవచ్చు. ఇది ఎలా పనిచేస్తుందనే దానిపై మరింత సమాచారం కోసం, క్రింద లింక్ చేయబడిన వీడియోను చూడండి. మీకు ఏవైనా ప్రశ్నలు ఉంటే, వాటిని క్రింది వ్యాఖ్య విభాగంలో ఉంచండి లేదా ఇతర సాంకేతిక ప్రశ్నల కోసం మా ఫోరమ్లను ఉపయోగించండి.