DHT22 gibt keine Daten raus

Ich kann den Fehler einfach nicht finden, warum dieses Programm keinen Indoor-Werten ausgeben tut!
Wäre schön wenn jemand mir helfen könnte! Danke!

Wetter.ino (13.4 KB)

Angelina80:
Ich kann den Fehler einfach nicht finden, warum dieses Programm keinen Indoor-Werten ausgeben tut!
Wäre schön wenn jemand mir helfen könnte! Danke!

Wir helfen gerne.
Dazu bitte den Sketch im Forum in Code-Tags posten, dann ist dieser für alle besser lesbar.
Dazu die Schaltfläche </> oben links im Editorfenster verwenden.
Und ein Foto, wie du den Sensor angeschlossen hast.

Einige Infos zu deiner Hardware wäre auch nicht schlecht, und eine Aussage was es überhaupt macht, wenn das Programm keine Werte ausgibt.

Hi

Bei 13kB Sketch wirst Du das Limit von 9000 Zeichen pro Post wohl sprengen - reduziere den Sketch bis auf den Fehler - wenn Dir Das möglich ist.
Alternativ: Gehe an die Stelle zurück, als der Sketch noch Das machte, was Du vorhattest.
Zwischen diesem Punkt und Jetzt kam irgendwie der Fehler rein.

MfG

Gibt es hier auch noch mal Antworten, oder werden unsere Bitten ignoriert ?

Der Code ist leider zu groß auf diese Art und Weise zu posten. Ich kann den Sketch auch nicht auf die Fehler zu reduzieren, weil ich nicht weiß wo der Fehler liegt. Das Programm läuft fehlerfrei durch, die Daten von Openweathermap werden fehlerfrei dargestellt, nur der DHT22 gibt keinen Wert aus!
Die Schaltung ist sehr einfach: Wemos D1 Mini ist an einen SSD1306 Oled Display angeschlossen. DHT22 ist an D6 angeschlossen.

Hi

Schon ein schönes Display ... was willst Du uns damit sagen?

WER entscheidet, ob 'nan' (not a number) zurück gesendet wurde?
Kam Da auch wirklich 'Müll' zurück, oder interpretierst Du nur falsch?

Dort würde ich an Deiner Stelle mit Suchen anfangen - woher kommt dieses 'nan' - sofern der DHT an sich funktioniert.

MfG

Angelina80:
DHT22 ist an D6 angeschlossen.

Du hast den Pin für den DHT im Sketch falsch deklariert, angeschlossen hast du den an Pin D6, im Sketch gibst du aber D5 an (Zeile 69):

// DHT Settings
#define DHTPIN D5     // what digital pin we're connected to. If you are not using NodeMCU change D6 to real pin

Angelina80:
Der Code ist leider zu groß auf diese Art und Weise zu posten. Ich kann den Sketch auch nicht auf die Fehler zu reduzieren, weil ich nicht weiß wo der Fehler liegt. Das Programm läuft fehlerfrei durch, die Daten von Openweathermap werden fehlerfrei dargestellt, nur der DHT22 gibt keinen Wert aus!
Die Schaltung ist sehr einfach: Wemos D1 Mini ist an einen SSD1306 Oled Display angeschlossen. DHT22 ist an D6 angeschlossen.

Wenn man dann wollte, könnte man den Sketch aufteilen und in 2 oder 3 Post hier einstellen.
Dann hättest du sicher mehr Helfer, was du jetzt aber nicht mehr brauchst.

Der DHT Pin ist natürlich an D5 angeschlossen, habe ich mich vertippt! Hier die Code in zwei Teilen:

#include <ESPWiFi.h>
#include <ESPHTTPClient.h>
#include <JsonListener.h>

// time
#include <time.h>                       // time() ctime()
#include <sys/time.h>                   // struct timeval
#include <coredecls.h>                  // settimeofday_cb()

#include "SH1106Wire.h"
#include "OLEDDisplayUi.h"
#include "Wire.h"
#include "OpenWeatherMapCurrent.h"
#include "OpenWeatherMapForecast.h"
#include "WeatherStationFonts.h"
#include "WeatherStationImages.h"
#include "DHT.h"

/***************************
 * Begin Settings
 **************************/

// WIFI
const char* WIFI_SSID = "JoloBox";
const char* WIFI_PWD = "SztremiJozsef22111955";

#define TZ              2       // (utc+) TZ in hours
#define DST_MN          60      // use 60mn for summer time in some countries

// Setup
const int UPDATE_INTERVAL_SECS = 20 * 60; // Update every 20 minutes

// DHT Settings
#define DHTPIN D6 // Wemos D1R2 Mini
#define DHTTYPE DHT22   // DHT22  (AM2302), AM2321

char FormattedTemperature[10];
char FormattedHumidity[10];


// OpenWeatherMap Settings
String OPEN_WEATHER_MAP_APP_ID = "9df21e3d5f7fc1b1aa7f46adab9b5c0d";
String OPEN_WEATHER_MAP_LOCATION_ID = "2935022";
String OPEN_WEATHER_MAP_LANGUAGE = "de";
const uint8_t MAX_FORECASTS = 4;

const boolean IS_METRIC = true;

// Adjust according to your language
const String WDAY_NAMES[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
const String MONTH_NAMES[] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};

/***************************
 * End Settings
 **************************/
 // Initialize the oled display for address 0x3c
 SH1106Wire display(0x3c, D2, D1);
 OLEDDisplayUi   ui( &display );

OpenWeatherMapCurrentData currentWeather;
OpenWeatherMapCurrent currentWeatherClient;

OpenWeatherMapForecastData forecasts[MAX_FORECASTS];
OpenWeatherMapForecast forecastClient;

#define TZ_MN           ((TZ)*60)
#define TZ_SEC          ((TZ)*3600)
#define DST_SEC         ((DST_MN)*60)
time_t now;

// flag changed in the ticker function every 10 minutes
bool readyForWeatherUpdate = false;
// flag changed in the ticker function every 1 minute
bool readyForDHTUpdate = false;

String lastUpdate = "--";

long timeSinceLastWUpdate = 0;

//declaring prototypes
void drawProgress(OLEDDisplay *display, int percentage, String label);
void updateData(OLEDDisplay *display);
void drawDateTime(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void drawCurrentWeather(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void drawForecast(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void drawForecastDetails(OLEDDisplay *display, int x, int y, int dayIndex);
void drawHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state);
void drawIndoor(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
void setReadyForWeatherUpdate();

// Initialize the temperature/ humidity sensor
DHT dht(DHTPIN, DHTTYPE);
float humidity = 0.0;
float temperature = 0.0;

// Add frames
// this array keeps function pointers to all frames
// frames are the single views that slide from right to left
FrameCallback frames[] = { drawDateTime, drawCurrentWeather, drawForecast, drawIndoor };
int numberOfFrames = 4;

OverlayCallback overlays[] = { drawHeaderOverlay };
int numberOfOverlays = 1;

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println();

  // initialize dispaly
  display.init();
  display.clear();
  display.display();

  //display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_CENTER);
  display.setContrast(255);

  WiFi.begin(WIFI_SSID, WIFI_PWD);

  int counter = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    display.clear();
    display.drawString(64, 10, "Connecting to WiFi");
    display.drawXbm(46, 30, 8, 8, counter % 3 == 0 ? activeSymbole : inactiveSymbole);
    display.drawXbm(60, 30, 8, 8, counter % 3 == 1 ? activeSymbole : inactiveSymbole);
    display.drawXbm(74, 30, 8, 8, counter % 3 == 2 ? activeSymbole : inactiveSymbole);
    display.display();

    counter++;
  

  }
  // Get time from network time service
  configTime(TZ_SEC, DST_SEC, "pool.ntp.org");

  ui.setTargetFPS(30);

  ui.setActiveSymbol(activeSymbole);
  ui.setInactiveSymbol(inactiveSymbole);

  // You can change this to
  // TOP, LEFT, BOTTOM, RIGHT
  ui.setIndicatorPosition(BOTTOM);

  // Defines where the first frame is located in the bar.
  ui.setIndicatorDirection(LEFT_RIGHT);

  // You can change the transition that is used
  // SLIDE_LEFT, SLIDE_RIGHT, SLIDE_TOP, SLIDE_DOWN
  ui.setFrameAnimation(SLIDE_LEFT);

  ui.setFrames(frames, numberOfFrames);

  ui.setOverlays(overlays, numberOfOverlays);

  // Inital UI takes care of initalising the display too.
  ui.init();

  Serial.println("");

  updateData(&display);

}
void loop() {

  if (millis() - timeSinceLastWUpdate > (1000L*UPDATE_INTERVAL_SECS)) {
    setReadyForWeatherUpdate();
    timeSinceLastWUpdate = millis();
  }

  if (readyForWeatherUpdate && ui.getUiState()->frameState == FIXED) {
    updateData(&display);
  }

  if (readyForDHTUpdate && ui.getUiState()->frameState == FIXED){
    updateDHT();
  }
 
  int remainingTimeBudget = ui.update();

  if (remainingTimeBudget > 0) {
    // You can do some work here
    // Don't do stuff if you are below your
    // time budget.
    delay(remainingTimeBudget);
  }


}

void drawProgress(OLEDDisplay *display, int percentage, String label) {
  display->clear();
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  display->drawString(64, 10, label);
  display->drawProgressBar(2, 28, 124, 10, percentage);
  display->display();
}

void updateData(OLEDDisplay *display) {
  drawProgress(display, 10, "Updating time...");
  drawProgress(display, 30, "Updating weather...");
  currentWeatherClient.setMetric(IS_METRIC);
  currentWeatherClient.setLanguage(OPEN_WEATHER_MAP_LANGUAGE);
  currentWeatherClient.updateCurrentById(&currentWeather, OPEN_WEATHER_MAP_APP_ID, OPEN_WEATHER_MAP_LOCATION_ID);
  drawProgress(display, 50, "Updating forecasts...");
  forecastClient.setMetric(IS_METRIC);
  forecastClient.setLanguage(OPEN_WEATHER_MAP_LANGUAGE);
  uint8_t allowedHours[] = {12};
  forecastClient.setAllowedHours(allowedHours, sizeof(allowedHours));
  forecastClient.updateForecastsById(forecasts, OPEN_WEATHER_MAP_APP_ID, OPEN_WEATHER_MAP_LOCATION_ID, MAX_FORECASTS);

  readyForWeatherUpdate = false;
  drawProgress(display, 100, "Done...");
  delay(1000);

  drawProgress(display, 70, "Updating DHT Sensor");
  humidity = dht.readHumidity();
  drawProgress(display, 80, "Updating DHT Sensor");
  temperature = dht.readTemperature(!IS_METRIC);
  delay(500);
}

// Called every 1 minute
void updateDHT() {
  humidity = dht.readHumidity();
  temperature = dht.readTemperature(!IS_METRIC);
  readyForDHTUpdate = false;
  
}



void drawDateTime(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  now = time(nullptr);
  struct tm* timeInfo;
  timeInfo = localtime(&now);
  char buff[16];


  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  String date = WDAY_NAMES[timeInfo->tm_wday];

  sprintf_P(buff, PSTR("%s, %02d/%02d/%04d"), WDAY_NAMES[timeInfo->tm_wday].c_str(), timeInfo->tm_mday, timeInfo->tm_mon+1, timeInfo->tm_year + 1900);
  display->drawString(64 + x, 5 + y, String(buff));
  display->setFont(ArialMT_Plain_24);

  sprintf_P(buff, PSTR("%02d:%02d:%02d"), timeInfo->tm_hour, timeInfo->tm_min, timeInfo->tm_sec);
  display->drawString(64 + x, 15 + y, String(buff));
  display->setTextAlignment(TEXT_ALIGN_LEFT);
}

void drawCurrentWeather(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  display->setFont(ArialMT_Plain_10);
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->drawString(64 + x, 38 + y, currentWeather.description);

  display->setFont(ArialMT_Plain_24);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  String temp = String(currentWeather.temp, 1) + (IS_METRIC ? "°C" : "°F");
  display->drawString(60 + x, 5 + y, temp);

  display->setFont(Meteocons_Plain_36);
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->drawString(32 + x, 0 + y, currentWeather.iconMeteoCon);
}


void drawForecast(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  drawForecastDetails(display, x, y, 0);
  drawForecastDetails(display, x + 44, y, 1);
  drawForecastDetails(display, x + 88, y, 2);
}

void drawForecastDetails(OLEDDisplay *display, int x, int y, int dayIndex) {
  time_t observationTimestamp = forecasts[dayIndex].observationTime;
  struct tm* timeInfo;
  timeInfo = localtime(&observationTimestamp);
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  display->drawString(x + 20, y, WDAY_NAMES[timeInfo->tm_wday]);

  display->setFont(Meteocons_Plain_21);
  display->drawString(x + 20, y + 12, forecasts[dayIndex].iconMeteoCon);
  String temp = String(forecasts[dayIndex].temp, 0) + (IS_METRIC ? "°C" : "°F");
  display->setFont(ArialMT_Plain_10);
  display->drawString(x + 20, y + 34, temp);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
}

void drawIndoor(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  display->drawString(64 + x, 0, "Innen Sensor");
  display->setFont(ArialMT_Plain_16);
  dtostrf(temperature,4, 1, FormattedTemperature);
  display->drawString(64+x, 12, "Temp: " + String(FormattedTemperature) + (IS_METRIC ? "°C": "°F"));
  dtostrf(humidity,4, 1, FormattedHumidity);
  display->drawString(64+x, 30, "Feucht: " + String(FormattedHumidity) + "%");

}

void drawHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
  now = time(nullptr);
  struct tm* timeInfo;
  timeInfo = localtime(&now);
  char buff[14];
  sprintf_P(buff, PSTR("%02d:%02d"), timeInfo->tm_hour, timeInfo->tm_min);

  display->setColor(WHITE);
  display->setFont(ArialMT_Plain_10);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  display->drawString(0, 54, String(buff));
  display->setTextAlignment(TEXT_ALIGN_RIGHT);
  String temp = String(currentWeather.temp, 1) + (IS_METRIC ? "°C" : "°F");
  display->drawString(128, 54, temp);
  display->drawHorizontalLine(0, 52, 128);
}

void setReadyForWeatherUpdate() {
  Serial.println("Setting readyForUpdate to true");
  readyForWeatherUpdate = true;
}

void setReadyForDHTUpdate() {
  Serial.println("Setting readyForDHTUpdate to true");
  readyForDHTUpdate = true;
}

Hi,

jetzt hast du aber D6 als Pin im Sketch deklariert, was stimmt jetzt?

// DHT Settings
// #define DHTPIN D2 // NodeMCU
#define DHTPIN D6 // Wemos D1R2 Mini
#define DHTTYPE DHT22   // DHT22  (AM2302), AM2321

Angelina80:
Der DHT Pin ist natürlich an D5 angeschlossen, habe ich mich vertippt! Hier die Code in zwei Teilen:

ich sehe schon, das geht hier etwas durcheinander.

Sieh dir mal deinen Sketch genau an und prüfe, ob die Definition im Sketch mit der tatsächlichen Verbindung am Wemos überein stimmt.

Wenn beides identisch ist, sollte es passen und funktionieren.
Wenn, ja wenn der DHT22 auch richtig angeschlossen ist.
Das sehen wir bisher noch nicht.

Ich befürchte da ist noch mehr durcheinander.

Hast du dir den Bausatz bei "thingpulse" gekauft ?

Dann sollte da ein DHT11 dabei sein, kein DHT22.
Welches Display hast du tatsächlich ?
Du hast 2 Libraries eingebunden, warum ?
Dann wird da ein NodeMCU verwendet, kein Wemos.

Also irgendetwas passt nicht.

Bitte poste mal Namen und Links der tatsächlichen Teile.

Bausatz NICHT bei "thingpulse" gekauft! Es ist ein Wemos D1 Mini mit SH1106 Oled Display! Ich habe die Code ein wenig bereinigt, der DHT Sensor ist jetzt definitiv an D6 angeschlossen und ich bekomme keinen Wert raus! Kann nur an Programm-Code liegen, Harware ist in Ordnung.

IMG_0507 (1).mpg (1.51 MB)

Und woher weisst Du, dass die Hardware, z.B. der Sensor wirklich in Ordnung ist, wenn Du da keinen Wert ausgelesen bekommst?

Ich glaube HotSystems wartet aus #1 noch vergeblich auf die Anschlussbelegung am DHT22, poste bitte ein Bild davon.

Soweit ich weiß, gehört zwischen Datenpin und Plus noch ein Widerstand, wie groß der bei 3V3 sein muss weiß ich grad nicht. Ich habe für 5V einen mit 4,7KOhm angeschlossen.

a) weil es so verworren läuft: bitte ein HOCHAUFLÖSENDES Foto von deiner Verkabelung + Komponenten worauf wir wirklich sehen was du wo wie angeschlossen hast.

b) mit welchem Sketch hast du die Funktionsweise deiner Verkabelung überprüft? Ich meine damit einen Sketch der nur die Werte auf einer Seriellen Schnittstelle ausgibt. - Bitte den funktionierenden Sketch auch posten.

Angelina80:
.....
Kann nur an Programm-Code liegen, Harware ist in Ordnung.

woher willst du das Wissen ?

Ich sehe immer noch kein Bild deines Aufbaus.
Keine Links deiner Teile.
Kein Schaltbild.
Nur falsche Infos....
Wie sollen wir da helfen ?
Ist das hier eine Rateshow ?

Langsam verliere ich die Lust.

Also vermute ich, hier besteht kein weiteres Interesse auf Hilfe.