Hallo und frohe Ostern, über die Osterfeiertage habe ich mal versucht meinen Temperatur und Luftfeuchtesensor zu überarbeiten. Es werden alle paar Minuten die Daten eines DHT22 gemessen und mit einem ESP8266 ins Web geschickt. Zusätzlich messe ich die Versorgungsspannung über einen integrierten ADWandler. Das Programm läuft an sich schon seit längerem stabil. Das Programm läuft auf dem ESP den ich mit Arduino programiere. Nur jetzt wo ich ein "deep sleep" integrieren wollte läuft der Code nicht mehr. D.h. lege ich an die Schaltung eine Versorgungsspannung an, sendet der Sensor genau ein mal Daten ins Web, nach dem ersten deep sleep wird nur noch die Versorgungsspannung ins Web übertragen. Änderungen zu dem lauffähigen code: delay(); durch ESP.deepSleep ersetzt... Code: #include "DHT.h" //Library für den DHT #include <ESP8266WiFi.h> //Library für den ESP8266 #define DHTPIN 2 // Digitaleingang 2 wird für den DHT22 Sensor verwendet #define DHTTYPE DHT22 // Definieren, welcher Sensor verwendet wird: DHT 22 DHT dht(DHTPIN, DHTTYPE); ADC_MODE(ADC_VCC); // Umschalten des ADC auf interne Messung der Versorgungsspannung void updateThingspeak(String field1, String field2, String field3){ // Daten versenden } void setup() { delay(1000); dht.begin(); WiFi.begin(wlanName, wlanPasswort); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); delay(1000); float h = dht.readHumidity();; float t = dht.readTemperature(); float vcc = ESP.getVcc(); if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } updateThingspeak(String(t), String(h), String(vcc)); //Aufrufen der Funktion Am Thingspeak-Server Anmelden und Daten Senden Strings übergeben! delay(100); ESP.deepSleep(60000000,WAKE_RF_DEFAULT); // 1s 60 5 = 5 Min. (Deep sleep ist in mikrosekunden) delay(100); // wird benötigt damit nicht die Befehle weiter laufen bis der Controller in den deep sleep geht } void loop() { }
Hallo, liest er denn den DHT noch? Da hst Du ja eine serielle Ausgbae drin. Laß Dir doch die Daten auch mal seriell ausgeben, dann kommst Du edm vielleicht näher, wo es klemmt. Wenn er die Spannung noch schickt muß er ja prinzipiell aufwachen. Gruß aus Berlin Michael
Hallo Michael, ja genau, er wacht auf und sende den Wert der Versorgungsspannung, dabei sehe ich ebenfalls die blaue Led aufleuchten. Aufwachen funktioniert, das habe ich per seriellem Monitor schon geprüft. Nur das lesen vom DHT funktioniert nach dem ersten reset nicht mehr :-(.
Scheint ein bekanntes Problem des Sensors zu sein: http://www.esp8266.com/viewtopic.php?f=32&t=8114&start=4 Lösung ist wohl, den Wert nach dem Aufwecken so lange zu pollen, bis etwas Sinnvolles kommt.
Hallo Zeltplatznachbar, trotz längerem suchen im Netz hatte ich den von dir genannten Beitrag nicht gefunden. Das scheint es zu sein. Danke! Ich werde morgen mal die beiden Ansätze: - DHT Sensor mehrfach abfragen, bis ein Gültiger Wert geliefert wird und - den Pin an den der DHT angschlossen ist vor dem sleep auf output und dann low zu schalten.
Hallo, ich bin jetzt nicht sicher, ob ich die identische DHT-lib hier drauf habe. Ich habe mal einen DHT11 an den ESP gehängt, der lag hier noch rum. Der liefert mit der default-Einstellung nur selten überhaupt Werte(ohne sleep). Mit DHT dht(DHTPIN, DHTTYPE, 50); meldet er sich (fast) immer. mit Sleep (zum Test nur auf 1s gesetzt) kommen ca. 70% mit Werten. Keine Lust im Moment, mir die Lib und das Datenbaltt des DHT genauer anzuschauen. Meine Sensoren haben FOST02 und RFM12 und laufen seit ca. 6 Jahren mit seltenen Batteriewechseln. Die ESP waren mir bisher da zu stromhungrig, so ist es nur eine RFM12-ESP8266-Bridge geworden, die die Daten jetzt per MQTT weiterschickt... Hatt ich zumindest einen Grund, den Sleep mal zu testen. :-) Gruß aus Berlin Michael
Hallo, ich habe nun etwas herum probiert und komme leider immer noch nicht weiter. :-( Ich habe folgendes probiert: - DHT Sensor mehrfach abfragen, bis ein gültiger Wert geliefert wird --> selbst bei 100 mal abfragen kam bis dato kein gültiger Wert vom Sensor zurück. Code: do { if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); delay(100); x = x+1; } else { h = dht.readHumidity(); t = dht.readTemperature(); vcc = ESP.getVcc(); x = 100; } } while (x < 100); - den Pin an den der DHT angschlossen ist vor dem sleep auf output und dann low zu schalten. --> kein Unterschied Code: pinMode(DHTPIN, OUTPUT); digitalWrite(DHTPIN, LOW); - In der Datei dht.cpp den Wert "delayMicroseconds(10) auf 40 erhöhen --> kein Unterschied Code: // Now start reading the data line to get the value from the DHT sensor. pinMode(_pin, INPUT_PULLUP); delayMicroseconds(10); // Delay a bit to let sensor pull data line low.
UPDATE - den Pin an den der DHT angschlossen ist vor dem sleep auf output und dann low zu schalten. Code: pinMode(DHTPIN, OUTPUT); digitalWrite(DHTPIN, LOW); Scheint nun doch zu funktionieren. Ich hatte nach dem digital write noch ein kleines delay welches ich nun entfernt habe.
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.