Πίνακας περιεχομένων:
- Βήμα 1: Εισαγωγή
- Βήμα 2: Τρόποι αφύπνισης του ESP32
- Βήμα 3: Χρονόμετρο
- Βήμα 4: Εξωτερική αφύπνιση (ext0)
- Βήμα 5: Εξωτερική αφύπνιση (ext1)
- Βήμα 6: Ξύπνημα ULP με τον επεξεργαστή
- Βήμα 7: Επιφάνεια αφής
- Βήμα 8: Εισαγωγή στη λειτουργία Deep Sleep
- Βήμα 9: Εδώ είναι μερικές πιο σημαντικές πληροφορίες
- Βήμα 10: Επίδειξη
- Βήμα 11: WiFi NodeMCU-32S ESP-WROOM-32
- Βήμα 12: Συναρμολόγηση
- Βήμα 13: Πρόγραμμα
- Βήμα 14: Απαιτείται βιβλιοθήκη
- Βήμα 15: Βιβλιοθήκες και μεταβλητές
- Βήμα 16: Ρύθμιση
- Βήμα 17: Loop, Callback & ConfigureDisplay
- Βήμα 18: Λόγος Print_wakeup_re (γνωρίζοντας την αιτία της αφύπνισης)
- Βήμα 19: Print_wakeup_touchpad (γνωρίζετε το GPIO Touch)
- Βήμα 20: Κατεβάστε τα αρχεία
Βίντεο: Εξοικονόμηση ζωής μπαταρίας με βαθύ ύπνο: 20 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Σας ενδιαφέρει να χρησιμοποιήσετε μια μπαταρία με το ESP32; Αν ναι, θα συζητήσω σήμερα μερικές σημαντικές τεχνικές πληροφορίες σχετικά με αυτό το θέμα. Γνωρίζουμε ότι αυτός ο μικροελεγκτής ξοδεύει πολύ ενέργεια όταν μεταδίδει πληροφορίες. Καταναλώνει κοντά στα 190 milliamps. Σε αυτό το βίντεο, θα δείξω πώς να εξοικονομείτε ενέργεια από το ESP32 με τη λεγόμενη λειτουργία "ΒΑΘΟΣ ΥΠΝΟΣ". Θα ορίσουμε το τσιπ να εισέρχεται σε αυτήν τη λειτουργία, θα μάθουμε τους τρόπους εξόδου από αυτήν τη λειτουργία και θα δημιουργήσουμε ένα παράδειγμα που θα δείχνει τρεις διαφορετικούς τρόπους αφύπνισης του ESP32.
Είναι σημαντικό να θυμόμαστε ότι το ραδιόφωνο ξοδεύει πολύ ενέργεια, παρά τον επεξεργαστή. Η εξοικονόμηση ενέργειας είναι πολύ σημαντική. Αυτό συμβαίνει επειδή τα τελικά σημεία (τα κυκλώματα που στέλνουν πληροφορίες) συχνά τροφοδοτούνται από μπαταρία και πρέπει να διαρκέσουν έως και πέντε χρόνια. Υπάρχουν ορισμένοι κατασκευαστές που υπόσχονται διάρκεια έως και δέκα χρόνια, και αυτό ισχύει για μπαταρίες υψηλής ποιότητας που δεν χρησιμοποιούν τόσο τα τελικά σημεία. Σε όλες τις άλλες περιπτώσεις, σας συμβουλεύω να χρησιμοποιήσετε Deep Sleep για να εξοικονομήσετε ενέργεια από το κύκλωμά σας.
Βήμα 1: Εισαγωγή
Το ESP32 διαθέτει λειτουργία εξοικονόμησης ενέργειας, που ονομάζεται "Deep Sleep". Σε αυτήν τη λειτουργία, οι CPU, η περισσότερη RAM και όλα τα ψηφιακά περιφερειακά είναι απενεργοποιημένα. Τα μόνα μέρη του τσιπ που μπορούν ακόμα να συνδεθούν είναι ο ελεγκτής RTC, τα περιφερειακά RTC (συμπεριλαμβανομένου του συμπαραγωγέα ULP) και οι μνήμες RTC.
Έχουμε πολλούς τρόπους να ξυπνήσουμε το ESP32 όταν κοιμόμαστε. Οι πηγές αφύπνισης μπορούν να ρυθμιστούν ανά πάσα στιγμή πριν από την είσοδο στη λειτουργία Deep Sleep.
Βήμα 2: Τρόποι αφύπνισης του ESP32
Υπάρχουν πέντε τρόποι αφύπνισης του ESP32:
• Χρονόμετρο
• Εξωτερική αφύπνιση (ext0)
• Εξωτερική αφύπνιση (ext1)
• Ξυπνητήρας ULP με τον επεξεργαστή
• Επιφάνεια αφής
Βήμα 3: Χρονόμετρο
Ο ελεγκτής RTC διαθέτει ενσωματωμένο χρονοδιακόπτη που μπορεί να χρησιμοποιηθεί για την ενεργοποίηση του τσιπ μετά από προκαθορισμένο χρονικό διάστημα. Ο χρόνος καθορίζεται με ακρίβεια μικροδευτερολέπτου.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> είναι ο χρόνος σε μικροδευτερόλεπτα
Βήμα 4: Εξωτερική αφύπνιση (ext0)
Η ενότητα RTC IO περιέχει λογική για την ενεργοποίηση του συναγερμού όταν ένας από τους RTC GPIO εισέλθει σε ένα προκαθορισμένο λογικό επίπεδο. Το RTC IO είναι μέρος του τομέα ισχύος των περιφερειακών RTC, επομένως τα περιφερειακά RTC θα διατηρηθούν ζωντανά κατά τη διάρκεια του Deep Sleep εάν ζητηθεί αυτή η πηγή ενεργοποίησης.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int επίπεδο)
gpio_num> αριθμός GPIO που χρησιμοποιείται ως πηγή ενεργοποίησης. Μπορούν να χρησιμοποιηθούν μόνο GPIO που λειτουργούν με RTC: 0, 2, 4, 12-15, 25-27, 32-39.
επίπεδο> επίπεδο εισόδου που θα ενεργοποιήσει τον συναγερμό (0 = ΧΑΜΗΛΟ, 1 = Υ HIGHΟΣ)
Βήμα 5: Εξωτερική αφύπνιση (ext1)
Ο ελεγκτής RTC περιέχει λογική για την ενεργοποίηση του ξυπνητηριού χρησιμοποιώντας πολλαπλούς RTC GPIO.
esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)
mask> bit mask των αριθμών GPIO που θα προκαλέσει ενεργοποίηση. Σε αυτό το bitmap μπορούν να χρησιμοποιηθούν μόνο GPIO με δυνατότητα RTC: 0, 2, 4, 12-15, 25-27, 32-39.
mode> επιλέξτε τη λογική συνάρτηση που χρησιμοποιείται για τον προσδιορισμό της συνθήκης ενεργοποίησης:
• ESP_EXT1_WAKEUP_ALL_LOW: αφυπνίζεται όταν όλα τα επιλεγμένα GPIO είναι σε LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: αφυπνίζεται όταν κάποιο από τα επιλεγμένα GPIO είναι Υ HIGHΗΛΑ
Βήμα 6: Ξύπνημα ULP με τον επεξεργαστή
Ο συνεπεξεργαστής ULP μπορεί να λειτουργήσει ενώ το τσιπ βρίσκεται σε Deep Sleep και μπορεί να χρησιμοποιηθεί για αναζήτηση αισθητήρων, παρακολούθηση τιμών ADC ή χωρητικών αισθητήρων αφής και ενεργοποίηση του τσιπ όταν εντοπιστεί ένα συγκεκριμένο συμβάν.
Ο συνεπεξεργαστής ULP είναι μέρος του τομέα ισχύος των περιφερειακών RTC και εκτελεί το πρόγραμμα που είναι αποθηκευμένο σε RTC αργής μνήμης. Επομένως, τα περιφερειακά RTC και η αργή μνήμη RTC θα ενεργοποιηθούν κατά τη διάρκεια του Deep Sleep εάν ζητηθεί αυτή η λειτουργία ενεργοποίησης.
Βήμα 7: Επιφάνεια αφής
Ο ελεγκτής RTC περιέχει λογική για την ενεργοποίηση του συναγερμού χρησιμοποιώντας τους χωρητικούς αισθητήρες αφής. Ο ορισμός του πείρου αφής, ωστόσο, είναι διαφορετικός. Πρέπει να χρησιμοποιήσουμε τη διακοπή αφής για κάθε μία από τις επιθυμητές ακίδες.
Μετά τη ρύθμιση των διακοπών, ενεργοποιήσαμε τη λειτουργία αφύπνισης για χρήση των αισθητήρων.
// Διαμόρφωση της επιφάνειας αφής ως πηγής αφύπνισης esp_sleep_enable_touchpad_wakeup ();
Βήμα 8: Εισαγωγή στη λειτουργία Deep Sleep
Μετά τη ρύθμιση της λειτουργίας αφύπνισης, αρκεί μια μόνο εντολή για να τοποθετήσετε το ESP32 στη λειτουργία Deep Sleep (δαπάνη 2,5 μA ή λιγότερο). Τονίζω εδώ ότι αυτή η δαπάνη είναι από το τσιπ 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 and memória RTCRTC_DATA_ATTR int bootCount = 0;
Βήμα 10: Επίδειξη
Το βίντεο δείχνει το πρόγραμμα να λειτουργεί, σύμφωνα με την εικόνα.
Βήμα 11: WiFi NodeMCU-32S ESP-WROOM-32
Βήμα 12: Συναρμολόγηση
Βήμα 13: Πρόγραμμα
Τώρα θα φτιάξουμε ένα πρόγραμμα στο οποίο θα διαμορφώσουμε το ESP32 για είσοδο στη λειτουργία Deep Sleep. Αυτό θα αφυπνιστεί με τρεις διαφορετικούς τρόπους: ένας για εξωτερική αφύπνιση (ext0), ένας για χρονοδιακόπτη και ένας για επιφάνεια αφής. Δεν μπορούν να συνεργαστούν, επομένως θα χρησιμοποιήσουμε μια μεταβλητή που θα είναι ένας μετρητής για τον αριθμό των φορών που το ESP32 έδωσε στην εκκίνηση για να διαμορφώσει τον τρόπο αφύπνισης.
Βήμα 14: Απαιτείται βιβλιοθήκη
Για τον έλεγχο της οθόνης OLED, χρειαζόμαστε μια εξωτερική βιβλιοθήκη. Για αυτό, θα κατεβάσουμε τη βιβλιοθήκη U8g2.
Στο Arduino IDE, μεταβείτε στο μενού Sketch >> Include Library >> Manage Libraries….
Βήμα 15: Βιβλιοθήκες και μεταβλητές
Έχουμε συμπεριλάβει τη βιβλιοθήκη για τον έλεγχο της οθόνης OLED, καθώς και έναν κατασκευαστή της παρουσίας του ελεγκτή οθόνης. Επίσης, διαθέτουμε τη μεταβλητή στη μνήμη RTC. Ρυθμίζουμε την ευαισθησία για αποδοχή αφής, τον συντελεστή μετατροπής μικροδευτερολέπτου για δευτερόλεπτα και την ώρα που το ESP32 μεταβαίνει σε κατάσταση αναστολής λειτουργίας (σε δευτερόλεπτα).
#include // biblioteca para controle do display oled
// construtor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display (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) #define TIME_TO_SLEEP
Βήμα 16: Ρύθμιση
Στη ρύθμιση, αυξάνουμε τον αριθμό των φορών που προέκυψε η εκκίνηση. Καλούμε τη λειτουργία εκτύπωσης του μοτίβου εκκίνησης. Εάν ο αριθμός εκκίνησης είναι PAR, ρυθμίζουμε το ESP32 να ξυπνά μέσω του κουμπιού (EXT0). Εάν είναι πολλαπλάσιο του 3, θέτουμε το ESP32 να ξυπνά μετά από καθορισμένο χρόνο. Διαφορετικά, ρυθμίζουμε τις χωρητικές ακίδες αφής για να ξυπνήσουμε το ESP32. Τέλος, ορίζουμε το Touchpad ως πηγή αφύπνισης και αναγκάζουμε το ESP32 να εισέλθει σε κατάσταση αναστολής λειτουργίας.
void setup () {Serial.begin (115200); καθυστέρηση (1000)? // incrementa 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 de boot for PAR configuramos or ESP32 at despertar através do botão (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Υψηλός, 0 = Χαμηλός // // για πολλαπλές ρυθμίσεις 3 διαμορφώσεων ή ESP32 για να ρυθμίσετε το τέλος ορισμού άλλου αν (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch capacitivo για despertar o ESP32 else {// Διακοπή εγκατάστασης στο 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
Στο Loop, δεν έχουμε τίποτα να κάνουμε. Στη συνέχεια, προχωρούμε στη διακοπή της επανάκλησης εάν έχουμε κάτι να κάνουμε όταν προκύψει η διακοπή. Όσον αφορά το configureDisplay, αρχικοποιούμε την οθόνη και διαμορφώνουμε ορισμένες παραμέτρους. Εκτυπώνουμε στην οθόνη πόσες φορές συνέβη το Boot.
// 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 and configura alguns parametros display. να αρχίσει(); 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: Λόγος Print_wakeup_re (γνωρίζοντας την αιτία της αφύπνισης)
Εδώ, έχουμε τη λειτουργία να εκτυπώνουμε την αιτία της αφύπνισης ESP32. Ελέγξτε την καρφίτσα και εκτυπώστε στην οθόνη.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String 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"; Διακοπή; προεπιλογή: reason = "NO DS CAUSE"; Διακοπή; } Serial.println (λόγος); display.clearLine (6); // apaga a linha 6 do 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 if (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime no display}}
Βήμα 19: Print_wakeup_touchpad (γνωρίζετε το GPIO Touch)
Τώρα, σε αυτό το βήμα, έχουμε τη λειτουργία να εκτυπώσουμε την καρφίτσα που αγγίχθηκε. Ανακτήσαμε το 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 = ""; διακόπτης (touchPin) {περίπτωση 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 ("Wakeup not by touchpad"); Διακοπή; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // apaga a linha 7 do display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Βήμα 20: Κατεβάστε τα αρχεία
ΕΓΩ ΔΕΝ
Συνιστάται:
Πώς να τριπλασιάσετε τη διάρκεια ζωής της μπαταρίας των φακών AAA: 3 βήματα
Πώς να τριπλασιάσετε τη διάρκεια ζωής της μπαταρίας των φακών AAA: Όταν χρησιμοποιείτε φακούς LED 3W που τροφοδοτούνται από μπαταρίες AAA, θα περιμένετε να διαρκέσουν για περίπου 30 λεπτά. Υπάρχει ένας τρόπος να τριπλασιάσετε τον χρόνο λειτουργίας χρησιμοποιώντας μπαταρίες ΑΑ, τον οποίο θα σας δείξω συνδέοντας μια υποδοχή μπαταρίας ΑΑ σε αυτήν
Διάρκεια ζωής μπαταρίας Hack Action Camera: 4 βήματα (με εικόνες)
Διάρκεια ζωής μπαταρίας Hack Action Camera: Είτε έχετε GoPro, Contour είτε οποιαδήποτε άλλη κάμερα, αυτή είναι για εσάς! Οι μπαταρίες βιντεοκάμερας είναι συχνά πρόβλημα. Είτε τραβάτε μεγάλα βίντεο και δεν διαρκούν αρκετά, είτε απλά ξεχάσατε να το φορτίσετε πλήρως πριν. Σως είναι πολύ
Μετεωρολογικός σταθμός: ESP8266 με βαθύ ύπνο, SQL, γραφική παράσταση κατά φιάλη & συνοπτικά: 3 βήματα
Μετεωρολογικός σταθμός: ESP8266 Με βαθύ ύπνο, SQL, Graphing by Flask & Plotly: Θα ήταν διασκεδαστικό να γνωρίζετε τη θερμοκρασία, την υγρασία ή την ένταση του φωτός στο μπαλκόνι σας; Ξέρω ότι θα το έκανα. Έτσι έφτιαξα έναν απλό μετεωρολογικό σταθμό για να συλλέξω τέτοια δεδομένα. Οι ακόλουθες ενότητες είναι τα βήματα που έκανα για να δημιουργήσω ένα. Ας ξεκινήσουμε
Αισθητήρας κίνησης ESP-01 με βαθύ ύπνο: 5 βήματα
ESP-01 Motion Sensor With Deep Sleep: Εργάζομαι στην κατασκευή σπιτικών αισθητήρων κίνησης που στέλνουν ένα μήνυμα ηλεκτρονικού ταχυδρομείου όταν ενεργοποιείται. Υπάρχουν πολλά παραδείγματα οδηγιών και άλλα παραδείγματα για να το κάνετε αυτό. Πρόσφατα χρειάστηκε να το κάνω με αισθητήρα κίνησης PIR που λειτουργεί με μπαταρία και ESP
Πώς να χαράξετε έναν αισθητήρα θερμοκρασίας για μεγαλύτερη διάρκεια ζωής μπαταρίας: 4 βήματα
Πώς να χαράξετε έναν αισθητήρα θερμοκρασίας για μεγαλύτερη διάρκεια ζωής της μπαταρίας: Το Inkbird IBS-TH1 είναι μια εξαιρετική μικρή συσκευή για καταγραφή θερμοκρασίας και υγρασίας σε λίγες ώρες ή ημέρες. Μπορεί να ρυθμιστεί να καταγράφεται κάθε δευτερόλεπτο έως κάθε 10 λεπτά και αναφέρει τα δεδομένα μέσω Bluetooth LE σε smartphone Android ή iOS. Η εφαρμογή