DHT22 bringt bei Minus-Temperaturen Werte < -3000

Hallo,
ich betreibe mehrere ESPs mit DHT22. An einem sind 2 DHTs angeschlossen , von denen einer die Außentemperatur misst. Heute morgen hatte es Temperaturen unter Null und der Aussen-DHT22 hat statt - 0.5 Grad -3270 angezeigt. Die Luftfeuchte war normal mit 70% und wird auch so gemessen und angezeigt . Etwas später war die Temperatur bei 0 Grad und der DHT hat dann auch wieder 0 Grad angezeigt.
Alle anderen DHTs messen Raumtemperaturen und die laufen ganz normal .
Hatte von euch schon mal jemand sowas und was kann man dagegen tun?

Library is DHT kxn von Adafruit , V3.4.4.

Anbei mein Code:

im DEfinitionsteil:

// ----------------------- DHT - Temp und Feuchte -----------------
#include "Adafruit_Sensor.h"      
#include "DHT.h"
#define DHTTYPE DHT22             // DHT11 oder DHT22
#define DHTPIN_AF 26              // 2. DHT für AF
DHT dhtAF = DHT(DHTPIN_AF, DHTTYPE);

float feuchtedhtAF;
String sfeuchtedhtAF;                         
float tempdhtAF;
String stempdhtAF;
byte dhtAFsensorfehler;
bool tempdhtAFgemeldet;
bool feuchtedhtAFgemeldet;

                  

im Setup:

      dhtAF.begin();

im Loop: Sensor wird alle 15 sec gelesen (funktioniert alles seit Tagen einwandfrei , solange die Temp >= 0 ist)

// --------------------  DHT AF Abfrage -------------------------------
      feuchtedhtAF = dhtAF.readHumidity();                                 // Read the humidity in %:
      tempdhtAF = dhtAF.readTemperature();                                 // Read the temperature as Celsius:
      if (isnan(feuchtedhtAF) || isnan(tempdhtAF)) {                       // Check if any reads failed and exit early (to try again):
        dhtAFsensorfehler ++;
        if (dhtAFsensorfehler >= 2) {
          dhtAFsensorfehler = 2;
          Meldung("Fehler beim Lesen des DHT-AF Sensors!", 'o');
        }
      }
      else {    // Sensorreading ist OK
          dhtAFsensorfehler = 0;
          if (feuchtedhtAF > 80 & feuchtedhtAFgemeldet == false) {
            text = "Aussen Luftfeuchte : " + String (feuchtedhtAF);
            Meldung(text, 'o');
            feuchtedhtAFgemeldet = true;
          } 
          else if (feuchtedhtAF < 60) feuchtedhtAFgemeldet = false;
          
          if (tempdhtAF < -5 & tempdhtAFgemeldet == false) {
            text = "Aussen Temperatur " + smyname + ": " + String (tempdht);
            Meldung(text, 'o');
            tempdhtAFgemeldet = true;
          } 
          else if (tempdhtAF > 0) tempdhtAFgemeldet = false;
      }     // end else
  

Gegen einander tauschen und beobachten.

Es scheint als läuft eine Variable über.

häng einen Sensor mal in das Gefrierfach,
nimm den unveränderten Beispielsketch der Library.
Wenn der Fehler dort auch kommt, liegt es an der Library (glaub ich aber nicht, weil das Vorzeichen wird behandelt: DHT-sensor-library/DHT.cpp at master · adafruit/DHT-sensor-library · GitHub)

Wenn der Beispielsketch funktioniert, liegt es an deinem Sketch.
Dein Sketch ist unvollständig somit macht eine weitere Analyse wenig Sinn und zumindst überhaupt keinen Spaß.

Bei dem Codeschnipsel fragt man sich, wo denn die Variable "tempdht" her kommt.

Außerdem dürften die IF Bedingungen eine Compilerwarnung erzeugen. Auch wenn es so funktioniert ist doch wahrscheinlich ein "&&" statt eines "&" in den Bedingungen angedacht.

Naja der ganze code ist ca 5000 Zeilen lang, daher nur die relevanten Teile ...
im Definitionsteil ist die Variable tempdht eh als float definiert - siehe Beispiel
Wusste nicht, dass der Code insgesamt unvollständig ist und sehe mir das nochmal an

Hallo,

ich habe mir das nochmal angesehen und die 2 Beispielsketches zu der DHT library durchgesehen.
Da ist ein Sketch für den unified-DHT sensor - der aber lt anderen Foren nur Sinn macht, wenn man das auf mehreren Plattformen verwendet.

Und dann ist da noch der DHT Tester Sketch , der genauso viele Befehle hat, wie die, die ich verwende. relativ einfach.

Könnt ihr mir hier mal helfen, welches Beispiel das richtige ist - das hier oder das für den unified-DHT??
LG

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 2     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

Normaler Weise alle Beispiele sollten die gleiche werte anzeigen, gehe davon aus das der eine was aus der Reihe tanzt ist defekt.
Jedoch nutze die DHT nicht, nur BME280, SHT, HTU und einen SI 7021, wobei SHT und HTU gibt's einfache und teure Modele. Alle gezeigte haben bei Temp +-0,5°C. Musst in DB schauen wen Interesse die HTU und SHT gibt auch in +-0,2°C Genauigkeit, Luftfeuchte geben alle Sensoren in %RH = Relativ zu Temp. Auch Dein DHT.
Vorteil die Beißen sich nicht, wen man unterschiedliche nimmt alle funktionieren über I²C
BME280 hat zwei Adressen zum einstellen, aufpassen alle sind 3,3V also achten das die sind für 5V geeignet = Modul für 5V.

werd das mal probieren ...

Habe jetzt mal eine andere library und einen anderen DHT22 Sensor ausprobiert.
Die library war es nicht, aber der Sensor und nicht der eine , sondern die ganze Serie.
Hatte mal eine 3er Packung DHT 22 bei Temu bestellt und die können die Minus-Temperatur nicht, egal mit welcher library. Die andere Serie von DHT22 kam über AliExpress und bei denen werden die Minustemperaturen bei allen 3 korrekt angezeigt.

Das war´s ...

Wurde nicht mehr machen auch wen die sind Günstiger als Ali, bei Temu sind wahrscheinlich nur Schrotthändler.
Habe dort mall ein 4" TFT Bestellt (war um 3€ günstiger als bei ALI), Touch war Defekt nach hin und her ging der zurück.

Hab´s gar nicht wegen dem Preis bei Temu bestellt, sondern weil die schnellere Lieferzeiten hatten - das stimmte auch.
Die von ALiexpress waren halt eine Woche später (aber sie funktionieren). Bei Amazon gab es nur die Sensoren, die auf einer kleinen Platine aufgelötet sind, ich brauchte aber die ohne Platine...

Wenn Du die ohne Platine verwendest, einen Pullup-Widerstand zwischen VCC und Datenleitung hast Du aber verbaut, oder?

Ja, den hatte ich , 5k
wie gesagt die AliExpress DHT22 funktionieren in der gleichen Kombination wie die nicht-funktionierenden Temu DHT22.

Danke euch allen für die Anregungen zur Lösungssuche - die Tests im Gefrierschrank waren sehr hilfreich :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.