DHT 22 - Fehler nach Deepsleep

Guten Tag zusammen!

Ich habe einen Außensensor gebaut und wollte ihn mit Batterie betreiben. Als Board benutze ich einen D1 mini (Klon von AZ-Delivery), als Sensor den DHT22 und zur Datenübertragung Blynk. Alles hat zunächst gut funktioniert, doch dann habe ich einen Deepsleep eingebaut um den Batteriebetrieb überhaupt erst dauerhaft zu ermöglichen. Doch dann trat folgender Fehler auf: Die Daten wurden einmal erfolgreich an Blynk gesendet, doch nach dem nächsten Deepsleep konnte der Sensor nicht mehr ausgelesen werden. Stromverbindung trennen und neu verbinden führte wieder zum gleichen Problem. Mit dem DHT Testbeispiel lässt sich der Sensor problemlos auslesen, doch sobald man einen Deepsleep einbaut geht nix mehr. Hier habe ich einen älteren Beitrag gefunden. Esp8266 und dht22 im deep sleep - Deutsch - Arduino Forum doch alle Möglichkeiten zur Problemlösung haben bei meinem Projekt keine Wirkung gezeigt. Der Beitrag ist ja auch schon etwas älter. Vielleicht hat einer von euch noch eine Idee, was man noch ausprobieren könnte oder was sich bis heute geändert hat.

Gruß

Boommster_X

#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "XXXXXXXXXXXX";


char ssid[] = "XXXXXXXXXXXXXX";
char pass[] = "XXXXXXXXXXXXXX";
#define DHTPIN 2          

#define DHTTYPE DHT22   


DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;


void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); 

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
  delay(100);
  ESP.deepSleep(600e6);
}

void setup()
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);


  dht.begin();

 
  timer.setInterval(1000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

Bau nach den Aufwachen mal irgendwie eine kleine Pause ein. Der DHT muss ja erst mal Zeit bekommen um
sich wieder zu initialisieren.
Ich hatte so was auch mal mit einem ProMini. Da habe ich den DHT über einen Output Pin mit Spannung versorgt
und vor dem Schlafen abgeschaltet. Ohne Pause nach dem Aufwecken habe ich da auch keine vernünftigen
Werte bekommen.

Ulli

Ok.

Ich habe nach dem Deepsleep ein Delay von 500ms eingesetzt. Dies hat leider auch nicht geholfen. Trotzdem schon mal Danke.
Könntest du nochmal beschreiben, wie du das mit der Stromversorgung gemacht hast? Ich habe die Idee auch schon gehabt, aber ich glaube ich habe sie dann einfach falsch umgesetzt.

#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "XXXXXXXXXXXX";


char ssid[] = "XXXXXXXXXXXXXX";
char pass[] = "XXXXXXXXXXXXXX";
#define DHTPIN 2          

#define DHTTYPE DHT22   


DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;


void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); 

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
  delay(100);
  ESP.deepSleep(600e6);
  delay(500);
}

void setup()
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);


  dht.begin();

 
  timer.setInterval(1000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

(deleted)

// The sensor can only be read from every 1-2s, and requires a minimum
// 2s warm-up after power-on.

... was man so alles findet :wink:

Ich habe die +5V vom DHT einfach an einen IO-Pin angelossen.
Wenn ich den dann auf HIGH gesetzt habe bekam der DHT Spannung - Fertig.

Ulli

Da ich von C nicht besonders viel Ahnung habe (benutze meistens Python) bin ich mir nicht sicher, ob ich alles richtig gemacht habe. Es lässt sich jedenfalls kompilieren. Nun konnte ich es aber nicht testen, da das Board (D1 mini) nicht reagiert. Es lässt sich zwar anschließen, dennoch reagiert es nicht. Es blinkt die ganze Zeit, aber am PC zeigt sich keine Verbindung. Auch ein Reset hat nicht geholfen. Die Verbindung zwischen RST und D0 habe ich getrennt. Hatte einer von euch schon mal das Problem oder hat eine Ahnung, wie man das Problem in den Griff bekommt?
PS. anderer USB-Port hat auch nix geändert.

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <Wire.h>

char auth[] = "xxxx";

char ssid[] = "xxxxxx";
char pass[] = "xxx";

#define DHTPIN 2         


#define DHTTYPE DHT22 




DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

void sendSensor()
{
  float h = dht.readHumidity();
  float t =dht.readTemperature();  

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
 
  
  pinMode(5, OUTPUT);
  
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
  
  digitalWrite (5, LOW);
  
  ESP.deepSleep(60000); 
  
  digitalWrite (5, HIGH);   
  
  delay (5000);
}

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();

  
  
  timer.setInterval(500L, sendSensor);
  
}

void loop()
{
    Blynk.run();
    timer.run();
   
}

Es gibt gute Neuigkeiten.

Nach etlichen Versuchen und viel Zeit, habe ich das Problem endlich in den Griff bekommen. ;D
Ich habe einfach den Sonsor an 5V und GND einen anderen Pin als Datenleitung benutz und dann konnten auch nach dem Deepsleep wieder alle Werte ausgelesen werden. Doch ganz hat es dann noch immer nicht funktioniert, denn jetzt hat das Board die ganze Zeit Resets gemacht und nur ab und zu einen Wert übertragen. Später habe ich mehr oder weniger durch Zufall herausgefunden, worin das Problem bestand. Beim Deepsleep wird wie beim Delay die Zeit in ms angegeben. Ich habe statt wie am Anfang z.B. 30.000 für 30 Sekunden 30e6 eingegeben und schon hat es geklappt. Ich habe keine Ahnung warum es so geht, aber bis jetzt läuft alles ohne Fehler. In der IDE wurde nie ein Fehler angezeigt, aber anscheinend kann der ESP 8266 damit nicht richtig umgehen.

Ich hoffe ich kann mit diesem Beitrag jemandem helfen der das gleiche Problem hat.

Gruß

Boommaster_X

(deleted)