DeepSleep mit LCD Display

Hallo
Ich hab eine Wettrerstation die auch super funktioniert. Jetzt hab ich 2 esp8266 mini die miteinander kommunizieren. An 1. ESP8266 ist der BME280 angeschlossen und liefert seine werde werte via ESP AcessPoint an den 2. ESP8266 der alles auf einem Display ausgibt was im wohnzimmer liegt und auch ganz normal über netzteil angeschlossen ist. der 1. ESP8266 ist im Garten und wird noch über eine powerbank betrieben was später durch 3x AA1,5V Batterien betrieben werden soll.
So nun hab ich die DeepSleep Funktion verwedet heist der 1. ESP geht schlafen. Nun geht der ESP scheinbar schlafen bevor das Display etwas anzeigt. hab für euch auch einen Code.

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-client-server-wi-fi/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

// Import required libraries
#include <ESP8266WiFi.h>
#include "ESPAsyncWebServer.h"
//#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Set your access point network credentials
const char* ssid = "ESP8266-Access-Point";
const char* password = "123456789";

/*#include <SPI.h>
  #define BME_SCK 18
  #define BME_MISO 19
  #define BME_MOSI 23
  #define BME_CS 5*/

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
//ESP8266WebServer server(80);

String readTemp() {
  return String(bme.readTemperature());
  //return String(1.8 * bme.readTemperature() + 32);
}

String readHumi() {
  return String(bme.readHumidity());
}

String readPres() {
  return String(bme.readPressure() / 100.0F);
}

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);
  Serial.println();

  // Setting the ESP as an access point
  Serial.print("Setting AP (Access Point)…");
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send_P(200, "text/plain", readTemp().c_str());
  });
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send_P(200, "text/plain", readHumi().c_str());
  });
  server.on("/pressure", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send_P(200, "text/plain", readPres().c_str());
  });

  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin(0x76);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  // Start server
  server.begin();
  //ESP_Server geht Schlafen
  //Serial.println("Uaaah. Ich gehe nu ins Bett für 15 minuten");
  //ESP.deepSleep(60 * 1000000);
  //Information
  Serial.println(" ");
  Serial.println("##########################################################");
  Serial.println("#                                                        #");
  Serial.println("#              (C)2020 by Thorsten Alex                  #");
  Serial.println("#              Mail:                                     #");
  Serial.println("#                                                        #");
  Serial.println("##########################################################");
}

void loop() {
  //delay(120000);
  //ESP_Server geht Schlafen
  Serial.println("Uaaah. Ich gehe nu ins Bett für 15 minuten");
 ESP.deepSleep(900000);
}

Das delay ist ein Experiment von mir:-)

gruss Hitman

Hallo,

falls das der sein soll der sendet, dann füge ein Serial.flush() hinzu. Vorm Sleep.

Scheinbar klappt das nicht. Denn wenn ich ein Serial.Flush setzte dann sendet er ohne pause jede Minute das gleiche und zeigt auf dem Display garnix mehr an. :confused: Bin ich zu blöd :o

void loop() {
  //ESP_Server geht Schlafen
  //Serial.println("Uaaah. Ich gehe nu ins Bett für 15 minuten");
  Serial.flush();
  ESP.deepSleep(900000);
}

egal wo ich das hinsetze der ESP8266 geht einfach nicht schlafen.

Hallo,

bei mir sieht das so aus Sl ist die schlafzeit in sekunden

  delay(500); // etwas warten 
  WiFi.mode(WIFI_OFF);
  WiFi.forceSleepBegin ();
  delay(1);
  ESP.deepSleep(sl * 1000000, WAKE_NO_RFCAL);
  delay(1);

Danke für den Tip probiere ich heute Abend aus denn nach dem Text mit Copyright wird garnix mehr angezeigt.

Hallo,

bin verwirrt. Sendet er nicht weil er schlafen geht oder sendet er ständig weil er nicht schlafen geht?

So nun hab ich die DeepSleep Funktion verwedet heist der 1. ESP geht schlafen. Nun geht der ESP scheinbar schlafen bevor das Display etwas anzeigt. hab für euch auch einen Code.

vs.

egal wo ich das hinsetze der ESP8266 geht einfach nicht schlafen.

Das flush() leert den Sendepuffer bevor es weitergeht.
Danach ein ESP.deepSleep(0)
und der pennt. Wenn er das scheinbar nicht macht wird er durch irgendwas wieder geweckt.

Hallo,
Mir ist das auch noch nicht ganz klar. Auf dem Mess-ESP läuft ein Webserver, nach dem Messen soll er pennen gehen. Dann ist er ja nicht mehr erreichbar. Der Anzeige-ESP macht jetzt was ? ständig anfragen ob der Mess-ESP mal wach geworden ist und antwortet.

Du solltest das noch mal überdenken. Hat aber erst mal nichts mit dem Deep-Sleep zu tun.

Vorschlag:
Auf dem Anzeige-ESP sollte ein TCP oder UDP Server laufen und "lauschen" ob der Mess-ESP was abgesendet hat.Die drei Messwerte kann man dann in einer Zeile übetrtagen als Zeichenkette.

Heinz

ok ich versuche das mal zu überdenken und melde mich dann :slight_smile:

Hi

Wäre Es möglich, daß der ESP für 0,9 Sekunden schläft?
Deine 900000, angedacht für 900 Sekunden = 15 Minuten
gegen
Tommy56's Rentner's
sl * 1000000, sl Sekunden mal 1 Mio
Somit wäre eine Sekunde Schlafen 1.000.000 - und Deine 900.000 sind Da knapp drunter - somit wird der ESP ggf. wie befohlen nach 0,9 Sekunden wieder wach und arbeitet den Sketch ab?!?

MfG

Edit
Ich entschuldige mich in aller Form gegen diese Beschuldigung und hoffe, dadurch noch ein mal der gerechten Strafe zu entgehen.
Wobei ich mich frage, wie ich Euch verwechseln konnte - alleine der Avatar, Der die Tommy56-Posts ziert ist eigentlich recht eindeutig ...
... hehe ... wie man den Tommy nennt, kommt Er schon gerennt ... :wink: (Er war hier noch gar nicht aktiv - also bis jetzt)

postmaster-ino:
gegen
Tommy56's

Ich bin unschuldig, der Rentner wars :wink:

Gruß Tommy

Sagen wir mal so es ist recht unterschiedlich was der Macht machmal bleibt er ste dem Logo stehen und machmal rennt er ununterbrochen. Es soll so sein, das er alle 15 min einmal seine Daten an den 2. ESP8266 sendeden soll dann schlafen geht. Manchmal kommt es mir vor das er schlafen geht weil nix mehr in der seriellen console angezeit wird. Machmal ist es aber auch so das er durchrennt wie bekloppt siehe Bild oben.

berichte: hat das delay nach dem ESP.deepSleep(900000); was gebracht? Weil imho ist das notwendig, ansonsten bekomm ich auch keinen verlässlichen Deepsleep. ich setze ein delay(100) hinterher.

Der ESP geht Geht schlafen das ist richtig funktioniert auch. aber er geht schlafen bevor etwas auf dem Display zu sehen ist denn das zeigt rein gar nix mehr an außer ich nehme die ganze deep.sleep Geschichte raus dann funktioniert es wie es soll aber das bint ja bei akku betrieb nix. Ich sehe das so das am Server wo auch der Sensor angschlossen ist auch der accesspoint erstellt wird und wenn der schlafen geht geht bekommt der 2. esp8266 keine daten mehrund somit geht auch das display nicht

für Tips biun ich dankbar

Gruß Hitman

Hi

Schuss ins Blaue:
Das Versenden der letzten Mitteilung geschieht 'nebenher'.
Da die Serielle schnarch-lahm ist, sind die Zeichen aber noch nicht (alle) versendet, wenn Du bereits den Tiefschlaf anordnest.
Was soll der arme ESP denn machen, wenn Cheffe Bettruhe befiehlt?

Man könnte den Sende-Buffer auslesen, ob noch Zeichen versendet werden müssen - wenn nicht, pennen.

MfG

Hallo,

siehe #6

der Messknecht kann nicht der Server sein wenn er pennen geht. Der andere muss der Server sein. und lauschen. Er muss verfügbar sein ,Service leisten, Server sein. Der Messknecht wird wach misst "Misst" und sendet . (TCP oder UDP) Dann geht er wieder pennen.

Heinz