İçindekiler:
- Adım 1: Giriş
- Adım 2: ESP32'yi Uyandırmanın Yolları
- Adım 3: Zamanlayıcı
- 4. Adım: Harici Uyandırma (ext0)
- Adım 5: Harici Uyandırma (ext1)
- Adım 6: ULP Yardımcı İşlemci Uyandırma
- 7. Adım: Dokunmatik Yüzey
- 8. Adım: Derin Uyku Moduna Girme
- 9. Adım: İşte Bazı Daha Önemli Bilgiler
- Adım 10: Gösteri
- 11. Adım: WiFi NodeMCU-32S ESP-WROOM-32
- Adım 12: Montaj
- Adım 13: Program
- Adım 14: Kitaplık Gerekli
- Adım 15: Kitaplıklar ve Değişkenler
- Adım 16: Kurulum
- Adım 17: Döngü, Geri Arama ve Ekranı Yapılandır
- Adım 18: Print_wakeup_reason (Uyanışın Nedenini bilmek)
- 19. Adım: Print_wakeup_touchpad (GPIO Touch'ı bilin)
- Adım 20: Dosyaları İndirin
Video: Derin Uyku ile Pil Ömründen Tasarruf: 20 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
ESP32'nizle pil kullanmakla ilgileniyor musunuz? Eğer öyleyse, bugün bu konuyla ilgili bazı önemli teknik bilgileri tartışıyor olacağım. Bu mikrodenetleyicinin bilgi aktarırken çok fazla enerji harcadığını biliyoruz. 190 miliampere yakın tüketir. Bu videoda, "DERİN UYKU" adı verilen işlevle ESP32'den nasıl enerji tasarrufu yapılacağını göstereceğim. Çipi bu moda girecek şekilde ayarlayacağız, bu moddan çıkmanın yollarını öğreneceğiz ve ESP32'yi uyandırmanın üç farklı yolunu gösteren bir örnek oluşturacağız.
Telsizin işlemciden çok enerji harcadığını hatırlamak önemlidir. Enerji tasarrufu çok önemlidir. Bunun nedeni, Uç Noktaların (bilgi gönderen devreler) genellikle pille çalışması ve beş yıla kadar sürmesi gerektiğidir. On yıla kadar süre vaat eden bazı üreticiler var ve bu, Uç Noktaları fazla kullanmayan yüksek kaliteli piller için geçerlidir. Diğer tüm durumlarda, devrenizden enerji tasarrufu için Derin Uyku kullanmanızı tavsiye ederim.
Adım 1: Giriş
ESP32, "Derin Uyku" adı verilen bir güç tasarrufu moduna sahiptir. Bu modda CPU'lar, çoğu RAM ve tüm dijital saatli çevre birimleri kapatılır. Çipin hala bağlanabilen parçaları yalnızca RTC denetleyicisi, RTC çevre birimleri (ULP yardımcı işlemcisi dahil) ve RTC bellekleridir.
Uyurken ESP32'yi uyandırmanın birkaç yolu var. Uyandırma kaynakları, Derin Uyku moduna girmeden önce herhangi bir zamanda ayarlanabilir.
Adım 2: ESP32'yi Uyandırmanın Yolları
ESP32'yi uyandırmanın beş yolu vardır:
• Zamanlayıcı
• Harici uyandırma (harici)
• Harici uyandırma (harici 1)
• ULP yardımcı işlemci uyandırma
• Dokunmatik yüzey
Adım 3: Zamanlayıcı
RTC denetleyicisi, önceden tanımlanmış bir süre sonra çipi etkinleştirmek için kullanılabilecek yerleşik bir zamanlayıcıya sahiptir. Zaman, mikrosaniye hassasiyetinde belirtilir.
esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us)
time_in_us> mikrosaniye cinsinden zamandır
4. Adım: Harici Uyandırma (ext0)
RTC IO modülü, RTC GPIO'larından biri önceden tanımlanmış bir mantık düzeyine girdiğinde alarmı tetiklemek için mantık içerir. RTC IO, RTC çevre birimlerinin güç alanının bir parçasıdır, bu nedenle bu etkinleştirme kaynağı talep edilirse RTC çevre birimleri Derin Uyku sırasında canlı tutulacaktır.
esp_deep_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, int seviye)
gpio_num> Aktivasyon kaynağı olarak kullanılan GPIO numarası. Yalnızca RTC işlevli GPIO'lar kullanılabilir: 0, 2, 4, 12-15, 25-27, 32-39.
seviye> alarmı tetikleyecek giriş seviyesi (0 = DÜŞÜK, 1 = YÜKSEK)
Adım 5: Harici Uyandırma (ext1)
RTC denetleyicisi, birden fazla RTC GPIO kullanarak çalar saati tetiklemek için mantık içerir.
esp_deep_sleep_enable_ext1_wakeup(uint64_t maskesi, esp_ext1_wakeup_mode_t modu)
mask> aktivasyona neden olacak GPIO numaralarının bit maskesi. Bu bit eşlemde yalnızca RTC etkin GPIO'lar kullanılabilir: 0, 2, 4, 12-15, 25-27, 32-39.
modu> etkinleştirme koşulunu belirlemek için kullanılan mantık işlevini seçin:
• ESP_EXT1_WAKEUP_ALL_LOW: seçilen tüm GPIO'lar DÜŞÜK olduğunda uyanır
• ESP_EXT1_WAKEUP_ANY_HIGH: seçilen GPIO'lardan herhangi biri YÜKSEK olduğunda uyanır
Adım 6: ULP Yardımcı İşlemci Uyandırma
ULP yardımcı işlemcisi, çip Derin Uykudayken çalışabilir ve sensörleri aramak, ADC veya kapasitif dokunmatik sensör değerlerini izlemek ve belirli bir olay algılandığında çipi etkinleştirmek için kullanılabilir.
ULP yardımcı işlemcisi, RTC çevre birimlerinin güç alanının bir parçasıdır ve yavaş bellek RTC'sinde depolanan programı çalıştırır. Bu nedenle, bu etkinleştirme modu istenirse, Derin Uyku sırasında RTC çevre birimleri ve RTC yavaş belleği etkinleştirilecektir.
7. Adım: Dokunmatik Yüzey
RTC denetleyicisi, kapasitif dokunmatik sensörleri kullanarak alarmı tetiklemek için mantık içerir. Ancak dokunmatik pimin tanımı farklıdır. İstenen pinlerin her biri için dokunmatik kesmeyi kullanmalıyız.
Kesintileri ayarladıktan sonra, sensörleri kullanmak için uyandırma modunu etkinleştirdik.
//Dokunmatik Yüzeyi uyandırma kaynağı olarak yapılandır esp_sleep_enable_touchpad_wakeup();
8. Adım: Derin Uyku Moduna Girme
Uyandırma modunu ayarladıktan sonra, ESP32'yi Derin Uyku moduna geçirmek için tek bir komut (2,5 μA veya daha az harcama) yeterlidir. Burada, bu masrafın plakadan değil, ESP çipinden kaynaklandığını vurguluyorum, çünkü ikincisi daha fazla harcıyor.
esp_deep_sleep_start();
Bu komuttan, ESP32 uykuya dalar ve örneğin sonraki kod satırlarını yürütmez.
Önemli: Yukarıdaki komut yürütülmeden önce tüm uyandırma ayarları yapılmalıdır.
9. Adım: İşte Bazı Daha Önemli Bilgiler
Aşağıdaki çağrı, ESP32 uyandırma nedenini döndürür.
1: EXT0 2: EXT1 3: ZAMANLAYICI 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_Cause();
Uyandırmayı touchpad ile ayarlarsak, komut aracılığıyla dokunmanın hangi GPIO'da gerçekleştiğini kurtarabiliriz.
esp_sleep_get_touchpad_wakeup_status();
ESP32 her uyandığında, kurulumda tekrar dolaşır. Böylece RTC hafızasında tanımlanmayan tüm değişkenler ev durumlarına geri dönecektir.
Değişkenleri uykuya daldıktan sonra bile bellekte tutmak için aşağıdaki örnekteki değişken bildirimini kullanın:
//RTC_DATA_ATTR bir değişken ve bellek değişkeni RTCRTC_DATA_ATTR int bootCount = 0;
Adım 10: Gösteri
Video, programın görüntüye uygun olarak çalıştığını gösterir.
11. Adım: WiFi NodeMCU-32S ESP-WROOM-32
Adım 12: Montaj
Adım 13: Program
Şimdi ESP32'yi Derin Uyku moduna girecek şekilde yapılandıracağımız bir program yapacağız. Bu, üç farklı şekilde uyandırılacaktır: biri Harici uyandırma (ext0) için, biri Zamanlayıcı için ve biri Dokunmatik Yüzey için. Birlikte çalışamazlar, bu yüzden uyanma yolunu yapılandırmak için ESP32'nin Önyükleme verme sayısı için bir sayaç olacak bir değişken kullanacağız.
Adım 14: Kitaplık Gerekli
OLED ekranı kontrol etmek için harici bir kütüphaneye ihtiyacımız var. Bunun için U8g2 kütüphanesini indireceğiz.
Arduino IDE'de Sketch menüsüne gidin >> Kütüphaneyi Dahil Et >> Kütüphaneleri Yönet ….
Adım 15: Kitaplıklar ve Değişkenler
OLED ekranını kontrol etmek için kitaplığın yanı sıra ekran denetleyicisi örneğinin yapıcısını ekledik. Ayrıca değişkeni RTC hafızasında tahsis ediyoruz. Dokunma kabulü için hassasiyeti, saniye olarak mikrosaniye dönüştürme faktörünü ve ESP32'nin uyku moduna geçme süresini (saniye olarak) ayarladık.
#include // biblioteca para kontrolü oled'i göster
//construtor ve instancia do kontrol cihazı gösterimi //SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C gösterimi(SCL, SDA, U8X8_PIN_NONE); //RTC_DATA_ATTR bellekte bir değişken olarak RTC RTC_DATA_ATTR int bootCount = 0; //ensibilidade para aceitação toque #define Threshold 40 //kişisel dönüşümler için mikrosegundos para segundos #define uS_TO_S_FACTOR 1000000 //ESP32 uyku modu (em segundos) #define TIME_TO_SLEEP 3
Adım 16: Kurulum
Kurulumda, Önyüklemenin gerçekleşme sayısını artırıyoruz. Boot motifini yazdırmak için fonksiyonu çağırıyoruz. Boot numarası PAR ise (EXT0) butonu ile ESP32'yi uyanacak şekilde ayarlıyoruz. 3'ün katı ise, ESP32'yi belirli bir süre sonra uyanacak şekilde ayarlıyoruz. Aksi takdirde, ESP32'yi uyandırmak için kapasitif dokunmatik pinleri kurduk. Son olarak Touchpad'i uyandırma kaynağı olarak ayarlıyoruz ve ESP32'yi uyku moduna girmeye zorluyoruz.
geçersiz kurulum() { Serial.begin(115200); gecikme(1000); //artırma o numero de vezes kuyruğu o BOOT ocorreu ++bootCount; configureDisplay(); // BOOT yapmak için bir işleve izin ver print_wakeup_reason(); // PAR yapılandırmaları için o numero de boot o ESP32 para despertar através do botão (EXT0) if(bootCount % 2 == 0) { esp_sleep_enable_ext0_wakeup(GPIO_NUM_39, 1); //1 = Yüksek, 0 = Düşük } //çoklu de 3 yapılandırması için o ESP32 para despertar depois de um tempo definido else if(bootCount % 3 == 0) { esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); } //caso contrario konfigürasyonları os pinos de touch capacitivo para despertar o ESP32 başka { //Touch Pad 5'te kurulum kesintisi (GPIO12) touchAttachInterrupt(T5, geri arama, Eşik); //Dokunmatik Yüzeyi uyandırma kaynağı olarak yapılandır esp_sleep_enable_touchpad_wakeup(); } Serial.println(“entrando em modo uyku ); esp_deep_sleep_start(); //esp o ESP32 entrar em modo UYKU }
Adım 17: Döngü, Geri Arama ve Ekranı Yapılandır
Döngüde yapacak bir şeyimiz yok. Daha sonra, kesinti meydana geldiğinde yapacak bir şeyimiz varsa, geri aramayı kesmeye devam ederiz. configDisplay ile ilgili olarak, ekranı başlatıyoruz ve bazı parametreleri yapılandırıyoruz. Ekrana Önyüklemenin kaç kez gerçekleştiğini yazdırıyoruz.
//döngüsüz döngü yok() { } //geri arama das interrupções void callback(){ //caso queira fazer algo ao ocorrer a interrupção } void configurationDisplay() { //incializa o display ve configura alguns parametros display. başlamak(); display.setPowerSave(0); //modo güç Tasarrufu (0-Kapalı ? 1-Açık) display.setFont(u8x8_font_torussansbold8_u); //fonte utilizada //görüntüleme yok 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:"); }
Adım 18: Print_wakeup_reason (Uyanışın Nedenini bilmek)
Burada, ESP32 uyandırma nedenini yazdırma işlevine sahibiz. Pimi kontrol edin ve ekrana yazdırın.
// ESP32 despertarvoid'i nedensel olarak onayla print_wakeup_reason(){ esp_sleep_wakeup_Cause_t wakeup_reason; Dize nedeni = ""; wakeup_reason = esp_sleep_get_wakeup_Cause(); // bir nedenden ötürü kurtarma anahtarı (wakeup_reason) { case 1:reason = "EXT0 RTC_IO BTN"; kırmak; durum 2:sebep = "EXT1 RTC_CNTL"; kırmak; durum 3:sebep = "ZAMANLAYICI"; kırmak; durum 4:sebep = "TOUCHPAD"; kırmak; durum 5:sebep = "ULP PROGRAMI"; kırmak; varsayılan:neden = "DS NEDENİ YOK"; kırmak; } Serial.println(neden); display.clearLine(6); //apaga a linha 6 display.drawString(0, 6, Reason.c_str()); //bir nedenden dolayı hiçbir gösterim yok //se despertou por TOUCHPAD, en iyi şekilde doğrulanabilir if(wakeup_reason == 4) { print_wakeup_touchpad(); //verifica o pino e imprime gösterim yok } }
19. Adım: Print_wakeup_touchpad (GPIO Touch'ı bilin)
Şimdi bu adımda dokunulan pini yazdırma fonksiyonumuz var. ESP32'yi uyandıran GPIO'yu kurtardık ve ekrana yazdırdık.
//çoğunlukla değiştirilen bir işleve sahip tocadovoid print_wakeup_touchpad() { touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status(); //recupera o GPIO que despertou o ESP32 String GPIO = ""; switch(touchPin) { durum 0: GPIO = "4"; kırmak; durum 1: GPIO = "0"; kırmak; durum 2: GPIO = "2"; kırmak; durum 3: GPIO = "15"; kırmak; durum 4: GPIO = "13"; kırmak; durum 5: GPIO = "12"; kırmak; durum 6: GPIO = "14"; kırmak; durum 7: GPIO = "27"; kırmak; durum 8: GPIO = "33"; kırmak; durum 9: GPIO = "32"; kırmak; varsayılan: Serial.println("Dokunmatik yüzey ile uyanma değil"); kırmak; } Serial.println("GPIO: "+GPIO); display.clearLine(7);//apaga a linha 7 display.drawString(0, 7, "GPIO: "); display.drawString(6, 7, GPIO.c_str()); // GPIO }
Adım 20: Dosyaları İndirin
BEN HAYIR
Önerilen:
Kendi Bağlantılı Isıtma Termostatınızı Yapın ve Isıtma ile Tasarruf Yapın: 53 Adım (Resimlerle)
Kendi Bağlantılı Isıtma Termostatınızı Yapın ve Isıtma İle Tasarruf Edin: Amacı Nedir? Evinizi tam istediğiniz gibi ısıtarak konforu artırın Evinizi sadece ihtiyaç duyduğunuzda ısıtarak tasarruf edin ve sera gazı emisyonlarını azaltın Nerede olursanız olun ısıtmanızı kontrol altında tutun Bunu yaptığınız için gurur duyun
Kağıt Koruyucu: Şok Tedavisi ile Tuvalet Kağıdından Tasarruf Edin: 4 Adım
Kağıt Koruyucu: Şok Terapi ile Tuvalet Kağıdından Tasarruf Edin: Hepimiz bakkaldaki boş rafları gördük ve bir süreliğine tuvalet kağıdı sıkıntısı olacak gibi görünüyor. Erken stok yapmadıysan muhtemelen benim içinde bulunduğum durumdasın. 6 kişilik bir evim var ve dayanacak sadece birkaç rulo var
Hava Durumu İstasyonu: ESP8266, Derin Uyku, SQL, Flask&Plotly ile Grafik Oluşturma: 3 Adım
Hava Durumu İstasyonu: ESP8266 Derin Uyku, SQL, Flask&Plotly ile Grafik Oluşturma: Balkonunuzdaki sıcaklık, nem veya ışık yoğunluğunu bilmek eğlenceli olur mu? Yapacağımı biliyorum. Bu tür verileri toplamak için basit bir hava durumu istasyonu yaptım. Aşağıdaki bölümler, bir tane oluşturmak için attığım adımlardır. Haydi başlayalım
Sıcaklık ve Pil Seçimi ile Pil Kontrolü: 23 Adım (Resimlerle)
Sıcaklık ve Batarya Seçimli Batarya Kontrol Cihazı: Batarya kapasite test cihazı. Bu cihaz ile 18650 batarya, asit ve diğer (test ettiğim en büyük batarya 6v Asit batarya 4,2A) kapasitesini kontrol edebilirsiniz. Testin sonucu miliamper/saat cinsindendir. Bu cihazı kontrol etmesi gerektiği için yarattım
Kendin Yap Boyutlandır ve Pil Gücü Yedekleme Jeneratörü W/12V Derin Döngü Piller: 5 Adım (Resimlerle)
Kendin Yap Boyutlandır ve Pil Gücü Yedekleme Jeneratörü W/12V Derin Döngü Piller: ***NOT: Piller ve elektrikle çalışırken dikkatli olun. Pilleri kısa devre yapmayın. Yalıtımlı aletler kullanın. Elektrikle çalışırken tüm güvenlik kurallarına uyun.*** Bekleyen bir pil gücüyle bir dahaki sefere elektrik kesilmeden önce hazırlıklı olun