Nutzung des ESP32 Deep Sleep Modus für unsere Katzenklappe

Willkommen zum zweiten Teil der Reihe „Smarte Katzenklappe“.

Im heutigen, letzten Teil der Reihe gehen wir auf ein sehr wichtiges Thema ein: Energie sparen!

Wer die Katzenklappe aus Teil1 nachgebaut hat, wird sicherlich über die Frage der Energieversorgung „gestolpert“ sein, denn so eine Elektronik an der Tür möchte zwar mit Strom versorgt werden, doch viele Kabel an der Tür möchte man aus optischen Gründen nicht verlegen. Erst recht nicht quer über die Tür. Also bleibt eigentlich eine einzig sinnvolle Option nur eine Akkuversorgung für unsere Katzenklappe übrig. Diese sollte jedoch möglichst lange unsere Schaltung mit Strom versorgen. Dabei gilt die Gleichung: Je kleiner der Stromverbrauch, desto länger hält der Akku bei gleicher Kapazität.

Rechnerisch ausgedrückt heißt das: A(mpere)*H(our) = Ah (Amperestunde). Die Kapazität eines Akkus wird in Ah angegeben, daher stellen wir die Formel nach der Zeit um: Zeit (In Stunden) = Amperestunden des Akkus / Ampere (Stromaufnahme des Verbrauchers). Nehmen wir als Beispiel an, wir betreiben unsere Katzenklappe mit einer 5Ah 5 Volt Powerbank. Zur Einfachheit vernachlässigen wir die Verlustleistung an den Spannungsreglern. Unsere Schaltung benötigt für den Betrieb bei 5 Volt - 122 mA.

0,122A

 

Setzen wir diesen Wert in oben genannte Formel, können wir die voraussichtliche Betriebsdauer der Schaltung an unserem Akku berechnen: 5 Ah / 0,122 A = 40,98 Stunden / 24 Stunden = 1,71 Tage. Nicht viel, wenn man bedenkt, dass wir jedes Mal den Akku nach er Zeit neu aufladen müssen. Um dies zu ändern. Laden wir folgenden Code auf unseren ESP hoch:

 

#include <WiFi.h>
#include <BlynkSimpleEsp32.h>

// Portdefinierung Taster
#define Cat_Go_SW  15    // Katze geht
#define Cat_Comes_SW 2    // Katze kommt

#define BLYNK_PRINT Serial
#define BLYNK_NO_BUILTIN
#define BLYNK_NO_FLOAT

#define BUTTON_PIN_BITMASK 0x8004
//#define BLYNK_DEBUG

//Global Variables
char auth[] = "Hihpj9P8wjhUiTClwNGAa4RW7kx4XDax"; // Hier lt. Anleitung Auth Token dere Blynk App eintragen (E-Mail).
bool result = 0;

RTC_DATA_ATTR int bootCount = 0;

// Deine WiFi Zugangsdaten.
char ssid[] = "WLANGW1339";
char pass[] = "A09703471882406B#!";  // Set password to "" for open networks.
unsigned long Switch_ServiceCall_Handler = 0;  // Delay Variable for Delay between Moisure Readings
bool State_Cat_Go_old = false;
bool State_Cat_Comes_old = false ;
int GPIO_reason = 0;
byte TryCounter = 0;

void print_wakeup_reason() {
  esp_sleep_wakeup_cause_t wakeup_reason;
  wakeup_reason = esp_sleep_get_wakeup_cause();
  switch (wakeup_reason)
  {
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.println("Wakeup was not caused by deep sleep."); break;
  }
}

void print_GPIO_wake_up()
{
  if (GPIO_reason != 0)
  {
    Serial.print("GPIO that triggered the wake up: GPIO ");
    Serial.println((log(GPIO_reason)) / log(2), 0);
  }
}

void setup()
{
  ++bootCount;                    //Increment boot number and print it every reboot
  pinMode(Cat_Go_SW, INPUT);
  pinMode(Cat_Comes_SW, INPUT);
  Serial.begin(9600);             // initialize serial communication at 9600bits per second
  while (!Serial) { }             // wait for serial port to connect. Needed for native USB
  Serial.println(F(""));
  Serial.println("Boot number: " + String(bootCount));
  print_wakeup_reason();          //Print wakeup Reason
  GPIO_reason = esp_sleep_get_ext1_wakeup_status();
  print_GPIO_wake_up();           //Print wakeup Reason Port
  WiFi.persistent(false);
  WiFi.begin(ssid, pass);
  Serial.print("Trying to establishing connection to WiFi");
  while ((WiFi.status() != WL_CONNECTED) && (TryCounter < 10))
  {
    delay(1000);
    TryCounter++;
    Serial.print(".");
  }
  Serial.println(".");
  if (WiFi.status() == WL_CONNECTED)
  {
    if (GPIO_reason != 0)
    {
      Blynk.config(auth);
      while (Blynk.connect() == false) {  }   // Wait until connected
      Serial.println(F("Connected to Blynk Server."));
      Send_Handy_Message ();
      for (byte a = 0; a > 254; a++) {
        Blynk.run();
      }
      delay(10000);
    }
  } else
  {
    Serial.println("Counld NOT establish Connection to WiFi Network.");
  }
  WiFi.disconnect();
  esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);
  Serial.println("Going to sleep now.");
  esp_deep_sleep_start();
}

void Send_Handy_Message ()   //
{
  byte convert = 0;
  convert = log(GPIO_reason) / log(2);
  if (convert == 2)
  {
    Serial.println("Cat is coming.");
    Blynk.notify ("Hinweis: Katze Kommt");
  }
  if (convert == 15)
  {
    Serial.println("Cat is going.");
    Blynk.notify ("Hinweis: Katze geht");
  }
}

// Main Loop
void loop()
{
  //This is not going to be called
}

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. Das ist eine Verzwölffachung der Laufzeit durch Anpassen des Codes und Nutzung des Deep Sleep Modus des ESP32 Chips! Nicht schlecht fürs erste.

Ausgabe_Serieller_Monitor_Katzenklappe

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 markiert

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. 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 ESP32 Chip oder den ESP32 Chip mit Adapterkarte zu verwenden, und nicht mehr das ESP DEV Board.

 

ESP32 Chip    ESP32 Chip mit Adapterkarte im AZ-Delivery Shop

 

 

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

Letzter Artikel Selbstgebautes VU-Meter
Neuer Artikel Instant-Messenger für ESPs und Arduinos - Teil 2

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe