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);
}
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. 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.
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.
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 ... (Er war hier noch gar nicht aktiv - also bis jetzt)
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
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.
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.