Hallo zusammen,

Ich bin gerade dabei mein erstes Projekt mit dem NodeMCU zu verwirklichen. Dazu habe ich mir den DHT22 dazu geholt und gebe dessen Daten über einen Webserver auf dem NodeMCU im XML Format aus, die ich dann wiederum mit Icinga2 auslese und mir mit Grafana darstellen lasse. Ähnlich wie in diesem Tutorial: https://daniel-ziegler.com/monitorin...afana-esp8266/

Nun habe ich das Gefühl, dass sich der Webserver ab und zu aufhängt. Ich komme einfach nicht mehr drauf und auch Grafana zeigt mir, dass in dieser Zeit keine Daten empfangen werden konnten. Nach einer Weile fängt er sich dann wohl wieder.

Hat jemand gleiche Erfahrungen damit gemacht, oder liegt es vielleicht an meinem Code? Habe ich etwas vergessen oder falsch gemacht? Falsche Bibliotheken geladen?

Klicke auf die Grafik für eine größere Ansicht

Name:	Bildschirmfoto 2019-06-13 um 10.45.05.png
Hits:	8
Größe:	98,6 KB
ID:	34219

Code:
// DHT22 Struct
struct Humidity {
  int humidity;
  unsigned int humidityFrac;

  int temperature;
  unsigned int temperatureFrac;
};

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

const char* ssid = "<WlanSSID>";
const char* password = "<MeinWlanPasswort>";

#define DHTTYPE DHT22
const int DHTPin = D1;
DHT dht(DHTPin, DHTTYPE);

//Static IP
IPAddress ip(192, 168, 1, x);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  dht.begin();

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  //Disable WiFi AP
  WiFi.mode(WIFI_STA);

  //Set Static IP
  WiFi.config(ip, gateway, subnet);

  //Connect to WiFi
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());

}

void loop() {  
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();

  Humidity humidity = getHumidityAndTemperature();

  Serial.print("Humidity: ");
  Serial.print(humidity.humidity);
  Serial.print(".");
  Serial.print(humidity.humidityFrac);
  Serial.println("%");

  Serial.print("Temperature: ");
  Serial.print(humidity.temperature);
  Serial.print(".");
  Serial.print(humidity.temperatureFrac);
  Serial.println("*C");

  // Prepare the response
  String response = "HTTP/1.1 200 OK\r\nContent-Type: application/xml\r\n\r\n<?xml version='1.0'?><document>";
    response += "<humidity>";
    response += humidity.humidity;
    response += ".";
    response += humidity.humidityFrac;
    response += "</humidity>";

    response += "<temperature>";
    response += humidity.temperature;
    response += ".";
    response += humidity.temperatureFrac;
    response += "</temperature>";

    response += "<freeheap>";
    response += ESP.getFreeHeap();
    response += "</freeheap>";

    response += "<cpufreqmhz>";
    response += ESP.getCpuFreqMHz();
    response += "</cpufreqmhz>";

  response += "</document>\n";

  // Send the response to the client
  client.print(response);
  delay(1);
  Serial.println("Client disonnected");
  Serial.println(server.status());

  // The client will actually be disconnected
  // when the function returns and 'client' object is destroyed
}

Humidity getHumidityAndTemperature() {
  struct Humidity humidityStruct;
  float humidity =  dht.readHumidity();
  float temperature = dht.readTemperature();

  humidityStruct.humidity = int(humidity);
  humidityStruct.humidityFrac = (humidity - int(humidity)) * 100;

  humidityStruct.temperature = int(temperature);
  humidityStruct.temperatureFrac = (temperature - int(temperature)) * 100;

  return humidityStruct;
}
Viele Grüße
B4DschK4Pp