Gebruik van de ESP32 Deep Sleep-modus voor onze kattenflap

Welkom bij het tweede deel van de serie "Smart Cat Flap".

In het laatste deel van vandaag gaan we in op een heel belangrijk onderwerp: energie besparen!

Iedereen die de kattenluik uit deel 1 heeft herbouwd, zal zeker zijn "gestruikeld" over de kwestie van energietoevoer, omdat dergelijke elektronica op de deur wel van stroom wil worden voorzien, maar veel kabels op de deur willen om optische redenen niet worden gelegd. Vooral niet tegenover de deur. Er is dus eigenlijk maar één verstandige optie, alleen een batterijvoeding voor onze kattenluik. Dit moet ons circuit echter zo lang mogelijk van stroom voorzien. De volgende vergelijking is van toepassing: hoe lager het stroomverbruik, hoe langer de batterij meegaat met dezelfde capaciteit.

In wiskundige termen betekent dit: A (mpere) * H (onze) = Ah (ampère uur). De capaciteit van een batterij wordt gegeven in Ah, dus we veranderen de formule volgens de tijd: Tijd (in uren) = ampère-uren van de batterij / ampère (stroomverbruik door de consument). Laten we als voorbeeld nemen, we bedienen onze kattenluik met een 5Ah 5 volt powerbank. Voor de eenvoud negeren we het vermogensverlies bij de spanningsregelaars. Ons circuit vereist werking op 5 volt - 122 mA.

0.122A

 

Als we deze waarde instellen in de bovenstaande formule, kunnen we de verwachte bedrijfstijd van het circuit op onze batterij berekenen: 5 Ah / 0,122 A = 40,98 uur / 24 uur = 1,71 dagen. Niet veel, gezien het feit dat we de batterij elke keer moeten opladen. Om dat te veranderen. Laten we de volgende code uploaden naar onze ESP:

 

# opnemen <WiFi.h>
# opnemen <BlynkSimpleEsp32.h>

// Poortdefinitieknop
#define Cat_Go_SW  15    // kat gaat
#define Cat_Comes_SW 2    // kat komt eraan

#define BLYNK_PRINT Serie
#define BLYNK_NO_BUILTIN
#define BLYNK_NO_FLOAT

#define BUTTON_PIN_BITMASK 0x8004
// # definieer BLYNK_DEBUG

// Globale variabelen
char auth[] = "Hihpj9P8wjhUiTClwNGAa4RW7kx4XDax"; // Voer de Blynk-app in volgens de instructies voor het Auth Token (e-mail).
dwaas resultaat = 0;

RTC_DATA_ATTR int bootCount = 0;

// Uw wifi-toegangsgegevens.
char ssid[] = "WLANGW1339";
char doorgeven[] = "A09703471882406B #!";  // Stel wachtwoord in op "" voor open netwerken.
niet ondertekend lang Switch_ServiceCall_Handler = 0;  // Vertragingsvariabele voor vertraging tussen metingen van de vrije tijd
dwaas State_Cat_Go_old = fout;
dwaas State_Cat_Comes_old = fout ;
int GPIO_reason = 0;
byte TryCounter = 0;

nietig print_wakeup_reason() {   esp_sleep_wakeup_cause_t wakeup_reason;   wakeup_reason = esp_sleep_get_wakeup_cause();   schakelaar (wakeup_reason)   {     geval ESP_SLEEP_WAKEUP_EXT0 : Serie.println("Wakeup veroorzaakt door extern signaal met RTC_IO"); pauze;     geval ESP_SLEEP_WAKEUP_EXT1 : Serie.println("Wakeup veroorzaakt door extern signaal met RTC_CNTL"); pauze;     geval ESP_SLEEP_WAKEUP_TIMER : Serie.println("Wakker worden door timer"); pauze;     geval ESP_SLEEP_WAKEUP_TOUCHPAD : Serie.println("Wakeup veroorzaakt door touchpad"); pauze;     geval ESP_SLEEP_WAKEUP_ULP : Serie.println("Wakeup veroorzaakt door ULP-programma"); pauze;     standaard : Serie.println("Wakeup werd niet veroorzaakt door diepe slaap."); pauze;   }
}

nietig print_GPIO_wake_up()
{   als (GPIO_reason != 0)   {     Serie.afdrukken("GPIO die de wake-up heeft geactiveerd: GPIO");     Serie.println((gelogen(GPIO_reason)) / gelogen(2), 0);   }
}

nietig instellen()
{   ++bootCount;                    // Verhoog het opstartnummer en druk het elke keer opnieuw af   pinMode(Cat_Go_SW, INGANG);   pinMode(Cat_Comes_SW, INGANG);   Serie.beginnen(9600);             // initialiseer seriële communicatie met 9600 bits per seconde   terwijl (!Serie) { }             // wacht tot seriële poort verbinding maakt. Nodig voor native USB   Serie.println(F(""));   Serie.println("Boot nummer:" + Draad(bootCount));   print_wakeup_reason();          // Print wake-up reden   GPIO_reason = esp_sleep_get_ext1_wakeup_status();   print_GPIO_wake_up();           // Print wakeup Reason Port   Wifi.aanhoudend(fout);   Wifi.beginnen(ssid, voorbij gaan aan);   Serie.afdrukken("Proberen verbinding tot stand te brengen met WiFi");   terwijl ((Wifi.toestand() != WL_CONNECTED) && (TryCounter < 10))   {     vertraging(1000);     TryCounter++;     Serie.afdrukken(".");   }   Serie.println(".");   als (Wifi.toestand() == WL_CONNECTED)   {     als (GPIO_reason != 0)     {       Blynk.config(auth);       terwijl (Blynk.aansluiten() == fout) {  }   // Wacht tot verbinding       Serie.println(F("Verbonden met Blynk Server."));       Send_Handy_Message ();       voor (byte een = 0; een > 254; een++) {         Blynk.rennen();       }       vertraging(10000);     }   } anders   {     Serie.println("Raad GEEN verbinding met WiFi-netwerk tot stand.");   }   Wifi.verbinding verbreken();   esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);   Serie.println("Nu gaan slapen.");   esp_deep_sleep_start();
}

nietig Send_Handy_Message ()   //
{   byte converteren = 0;   converteren = logboek(GPIO_reason) / logboek(2);   als (converteren == 2)   {     Serie.println("Kat komt eraan.");     Blynk.melden ("Hinweis: Katze Kommt");   }   als (converteren == 15)   {     Serie.println("Cat gaat.");     Blynk.melden ("Hinweis: Katze geht");   }
}

// Hoofdlus
nietig lus()
{   // Dit wordt niet genoemd
}

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 ist nicht notwendig.
Setzen wir diesen Wert wieder in die Formel, können wir die neue voraussichtliche Betriebsdauer der Schaltung berechnen: 5 Ah / 0,010 A = 500 Stunden / 24 Stunden = 20,83 Tage. Dit is een Verzorgingssoftware van Anpass des Codes en Nutzung des Deep Sleep Modus des ESP32 Chips! Nicht schlecht fürs erste.

Edition_serial_monitor_cat flap

Wer jedoch noch weiter seine Schaltung optimieren will, kann die Stromaufnahme durch Entfernung des USB- to Serial Converters CP2102 auf dem DEV Board nochmals um die Hälfte reduzieren. Die Platzierung des Chips CP2102 habe ich dazu auf dem Board rot umrandet:

ESP32 Dev Kit C - CP2102 gemarkeerd

Nach Entfernung dieses 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 dann nicht mehr über USB direkt programmiert werden. Laut Datenblatt verbraucht der ESP32 im Deep Sleep einige Mikroampere. Es ist daher durchaus möglich, z.B. door Entfernung des Spannungsreglers und direkt Versorgung mit 3,3 Volt wiederum einige mA zu sparen. Allerdings empfehle ich in diesem Fall direkt nur einen ESP32-chip  oder den ESP32 Chip mit Adapterkarte  zu verwenden, und nicht mehr das ESP DEV Board.

 

ESP32-chip    ESP32-chip met adapterkaart in de AZ-leveringswinkel

 

 

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

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi