ESP8266 LoLin & BME280 -> Problem mit DeepSleep

Liebe Community,

ich habe schon die Suche genutzt aber irgendwie komme ich nicht weiter.
Ich nutze ein ESP8266 NodeMCU von LoLin in Verbindung mit einem BME280 Sensor.

Die Daten werden alle 15 Minuten vom BME geholt und dann nachdem eine WLAN Verbindung aufgebaut wurde via HTTP Request an ein PHP Script gesendet und weggespeichert. Das funktioniert soweit ganz prima.

Um Strom zu sparen, war der Plan den ESP in den DeepSleep Modus zu versetzen. Ich war auch der Meinung das funktioniert, denn er wacht ja schließlich alle 15 Min auf und versendet die Daten.
Komischerweise ist aber nach 3-4 Tagen ein 9V Block leer. Ich habe das oben beschriebene System 6 mal gebaut und bei allen das gleiche. Ich vermute ich habe im Programmcode irgendeinen Fehler.

RST ist mit D0 verbunden.
Der Strom aus dem 9V Block liegt an VIN und G an, wird auf der anderen Seite von 3V und G an den BME280 weitergegeben. Dieser ist dann noch über D1 und D2 verbunden.

Soviel zum Grundsetting.

Ich habe mal gemessen, am 3V Pin liegt permanent auch die Spannung an. Sollte das im DeepSleep auch so sein?

Ich poste mal den Code aus der Arduino IDE. Es wäre Klasse wenn vielleicht jemand von euch den Fehler finden würde. Wie gesagt, mit der Suche komme ich nicht weiter, da der Code ja generell funktioniert und es zu keinem Fehler kommt. Ich habe lediglich die Vermutung das DeepSleep nicht klappt, sonst wäre ja die Batterie nicht so schnell leer. ODER?

// Librarys laden
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

Adafruit_BME280 bme; // I2C

// WLAN Konfiguration
const char* ssid = “wlan_ssid”;
const char* password = “wlan_passwd”;

// Host für Datensammler
const char* host = “domain.tld”;
const char* client_desc = “1”;

String header;

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

// Ins WiFi Netzwerk verbinden

Serial.println();
Serial.println();
Serial.print("Verbinden zu Netzerk: ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println(“WiFi Verbunden”);
Serial.println("IP Adresse: ");
Serial.println(WiFi.localIP());

// Einstellungen für Sensor

//status = bme.begin();
if (!bme.begin(0x76)) {
Serial.println(“BME280 nicht gefunden, check wiring!”);
while (1);
}
}

//int value = 0;

void loop() {
delay(5000);
// ++value;

Serial.print("Verbinden zu: ");
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) { //works!
Serial.println(“Verbindung fehlgeschlagen”);
return;
}

// Url für Datensammler zusammenstellen
String url = “/wetterstation/reqData.php”;
url += “?temp=”;
url += bme.readTemperature();
url += “&druck=”;
url += bme.readPressure() / 100.0F;
url += “&hoehe=”;
url += bme.readAltitude(SEALEVELPRESSURE_HPA);
url += “&feuchte=”;
url += bme.readHumidity();
url += “&client_id=”;
url += client_desc;
delay(500);

Serial.print("Request URL: ");
Serial.println(url);

// Request zum Server senden
client.print(String("GET “) + url + " HTTP/1.1\r\n” +
"Host: " + host + “\r\n” +
“Connection: close\r\n\r\n”);

Serial.println();
Serial.println(“Verbindung schließen”);

Serial.begin(115200);
Serial.setTimeout(2000);

// Serial Initialisieren für Deep Sleep Modus
while(!Serial) { }

Serial.println(“Für 15 Minuten in Deep Sleep Modus”);
ESP.deepSleep(900000000); // 15 Min

Hallo,

mess mal die Stromaufnahme wenn der deep sleep aktiv sein soll . ich hab das mal so gemacht mit einem WemosD1 der brauchte dann noch 0,3mA etwa.

ein 9V Block hat etwa 600mAh. Wenn man das mal rechnet mit 0.3mA und 80mA alle 15 Miuten 15s aktiv kommt man etwa auf 15Tage.

Heinz

void ESP_sleep() {

  Serial.print ("gehe schlafen "); Serial.print(millis());
  WiFi.disconnect();
  delay(100);
  WiFi.mode(WIFI_OFF);

  WiFi.forceSleepBegin ();
  delay(1);
  ESP.deepSleep(60e6, WAKE_NO_RFCAL);
  //ESP.deepSleep(60e6);
  delay(1);
}

Hi

Ohne den ESP zu kennen - wenn Du an Vin eine Spannung anlegst, kommt dahinter der Spannungswandler, Der den Kram auf 5/3.3V bringt.
Dieser VERHEIZT Alles, was über der Zielspannung ist - wortwörtlich!
Wenn Dein µC also 3V haben will, werden 2/3tel der Batterieladung zum Heizen verwendet - im Winter vll. eine nette Idee, sonst aber eher blöd.
Auch ist hier noch keinerlei Logik involviert, Die Das unterbinden könnte, Die kommt erst auf der 5/3.3V-Seite - deshalb MUSS dieser Spannungswandler auch IMMER arbeiten.
Sind LEDs auf dem Bord verbaut? Die fressen nonstop Strom und das 2-fache davon verheizt der Spannungswandler (bei 3.3V) - knapp die Hälfte bei 5V.

Versuche Mal, einer der Schaltungen einen Schalt-Wandler (DC-DC-Konverter) vorzuschalten und Dessen Spannung an 5V/3.3V-Pin einzuspeisen - Das erspart Dir zumindest die Verluste am internen Spannungsregler, da Dieser Nichts mehr tun muß.

Zum Sleep:
Schläft denn auch der BME280?
Bringt Dir ja nucht so viel, wenn zwar der Master pennt, der Sensor aber fröhlich Daten erfasst.
Meine Spielereien mit dem BME280 sind schon ein paar Wochen her, auch wollte ich keinen Sleep benutzen, bin also unwissend, ob der BME280 ebenfalls schlafen kann, oder ob man Den ggf. per Pin schalten möchte (hier könnten Schutzdioden an den IC-Pins des BME die Sache verkomplizieren)

MfG

Guten Morgen zusammen und erstmal VIELEN DANK für die schnellen Antworten.

Ich habe das ganze soeben nochmal geprüft. der DeepSleep funktioniert anscheinend. Was aber während des DeepSleep das Problem darstellt, ist, dass der BME280 dauerhaft seine ca. 3V bekommt. Ich habe mal ein Messgerät an VI und GND des BME gehalten und siehe da. Spannung während DeepSleep. Also wird der Sensor auch dauerhaft messen und somit Strom verbraten.

Gibt es die Möglichkeit den 3V Pin am ESP auszuschalten? Oder hat eventuell jemand eine andere Idee wie man den BME280 stromlos bekommt?

Ich zitiere mal aus dem Datenblatt:

Current consumption
1.8 μA @ 1Hz humidity and temperature
2.8μA @ 1Hz pressure and temperature
3.6 μA @ 1 Hz humidity, pressure and temperature
0.1 μA in sleep mode

Die paar µA werden den Akku nicht so schnell leersaugen. Es sei denn, auf dem Board ist noch mehr Zeug drauf das Strom haben möchte.