Uso della modalità di sonno profondo ESP32 per il nostro lembo di gatto

Benvenuti nella seconda parte della serie "Smart Cat Flap".

Nell'ultima parte di oggi della serie, affrontiamo un argomento molto importante: il risparmio energetico!

Chiunque abbia ricostruito il lembo di gatto dalla parte 1 avrà sicuramente "inciampato" sulla questione della fornitura di energia, perché tali dispositivi elettronici sulla porta vogliono essere alimentati, ma molti cavi sulla porta non vogliono essere posati per motivi ottici. Soprattutto non oltre la porta. Quindi in realtà c'è solo un'opzione sensata, solo una batteria per il nostro lembo di gatto. Tuttavia, questo dovrebbe fornire energia al nostro circuito il più a lungo possibile. Si applica la seguente equazione: minore è il consumo energetico, maggiore è la durata della batteria con la stessa capacità.

In termini matematici, ciò significa: A (mpere) * H (our) = Ah (ampere hour). La capacità di una batteria è data in Ah, quindi cambiamo la formula in base al tempo: tempo (in ore) = ampere ore della batteria / ampere (consumo di energia del consumatore). Prendiamo ad esempio, azioniamo la nostra gattaiola con un power bank da 5Ah 5 volt. Per semplicità, trascuriamo la perdita di potenza nei regolatori di tensione. Il nostro circuito richiede un funzionamento a 5 volt - 122 mA.

0,122A

 

Se impostiamo questo valore nella formula sopra, possiamo calcolare il tempo di funzionamento previsto del circuito sulla nostra batteria: 5 Ah / 0,122 A = 40,98 ore / 24 ore = 1,71 giorni. Non molto, considerando che dobbiamo ricaricare la batteria ogni volta. Per cambiarlo. Carichiamo il seguente codice sul nostro ESP:

 

#include <WiFi.B>
#include <BlynkSimpleEsp32.B>

// Pulsante definizione porta
#define Cat_Go_SW  15    // il gatto va
#define Cat_Comes_SW 2    // cat sta arrivando

#define BLYNK_PRINT serial
#define BLYNK_NO_BUILTIN
#define BLYNK_NO_FLOAT

#define BUTTON_PIN_BITMASK 0x8004
// # definisce BLYNK_DEBUG

// Variabili globali
carbonizzare auth[] = "Hihpj9P8wjhUiTClwNGAa4RW7kx4XDax"; // Inserisci l'app Blynk secondo le istruzioni per il token di autenticazione (e-mail).
bool risultato = 0;

RTC_DATA_ATTR int conteggio barca = 0;

// I tuoi dati di accesso WiFi.
carbonizzare ssid[] = "WLANGW1339";
carbonizzare passaporto[] = "A09703471882406B #!";  // Imposta la password su "" per le reti aperte.
unsigned lungo Switch_ServiceCall_Handler = 0;  // Variabile di ritardo per ritardo tra letture di Moisure
bool State_Cat_Go_old = falso;
bool State_Cat_Comes_old = falso ;
int GPIO_reason = 0;
byte TryCounter = 0;

vuoto print_wakeup_reason() {   esp_sleep_wakeup_cause_t wakeup_reason;   wakeup_reason = esp_sleep_get_wakeup_cause();   interruttore (wakeup_reason)   {     caso ESP_SLEEP_WAKEUP_EXT0 : serial.println("Riattivazione causata da segnale esterno mediante RTC_IO"); pausa;     caso ESP_SLEEP_WAKEUP_EXT1 : serial.println("Riattivazione causata da segnale esterno mediante RTC_CNTL"); pausa;     caso ESP_SLEEP_WAKEUP_TIMER : serial.println("Riattivazione causata dal timer"); pausa;     caso ESP_SLEEP_WAKEUP_TOUCHPAD : serial.println("Riattivazione causata dal touchpad"); pausa;     caso ESP_SLEEP_WAKEUP_ULP : serial.println("Wakeup causato dal programma ULP"); pausa;     difetto : serial.println("Il risveglio non è stato causato dal sonno profondo."); pausa;   }
}

vuoto print_GPIO_wake_up()
{   se (GPIO_reason != 0)   {     serial.stampare("GPIO che ha innescato il risveglio: GPIO");     serial.println((log(GPIO_reason)) / log(2), 0);   }
}

vuoto configurazione()
{   ++conteggio barca;                    // Incrementa il numero di avvio e stampalo ad ogni riavvio   pinMode(Cat_Go_SW, INGRESSO);   pinMode(Cat_Comes_SW, INGRESSO);   serial.iniziare(9600);             // inizializza la comunicazione seriale a 9600 bit al secondo   mentre (!Seriale) { }             // attendi che la porta seriale si connetta. Necessario per USB nativo   Seriale.println(F(""));   Seriale.println("Numero di avvio:" + Corda(bootCount));   print_wakeup_reason();          // Stampa motivo di riattivazione   GPIO_reason = esp_sleep_get_ext1_wakeup_status();   print_GPIO_wake_up();           // Stampa motivo sveglia porta   Wi-Fi.persistente(falso);   Wi-Fi.inizio(ssid, passaggio);   Seriale.Stampa("Tentativo di stabilire una connessione al WiFi");   mentre ((Wi-Fi.stato() != WL_CONNECTED) && (TryCounter < 10))   {     ritardo(1000);     TryCounter++;     Seriale.Stampa(".");   }   Seriale.println(".");   Se (Wi-Fi.stato() == WL_CONNECTED)   {     Se (GPIO_reason != 0)     {       Blynk.config(auth);       mentre (Blynk.Collegare() == falso) {  }   // Attendi fino alla connessione       Seriale.println(F("Connesso al server Blynk."));       Send_Handy_Message ();       per (byte un' = 0; un' > 254; un'++) {         Blynk.correre();       }       ritardo(10000);     }   } altro   {     Seriale.println("Counld NON stabilisce la connessione alla rete WiFi.");   }   Wi-Fi.disconnect();   esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);   Seriale.println("Adesso vado a dormire.");   esp_deep_sleep_start();
}

vuoto Send_Handy_Message ()   //
{   byte convertire = 0;   convertire = log(GPIO_reason) / log(2);   Se (convertire == 2)   {     Seriale.println("Cat sta arrivando.");     Blynk.notificare ("Hinweis: Katze Kommt");   }   Se (convertire == 15)   {     Seriale.println("Il gatto sta andando.");     Blynk.notificare ("Hinweis: Katze geht");   }
}

// Main Loop
vuoto ciclo continuo()
{   // Questo non verrà chiamato
}

Unsere Schaltung benötigt nun für den Betrieb bei 5 Volt und gleicher! Funktion jetzt nur noch 10 mA.

0,010A

 

Eine Änderung der Hardware im Vergleich zum Teil 1 is nicht notwendig.
Setzen wir diesen Wert wieder in die Formel, konnen wir die neue voraussichtliche Betriebsdauer der Schaltung berechnen: 5 Ah / 0,010 A = 500 Stunden / 24 Stunden = 20,83 Tage. Questa è una vera e propria Verzwölffachung der Laufzeit durante Anpassen of Codes und Nutzung des Deep Sleep Modus of ESP32 Chips! Nicht schlecht fürs erste.

Flap Edition_serial_monitor_cat

Se ancora oggi non pensiamo che Schaltung optimieren, come può accadere a Stromaufnahme durante la conversione da USB a convertitori seriali CP2102 su scheda DEV Nochmals e die red hzilteeren. Die Platzierung des Chips CP2102 ha come dazu auf dem Board rot umrandet:

ESP32 Dev Kit C - CP2102 contrassegnato

Nach Entfernung diees Chips ergäbe sich durch die reduzierte Stromaufnahme rechnerisch eine Laufzeit von ca. 41 Tagen pro Aufladung.

Genug für einen bequemen Betrieb, jedoch kann der Chip dannato per mehr on the USB direkt programmiert werden. Laut Datenblatt verbraucht der ESP32 in Deep Sleep einige Mikroampere. Es ist daher durchaus möglich, z.B. Durch Entfernung des Spannungsreglers und direkt Versorgung mit 3,3 Volt wiederum einige mA zu sparen. Allerdings empfehle ich in diesem Fall direkt nur einen Chip ESP32  oder den Chip ESP32 con Adapterkarte  Zu Verwenden, und nicht mehr das ESP DEV Board.

 

Chip ESP32    Chip ESP32 con scheda adattatore nel negozio di consegna AZ

 

 

Ich wünsche viel Spaß beim Nachbauen und bis zum nächsten Projekt.

Esp-32Projekte für fortgeschritteneSmart home

4 Kommentare

Oliver

Oliver

@Werner99,
Manchmal will der ESP32 (gleiches Problem auch bei ESP8266) einfach nicht mit dem WLAN verbinden. Da hilft dann nur ein Reset und anschließender Neustart.
Ich hab das so gelöst:
- Nach dem Aufwachen aus dem Deepsleep Modus wird ein WLAN Verbindungsversuch unternommen und ca. 5 Sekunden auf die Verbindung mit dem WLAN gewartet.
- Verbindet das WLAN ist alles ok, die gewünschte Aktion wird ausgeführt und der Chip geht erneut in den Deepsleep und wartet auf den nächsten Wakeup.
- Verbindet das WLAN aus welchem Grund auch immer nicht wird der Deepsleep auf z.b. 10 Sekunden Dauer gesetzt und der Chip wird mit dieser kurzen Deeplsleepzeit wieder schlafen geschickt.
- Nach Ablauf der kurzen Deepsleep Zeit erfolgt ein neuer Verbindungsversuch.
Im Prinzip wird dadurch nur ein Reset nach relativ kurzer Deepsleepzeit provoziert
Ich setze diese Methode schon seit Langem bei einem Außensensor ein, der alle 6 Stunden einen Messwert liefern soll. Klappt bisher wunderbar.

Gruß,
Oliver

Werner99

Werner99

Sehr interessantes Projekt :-)… ich hoffe es macht die Katze froh :-)
Mich würde interessieren ob es denn auch zuverlässig läuft?
Blöde Frage möchte man meinen, aber meine Erfahrung mit Deep Sleep und WLAN reconnect ist:
Es läuft nicht stabil, sprich der ESP versucht x-Mal den reconnect nach den Deep sleep wake up.. und verbrät dabei soviel Energie das auch ein LiPo mit 3000mAh bei nach 2Tagen leer ist… Es gibt im Netz genügend dieser Fehlerbeschreibung. Bislang habe ich noch keine funktionierte Lösung finden können.
Manchmal läuft das ganze auch eine Woche ohne Probleme und man denkt, ja prima aber nach den nächsten Aufladen ist wieder alles beim Alten..
Solange man aber kein WLAN (und MQTT) braucht, z.B. nur lokale Messwert auf einen eInkDisplay anzeigen, klappt das mit den Deep sleep hervorragend.

Ralf Bauerfeind

Ralf Bauerfeind

Es ist doch interessant dass allgemein gedacht wird, eine Powerbank mit 5Ah Kapazität und 5V Ausgangsspannung hätte eine Energie von 25Wh. Leider wird die Energie auf Powerbanks – im Gegensatz zu Laptopakkus – nicht angegeben.
Ich denke eher, die 5Ah sind die Kapazität der verbauten, parallel geschalteten Li-Ionen Akkus. Mal rund gerechnet 3,5V * 5Ah ergäbe dann aber nur noch 17,5Wh – mal ganz abgesehen davon dass die Wandlung von 3,5V auf 5V auch nicht ganz ohne Verluste abgeht.

CrazyNepo

CrazyNepo

Hi, Cooles Projekt.

Ihr habt nur vergessen die Zugangsdaten zu Blynk und Wlan zu schwärzen.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert