Hallo, ich nutze den ESP8266 (z.B. NodeMCU) mit der Arduino IDE. Zwecks Energiesparens würde ich den µC gern temporär in Deep Sleep setzen - also ESP.deepSleep(SLEEP_TIME); Nun beschreiben verschiedene Seiten, dass zu Aufwachen GPIO16 und RST mit einander zu verbinden ist. Soweit alles verständlich... Nur sobald ich die beiden PINs verbinde, macht der µC einen Endlos-Reset. So zumindest das Verhalten zweier verschiedener ESP8266 Module. Liegt hier ein Missverständnis vor? Oder muss noch etwas konfiguriert werden, damit der Reset erst nach Beendigung der Deep Sleep Phase ausgeführt wird?
Jan Christian H. schrieb: > Nun beschreiben verschiedene Seiten, dass zu Aufwachen GPIO16 und RST > mit einander zu verbinden ist. Soweit alles verständlich... Das ist korrekt! GPIO16 darf dazu nicht mit pinMode() konfiguriert werden. Nach ESP.deepSleep(Zeitraum, WAKE_RF_DEFAULT); Sollte ein delay(100); erfolgen. Frage mich nicht wozu, aber damit klappt es bei mir. Meine bisherigen Informationen sagen: delay() ruft intern esp_yield()auf, und damit bekommen die Hintergrundtasks Rechenzeit und können den Sleep einleiten. ohne Gewähr
Vielen Dank für die Antwort! Bzgl. delay(100) habe ich ebenfalls gelesen, dass die Pause erforderlich ist, damit der Sleep Mode aktiviert wird. Ansonsten würde die normale Ausführung wohl zunächst weitergehen. Zu GPIO16 habe ich keine Angaben gemacht - den PinMode also nicht aktiv gesetzt. Kann ich im Code überhaupt etwas ausführen, was den Reset triggert? Irgendwie alles ganz schön kompliziert ;-)
1 | int ledPin = 1; // Photon's lone, blue LED is on pin 1 |
2 | // int ledPin = BUILTIN_LED;
|
3 | |
4 | void setup() { |
5 | pinMode(ledPin, OUTPUT); |
6 | blink(10, 250); // Blink 10 times |
7 | ESP.deepSleep(30000000); // 30 secs. |
8 | delay(100); |
9 | }
|
10 | |
11 | void loop() { |
12 | |
13 | }
|
14 | |
15 | void blink(unsigned int count, unsigned long period) { |
16 | for (unsigned int i = 0; i < count; i++) { |
17 | digitalWrite(ledPin, HIGH); |
18 | delay(period / 2); |
19 | digitalWrite(ledPin, LOW); |
20 | delay(period / 2); |
21 | }
|
22 | }
|
Die unten aufgeführte Seite liefert interessante Infos. Damit funktioniert der Deep Sleep nun mit dem NodeMCU. Muss dann nur noch klären, warum sich folgendes Modul anders verhält... http://www.dx.com/p/wi-fi-module-esp-07-esp8266-serial-wireless-with-built-in-antenna-adapter-board-for-arduino-rpi-386077 ---------------------- https://www.reddit.com/r/esp8266/comments/3qequ8/how_do_i_get_deep_sleep_working_on_nodemcu Ok. I figured out my problem. I was using BUILTIN_LED as a flasher to indicate when it woke up. In the arduino esp8266 library, that pin is connected to io16.... The wake up pin. So when that flashed, it reset the board continually.
Grüße *, ich hab auch ein ESP hier (das WROOM-02), das tief schlafen soll und einen sensor-wert lesen soll, und wenn ein threshhold überschritten ist, WIFI anwerfen und den Wert losschicken. Leider ist es so, daß auch wenn die Messungen nur 10s auseinander liegen, beim Initialisieren des WIFI extrem viel Strom verbraucht wird (120mA). Ist es möglich, irgendwie den Wifi-State zu sichern und nach dem Reset wiederherzustellen, damit dsa eben nicht soviel Strom braucht? Oder kann jemand genauer sagen, woher dieser hohe Verbrauch kommt? PS: zum Hacken hab ich erst einmal die NodeMCU (neueste Master) drauf. Deren Möglichkeiten sind natürlich eingeschränkt. Danke!
Christoph schrieb: > Oder kann jemand genauer sagen, woher dieser hohe Verbrauch kommt? Der Aufbau der Verbindung! Ist auch so im Datenblatt erwähnt. Vielleicht ist der DeepSleep ja nichts für dich....
Grüße, Danke Dir. Ich hab grad mal im SDK Programming Guide nachgeschaut, außer einem Deep Sleep scheint es da keinen anderen Sleep Modus zu geben. Wenn ich also nur disconnect()e, würde das WIFI Modem in den gesetzten Sleep-Modus (light, oder MODEM_SLEEP) gehen, aber es würde die CPU ja trotzdem weiterlaufen? Gibt es irgendwo eine Quelle, die verschiedene Stromsparstrategien gegenüberstellt? Oder überhaupt mal auslistet?
Um meine Frage gleich selbst zu beantworten, hier ist etwas, was ich gefunden hab: http://tinker.yeoman.com.au/2015/03/08/reducing-esp8266-power-consumption-using-deep-sleep/ Vielleicht nützt es noch jemandem...
Das Datenblatt S.13ff hast du gelesen? https://www.adafruit.com/images/product-files/2471/0A-ESP8266__Datasheet__EN_v4.3.pdf In der Doku zu dem Arduinoport sind bestimmt auch ein paar Infos verteilt. wie z.B.: ESP.deepSleep(microseconds, mode) will put the chip into deep sleep. mode is one of WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED. (GPIO16 needs to be tied to RST to wake from deepSleep.) https://github.com/esp8266/Arduino
Hallo zusammen, ich versuche ebenfalls meinen ESP in den deep sleep zu schicken. Als Basis hierfür verwende ich meinen bereits funktionsfähigen Sketch, der einen DHT22 ausliest und die Werte an Thingspeak sendet. Darüber hinaus messe ich die Versorgungsspannung. Sobald ich aber nun nicht die Funktion delay(...) verwende sondern ESP.deepSleep(...) verliere ich den Kontakt zum DHT und übertrage nur noch den Wert der Versorgungsspannung an Thingspeak. Sind hier Probleme bekannt? Danke und Gruß
Hallo zusammen, ich habe nun das Problem etwas eingrenzen können. Wenn ich die Versorgungsspannung gleichzeitig an den ESP sowie den DHT anlege liest er genau ein mal Werte vom Sensor. Nach dem ersten Reset (nach deep sleep) kann der ESP keine Werte mehr vom DHT lesen. Lege ich die Versorgungsspannung an den ESP an während der DHT bereits versorgt wird kann ich keine Daten vom DHT einlesen.
Hi, ich habe eine kurze Frage an dich bzgl. DHT22 und ESP mit ArduinoIDE. Könntest du mir bitte mal deine Verbindung nennen (also welche Pin mit dem DHT22 verbunden ist) und das dazugehörige Sketch? Bei mir klappt das leider nicht so wie ich es will. Danke im Voraus.
Hallo Trinsic, dein Post ist ja schon ein paar Tage alt. Ich hoffe der folgende Code hilft dir trotzdem. #include "DHT.h" //Library für den DHT Written by ladyada, public domain #include <ESP8266WiFi.h> //Library für den ESP8266 #define DHTPIN 2 // Digitaleingang GPIO2 wird für den DHT22 Sensor verwendet #define DHTTYPE DHT22 // Definieren, welcher Sensor verwendet wird: DHT 22 DHT dht(DHTPIN, DHTTYPE, 50); void setup() { dht.begin(); } void loop() { float h = 0; float t = 0; int x = 0; h = dht.readHumidity(); delay(500); t = dht.readTemperature(); delay(500); }
Hallo ich habe auch ein Problem mit dem deepSleep. Ich habe einige EPS8266 D1 mini von AZ delivery am Start, die funktionieren einwandfrei. Jetzt habe ich mir neue Di mini bestellt (Model Vendor) und die Dinger wachen nicht aus dem deepSleep auf. Nach dem ersten laden startet er ganz normal. nach der abgelaufenen Zeit kommt im Seriellen Monitor nur diese Meldung "14:08:42.923 -> ;l" und nichts weiter passiert. Drücke ich dann den Reset Knopf läuft er weiter. das gleiiche verhalten zeigt sich auch bei Reset. 1 mal drücken eine Meldung wie oben, 2. mal drücken, und weiter gehts. Mein Sketch sieht so aus #include <ESP8266WiFi.h> #include <MQTTClient.h> #include "DHT.h" #include <MQTT.h> #define DHTTYPE DHT11 #define DHTPIN 12 int ADC; float Voltage; const char* host = "192.168.2.109"; //die IP des MQTT Brokers const char* ssid = "WLAN-3C6AFE"; //_Wifi@3500/ WLAN-3C6AFE const char* password = "26278769835280501062"; //anmeldung1./26278769835280501062 //const char* mqttuser = "DeinOptionalerMQTTuser"; //const char* mqttpwd = "DeinOptionalesMQTTpasswort"; char* clientId = "ESP_Innen_01"; WiFiClient net; MQTTClient mqtt; DHT dht(DHTPIN, DHTTYPE); void setup() { dht.begin(); delay(500); Serial.begin(115200); Serial.println(); Serial.println("Booting..."); connect(); Serial.println("Setup completed..."); mqtt.loop(); float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); ADC = analogRead(A0); Voltage = (((ADC / 1024.0) * 3,3) + 0,3) ; Serial.print("Sending... "); if (!isnan(humidity) || !isnan(temperature)) { mqtt.publish("/woni/innen/temperature", String(temperature)); mqtt.publish("/woni/innen/humidity", String(humidity)); mqtt.publish("/woni/innen/ESP-Spannung", String(Voltage)); // mqtt.disconnect(); Serial.print("Temp: "); Serial.print(String(temperature)); Serial.print(" Humidity: "); Serial.print(String(humidity)); Serial.print(" Spannung: "); Serial.println(String(Voltage)); } delay(300); //wichtig, da sonst keine Verbindung Serial.println("Going into deep sleep for xx seconds"); ESP.deepSleep(20e6*40); // e.g. 20e6 is 20 seconds, 1800e6 war Vorgabe 20e6*20 ca.6.5 min } void connect() { WiFi.mode(WIFI_AP_STA); while(WiFi.waitForConnectResult() != WL_CONNECTED) { WiFi.begin(ssid, password); //delay(500); Serial.println("WiFi connection failed. Retry."); } Serial.print("Wifi connection successful - IP-Address: "); Serial.println(WiFi.localIP()); mqtt.begin(host, net); while (!mqtt.connect(host, clientId )) //mqttuser, mqttpwd { Serial.print("*"); } Serial.println("MQTT connected!"); //delay(500); } void loop(){ } Hat da jeman eine Idee Gruß Arno
Arno H. schrieb: > Hallo > ich habe auch ein Problem mit dem deepSleep. Bitte kapere keinen alten Thread, sondern mache einen neuen auf.
Arno H. schrieb: > Model Vendor Das ist weder eine Modell- noch eine Herstellerangabe. Das sind die Beschriftungen der Felder, die hier wirklich von Interesse gewesen wären. Für ein Foto war auch keine Zeit? Oder ein Link zum Shop? Kontrolliere die Beschaltung von Pin 16 und Reset. Sie muss ungefähr so aussehen, wie dort beschrieben: http://stefanfrings.de/esp8266/index.html#deepsleep
@ Christian Sorry ich gelobe beim nächsten Mal Besserung. Ich dachte da es mehr oder weniger das gleiche Thema ist könnte man den Thread weiter nutzen. @ Stefan anbei ein Foto, und hier hab ich die Dinger her https://www.ebay.de/itm/233923402519 Vom Aufbau her habe ich das Teil genauso behandlt wie den von AZ-delivery. Den DHT 11 auf D6, und eine Steckbrücke von Reset auf D0
Stefan ⛄ F. schrieb: > Kontrolliere die Beschaltung von Pin 16 und Reset. Sie muss ungefähr so > aussehen, wie dort beschrieben: > http://stefanfrings.de/esp8266/index.html#deepsleep Sind die Widerstände und der Kondensator vorhanden? Wenn ja, befinden sie sich unter der Abdeckung, du musst es also durch Messen überprüfen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.