INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ESP32 / DeepSleep / Akkulaufzeit ?
24.02.2021, 20:24
Beitrag #1
ESP32 / DeepSleep / Akkulaufzeit ?
Nabend,

Ich habe einen ESP32, verbunden mit einen BME280 Temperatursensor, an ein Battery Expansion Shield gehängt um halt per Akku Versorgung Temperaturdaten auf zu nehmen.

https://www.az-delivery.de/products/batt...-usb-kabel

Das Sketch lässt den ESP32 alle 15min aus dem DeepSleep erwachen:

-> Verbindung mit WLAN + MQTT
-> Daten messen
-> Daten per MQTT senden
-> wieder runter fahren

Das funktioniert auch so weit, nur ebend ist nach max drei Tagen der Akku leer :-(

Bei der Fehlersuche habe ich zuerst den Akku gemessen. Wenn ich das Multimeter richtig bedient habe zeigt er nach dem Ladevorgang jedesmal so um die 4,12 V an, ist die onBoard LED nach ca. drei Tagen erloschen sind es so um die 2,8 V.

Bestellt hatte ich bei Amazon "kraftmax 2er Pack 18650er Pro Akku mit PCB Schutzschaltung (3,7V / 9,62 Wh" geliefert wurden aber 18700er Akkus, was ich zu spät bemerkte.... Bei Amazon sind beide Produkte nicht mehr aufrufbar, aber bei "kraftmax" habe ich einen Link gefunden.

https://kraftmax.eu/akkus/lithium-akkus/...nlamp?c=61

Hat jemand ne Idee zu meinen Fragen? :

Ist mein Problem der 18700er Akku und das 18650er Battery Shield?
Ist das normal das nach ca. 250 Bootvorgängen der Akku leer ist?
Liegt es an der roten onBoard LED die auf dem ESP32 immer leuchtet?
Ist an meinem Sketch irgendwas grundlegend falsch?
Habe ich was anderes übersehen?

Danke fürs lesen und anbei noch mein aktuelles Sketch:

Code:
/*
* ESP32
* PROD Sketch für Umweltdaten Bad
* ESP32 wird in DeepSleep versetzt, wacht nach xxxx Sekunden wieder auf, erfasst Daten, sendet diese an MQTT, wieder DeepSleep
*/

#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

#define uS_TO_S_FACTOR 1000000ULL     /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  900           /* Time ESP32 will go to sleep (in seconds) */

const char* ssid              = "xxx";
const char* password          = "xxx";
const char* mqtt_server       = "192.168.xxx.xxx";
const char* topic             = "esp/test";
const char* MQTT_statustopic  = "esp32/status";
const int   STATUS_RATE       = 60000;
const int mqttPort            = 1883;
const char* mqttUser          = "xxx";
const char* mqttPassword      = "xxx";


WiFiClient espClient;                                 // WiFi-Client Objekt
PubSubClient mqtt_client_no17(espClient);             // PubSubClient Objekt

Adafruit_BME280 bme; // I2C
float temperature = 0;
float humidity = 0;
float pressure = 0;

uint abbortCnt = 0;   // counter für Reboot

RTC_DATA_ATTR int bootCount = 0;

//---------------------------------------------------
void WiFiInit(void) {
  delay(10);                                      // Kurze Pause
  Serial.print("\n\nVerbindungsaufnahem zu: ");
  Serial.println(ssid);                           // Ausgabe SSID
  WiFi.begin(ssid, password);                     // WiFi starten
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    abbortCnt++;
    if(abbortCnt >= 60)ESP.restart();
  }
  Serial.println("\nMit WiFi verbunden");
  Serial.print("IP Adresse: ");
  Serial.println(WiFi.localIP());                 // Ausgabe IP-Adresse
}
//---------------------------------------------------
void reconnect(void) {
  while (!mqtt_client_no17.connected()) {
    Serial.print("Starte MQTT-Verbindung...");
    if (mqtt_client_no17.connect("ESPClient", mqttUser, mqttPassword)) {
      Serial.println("verbunden als No: 17 Bad");
      mqtt_client_no17.setBufferSize(2048);                                      
      mqtt_client_no17.publish(MQTT_statustopic, "ESP32_no17 Bad ist Verbunden!");   // Kurzes Lebenszeichen
      
    }
      else {
      Serial.print("Fehler, rc=");
      Serial.print(mqtt_client_no17.state());
      Serial.println(" versuche es in 5 Sekunden erneut");
      delay(5000);                                                          // 5 Sekunden Pause vor neuer Versuch
    }
  }
}
//---------------------------------------------------
//----deepsleep----
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_TIMER : Serial.println("Wakeup caused by timer"); break;
    default : Serial.printf("Wakeup Grund war nicht deep sleep: %d\n",wakeup_reason); break;
    }  
}
//----deepsleep----

void setup(){
  
  Serial.begin(115200);
  delay(1000);

//----deepsleep----
    ++bootCount;
    Serial.println("Boot number: " + String(bootCount));
    print_wakeup_reason();
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
    Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +" Seconds");
//----deepsleep----

    if (!bme.begin(0x76)) {
    Serial.println("keinen aktiven BME280 Sensor, Verkabelung pruefen!");
    while (1);
    }

  WiFiInit();                                             // Init WiFi
  mqtt_client_no17.setServer(mqtt_server, 1883);           // Verbindung mit MQTT Server  
  if (!mqtt_client_no17.connected()) { reconnect(); }
    
    Serial.println("---------");

    temperature = bme.readTemperature();  
    
    // Convert the value to a char array
    char tempString[8];
    dtostrf(temperature, 1, 2, tempString);
    Serial.print("Temperature: ");
    Serial.println(tempString);
    mqtt_client_no17.publish("bad/bme280/temperature", tempString);

    humidity = bme.readHumidity();
    
    // Convert the value to a char array
    char humString[8];
    dtostrf(humidity, 1, 2, humString);
    Serial.print("Humidity: ");
    Serial.println(humString);
    mqtt_client_no17.publish("bad/bme280/humidity", humString);

    pressure = bme.readPressure ()/ 100.0;    // wegen Kommastelle: durch 100 teilen

    // Convert the value to a char array
    char presString[6];
    dtostrf(pressure, 1, 2, presString);
    Serial.print("Pressure: ");
    Serial.println(presString);
    mqtt_client_no17.publish("bad/bme280/pressure", presString);
        



//----deepsleep----
    Serial.println("Going to sleep now");
    Serial.flush();
    esp_deep_sleep_start();
    Serial.println("This will never be printed");
//----deepsleep----    
}

void loop(){
  //+leer+
}

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2021, 20:54
Beitrag #2
RE: ESP32 / DeepSleep / Akkulaufzeit ?
Ich vermute mal dass das Problem in der Hardwareauswahl liegt.

Die Doku zum "Battery Expansion Shield" gibt leider nicht viel her. Wahrscheinlich sind darauf zwei Spannungsregler verbaut, einer für 3V und einer für 5V. Beide brauchen ständig Strom wenn das Teil eingeschaltet ist.

Ich weiß auch nicht welchen ESP32 Du verwendest. Wahrscheinlich ein Dev. Board mit eigenem Spannungsregler. Auch der braucht ständig Strom und die rote LED ebenso.

In Summe braucht deshalb vermutlich diese ständige Grundlast über die Zeit gesehen viel mehr Strom als der ESP32 der meist schläft.

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2021, 22:00
Beitrag #3
RE: ESP32 / DeepSleep / Akkulaufzeit ?
Moin,
(24.02.2021 20:54)ardu_arne schrieb:  Ich vermute mal dass das Problem in der Hardwareauswahl liegt.
[...]
Ich weiß auch nicht welchen ESP32 Du verwendest.
[...]

An die Sache mit dem Spannungsregler habe ich bisher nicht gedacht.
Mein ESP32 ist ein "ESP32 Dev Kit C V4", also mit eigenem Regler...

Weißt Du welche Hardware sinnvoll wäre um ein BME280 per Akku zu betreiben?

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2021, 22:02
Beitrag #4
RE: ESP32 / DeepSleep / Akkulaufzeit ?
(24.02.2021 20:24)Steinspiel schrieb:  Nabend,

Ich habe einen ESP32, verbunden mit einen BME280 Temperatursensor, an ein Battery Expansion Shield gehängt um halt per Akku Versorgung Temperaturdaten auf zu nehmen.

https://www.az-delivery.de/products/batt...-usb-kabel

Das Sketch lässt den ESP32 alle 15min aus dem DeepSleep erwachen:

-> Verbindung mit WLAN + MQTT
-> Daten messen
-> Daten per MQTT senden
-> wieder runter fahren

Das funktioniert auch so weit, nur ebend ist nach max drei Tagen der Akku leer :-(

Bei der Fehlersuche habe ich zuerst den Akku gemessen. Wenn ich das Multimeter richtig bedient habe zeigt er nach dem Ladevorgang jedesmal so um die 4,12 V an, ist die onBoard LED nach ca. drei Tagen erloschen sind es so um die 2,8 V.

Bestellt hatte ich bei Amazon "kraftmax 2er Pack 18650er Pro Akku mit PCB Schutzschaltung (3,7V / 9,62 Wh" geliefert wurden aber 18700er Akkus, was ich zu spät bemerkte.... Bei Amazon sind beide Produkte nicht mehr aufrufbar, aber bei "kraftmax" habe ich einen Link gefunden.

https://kraftmax.eu/akkus/lithium-akkus/...nlamp?c=61

Hat jemand ne Idee zu meinen Fragen? :

Ist mein Problem der 18700er Akku und das 18650er Battery Shield?
Ist das normal das nach ca. 250 Bootvorgängen der Akku leer ist?
Liegt es an der roten onBoard LED die auf dem ESP32 immer leuchtet?
Ist an meinem Sketch irgendwas grundlegend falsch?
Habe ich was anderes übersehen?

Danke fürs lesen und anbei noch mein aktuelles Sketch:

Code:
/*
* ESP32
* PROD Sketch für Umweltdaten Bad
* ESP32 wird in DeepSleep versetzt, wacht nach xxxx Sekunden wieder auf, erfasst Daten, sendet diese an MQTT, wieder DeepSleep
*/

#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

#define uS_TO_S_FACTOR 1000000ULL     /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  900           /* Time ESP32 will go to sleep (in seconds) */

const char* ssid              = "xxx";
const char* password          = "xxx";
const char* mqtt_server       = "192.168.xxx.xxx";
const char* topic             = "esp/test";
const char* MQTT_statustopic  = "esp32/status";
const int   STATUS_RATE       = 60000;
const int mqttPort            = 1883;
const char* mqttUser          = "xxx";
const char* mqttPassword      = "xxx";


WiFiClient espClient;                                 // WiFi-Client Objekt
PubSubClient mqtt_client_no17(espClient);             // PubSubClient Objekt

Adafruit_BME280 bme; // I2C
float temperature = 0;
float humidity = 0;
float pressure = 0;

uint abbortCnt = 0;   // counter für Reboot

RTC_DATA_ATTR int bootCount = 0;

//---------------------------------------------------
void WiFiInit(void) {
  delay(10);                                      // Kurze Pause
  Serial.print("\n\nVerbindungsaufnahem zu: ");
  Serial.println(ssid);                           // Ausgabe SSID
  WiFi.begin(ssid, password);                     // WiFi starten
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    abbortCnt++;
    if(abbortCnt >= 60)ESP.restart();
  }
  Serial.println("\nMit WiFi verbunden");
  Serial.print("IP Adresse: ");
  Serial.println(WiFi.localIP());                 // Ausgabe IP-Adresse
}
//---------------------------------------------------
void reconnect(void) {
  while (!mqtt_client_no17.connected()) {
    Serial.print("Starte MQTT-Verbindung...");
    if (mqtt_client_no17.connect("ESPClient", mqttUser, mqttPassword)) {
      Serial.println("verbunden als No: 17 Bad");
      mqtt_client_no17.setBufferSize(2048);                                      
      mqtt_client_no17.publish(MQTT_statustopic, "ESP32_no17 Bad ist Verbunden!");   // Kurzes Lebenszeichen
      
    }
      else {
      Serial.print("Fehler, rc=");
      Serial.print(mqtt_client_no17.state());
      Serial.println(" versuche es in 5 Sekunden erneut");
      delay(5000);                                                          // 5 Sekunden Pause vor neuer Versuch
    }
  }
}
//---------------------------------------------------
//----deepsleep----
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_TIMER : Serial.println("Wakeup caused by timer"); break;
    default : Serial.printf("Wakeup Grund war nicht deep sleep: %d\n",wakeup_reason); break;
    }  
}
//----deepsleep----

void setup(){
  
  Serial.begin(115200);
  delay(1000);

//----deepsleep----
    ++bootCount;
    Serial.println("Boot number: " + String(bootCount));
    print_wakeup_reason();
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
    Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +" Seconds");
//----deepsleep----

    if (!bme.begin(0x76)) {
    Serial.println("keinen aktiven BME280 Sensor, Verkabelung pruefen!");
    while (1);
    }

  WiFiInit();                                             // Init WiFi
  mqtt_client_no17.setServer(mqtt_server, 1883);           // Verbindung mit MQTT Server  
  if (!mqtt_client_no17.connected()) { reconnect(); }
    
    Serial.println("---------");

    temperature = bme.readTemperature();  
    
    // Convert the value to a char array
    char tempString[8];
    dtostrf(temperature, 1, 2, tempString);
    Serial.print("Temperature: ");
    Serial.println(tempString);
    mqtt_client_no17.publish("bad/bme280/temperature", tempString);

    humidity = bme.readHumidity();
    
    // Convert the value to a char array
    char humString[8];
    dtostrf(humidity, 1, 2, humString);
    Serial.print("Humidity: ");
    Serial.println(humString);
    mqtt_client_no17.publish("bad/bme280/humidity", humString);

    pressure = bme.readPressure ()/ 100.0;    // wegen Kommastelle: durch 100 teilen

    // Convert the value to a char array
    char presString[6];
    dtostrf(pressure, 1, 2, presString);
    Serial.print("Pressure: ");
    Serial.println(presString);
    mqtt_client_no17.publish("bad/bme280/pressure", presString);
        



//----deepsleep----
    Serial.println("Going to sleep now");
    Serial.flush();
    esp_deep_sleep_start();
    Serial.println("This will never be printed");
//----deepsleep----    
}

void loop(){
  //+leer+
}


Schau doch mal in meinen Blog ckarduino2020.wordpress.com Da habe ich verschiedene Hardware diesbezüglich untersucht. Ein ePulse scheint mir sch mal ein guter Ansatz.

-- Aus dem Rheinwerk-Verlag: Arduino - Das umfassende Handbuch ISBN 978-3-8362-7345-9 --
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2021, 22:41 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2021 22:42 von Tommy56.)
Beitrag #5
RE: ESP32 / DeepSleep / Akkulaufzeit ?
(24.02.2021 22:02)ckuehnel schrieb:  Schau doch mal in meinen Blog ckarduino2020.wordpress.com Da habe ich verschiedene Hardware diesbezüglich untersucht. Ein ePulse scheint mir sch mal ein guter Ansatz.
Dafür musst Du aber nicht den gesamten vorherigen Beitrag zitieren. Das lässt Deinen Beitrag in der Textflut fast untergehen.

Gruß Tommy

Außerdem:

ckarduino2020.wordpress.com doesn’t exist

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2021, 23:01
Beitrag #6
RE: ESP32 / DeepSleep / Akkulaufzeit ?
(24.02.2021 22:41)Tommy56 schrieb:  [...]
ckarduino2020.wordpress.com doesn’t exist

https://ckarduino.wordpress.com/ war wohl gemeint, scheint mir...

und das Low Power Board habe ich hier gefunden:
https://ckarduino.wordpress.com/2020/04/...h-gelohnt/

Ob das Board auch mit der Arduino IDE programmierbar ist?

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2021, 23:10
Beitrag #7
RE: ESP32 / DeepSleep / Akkulaufzeit ?
Dann soll er seine Links ordentlich angeben.

Der Chip soll, wenn ein Board mit dem gleichen Chip von Arduino kommt, in der IDE programmierbar sein.
Wenn man allerdings auf das Datum des letzten "hourly builds" der Arduino IDE schaut (23 July 2020) werden wir da wohl keine größere Weiterentwicklung der IDE erwarten können.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.02.2021, 07:45
Beitrag #8
RE: ESP32 / DeepSleep / Akkulaufzeit ?
Moin,

(24.02.2021 23:10)Tommy56 schrieb:  [...]
auf das Datum des letzten "hourly builds" der Arduino IDE schaut (23 July 2020) werden wir da wohl keine größere Weiterentwicklung der IDE erwarten können.

Wie würde sowas ablaufen, auf ein Board, welches nicht von der Arduino IDE unterstützt wird, ein Programm auf zu spielen?

Haben sie keinen UART Baustein, braucht man einen USB - TTL Adapter um die Verbindung zum Rechner her zu stellen, oder? Aber welche Software würde man nehmen um das Sketch zu kompilieren/überspielen?

schönen Tag noch...

bis dann,
Steinspiel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 23 3.113 09.04.2021 16:15
Letzter Beitrag: amshh
  Suche Erfahrungen und Hilfe mit ESP32-CAM WiFi + Bluetooth Modul Kamera Modul esp32 Christian_Moba-Arduino 28 1.287 04.04.2021 08:24
Letzter Beitrag: amithlon
  ESP32 CAM Flashlamp schalten RaspiUser0815 13 2.971 28.03.2021 21:51
Letzter Beitrag: Grufti99
  ESP32-cam WAV´s einmalig auf GPI0 25/26 abspielen Sarastro 2 284 28.03.2021 10:45
Letzter Beitrag: Sarastro
  Led-Matrix 8x32 mit Esp32 Zerrus 5 361 27.03.2021 14:16
Letzter Beitrag: hotsystems
  Esp32 MD-Parola Scrolltext wwilhelm 3 286 26.03.2021 22:35
Letzter Beitrag: Tommy56
  ESP32 und Interrupts - ein Erfahrungsbericht - und eine Frage ;) MicroBahner 6 506 24.03.2021 09:18
Letzter Beitrag: MicroBahner
Brick Tiefgehende ESP32 Schnittstellen-Dokumentation gesucht Roland53425 6 684 22.03.2021 18:54
Letzter Beitrag: Bitklopfer
  Fehler beim Kompilieren für das Board ESP32 Dev Module. FoxFactoy 17 2.705 06.03.2021 21:56
Letzter Beitrag: bm-magic
Question esp32 Cam Blynk Busterflex 2 769 04.03.2021 19:23
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste