ich arbeite nebenbei an meiner Wetterstation. Die Ausgabe auf dem Webserver läuft, allerdings leider ohne die entsprechenden Sensorwerte. Die DHT Werte kommen im Seriellen Monitor an, werden aber nicht weiter ausgegeben. Das Anonemeter habe ich seperat auch schon getestet und der Code müsste funktionieren. Ich nehme einfach an, dass auch hier der Wert nicht mit übergeben wird. Wo ist mein Denkfehler?
#include <WiFi.h>
#include <Arduino.h>
#include "DHT.h"
#include <dht11.h>
#include <Adafruit_Sensor.h>
#include <NTP.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define uvsensor 13
#define photoresistor 32
const int fan1 = 13;
const int fan2 = 5;
const int anemosensor = 26;
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
WiFiServer server(80);
String textfeld;
const int anemoPin = 2;
int anemoValue = 0;
float sensorVoltage = 0;
float windSpeed = 0;
float voltageConversionConstant = .004882814; //This constant maps the value provided from the analog read function, which ranges from 0 to 1023, to actual voltage, which ranges from 0V to 5V[/color]
int sensorDelay = 1000; //Delay between sensor readings, measured in milliseconds (ms)
float voltageMin = 0; // Mininum output voltage from anemometer in mV.
float windSpeedMin = 0; // Wind speed in meters/sec corresponding to minimum voltage
float voltageMax = 4.0; // Maximum output voltage from anemometer in mV.
float windSpeedMax = 14; // Wind speed in meters/sec corresponding to maximum voltage
// Temp und Humity
int Wartezeit = 5000;
// Pin des Sensors
int SENSOR_DHT = 33;
// DHT11
#define SensorTyp DHT11
DHT dht(SENSOR_DHT, SensorTyp);
float Temperatur;
float Luftfeuchtigkeit;
void setup() {
// WLAN ----------------------------------------------------------------------
Serial.begin(115200);
dht.begin();
Serial.println("Verbindung zum Netzwerk wird aufgebaut");
WiFi.begin("ssid", "netzwerkschlüssel");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
pinMode (anemoPin, INPUT_PULLUP);
Serial.println("Erfolgreich verbunden - IP Addresse:");
Serial.println(WiFi.localIP());
// Uhrzeit
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);
ntp.begin();
server.begin(); // Server starten
}
void loop() {
WiFiClient client = server.available(); // Überprüft ob eine Anfrage vorhanden ist
if (client) { // Falls ein Client sich verbindet
Serial.println("Neuer Client:"); // Für die Anzeige im Seriellen Monitor das sich wer verbunden hat
String position = ""; // Platzhalter für eingehende Nachrichten
while (client.connected()) { // Schleife währendessen ein Client verbunden ist
if (client.available()) { // Wenn es was zu lesen gibt, sammeln und in den Serial schreiben
char symbol = client.read();
Serial.write(symbol);
textfeld += symbol;
if (symbol == '\n') { // Wenn eine neue Zeile kommt
if (position.length() == 0) { // Hier ist die HTTP-Antwort beendet und nun kann was geschickt werden
client.println("HTTP/1.1 200 OK"); // Einfacher HTTP-textfeld
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html><html>"); // Ab hier wird die HTML-Seite gezeigt
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"120\">");
client.println("<style>body { text-align: center; font-family: Arial;}"); // Eine schöne Tabelle erstellen
client.println("table { border-collapse: collapse; margin-left:auto; margin-right:auto; }");
client.println("th { padding: 12px; background-color: #00695c; color: white; }");
client.println("tr { border: 1px solid #dddddd; padding: 12px; }");
client.println("td { border: none; padding: 12px; }");
client.println("</style></head><body><h1>Wetter Kaulsdorf Nord</h1>");
ntp.update();
client.println(ntp.formattedTime("%A, %d. %B %Y")); // dd. Mmm yyyy
client.println("</br>");
client.println(ntp.formattedTime("%T"));
client.println("<table><tr><th>Messgröße </th><th>Messwert</th></tr>"); // Namen der Tabellen Eintrage
temphumity();
client.println("<tr><td>Temperatur</td><td>"); // Eintrag Temperatur
client.println(Temperatur);
client.println(" *C</td></tr>");
client.println("<tr><td>Luftfeuchtigkeit</td><td>"); // Eintrag Luftfeuchtigkeit
client.println(Luftfeuchtigkeit);
client.println(" %</td></tr>");
windmessung();
client.println("<tr><td>Windgeschwindigkeit</td><td>");
client.println(windSpeed*3.6);
client.println("km/h</br>");
client.println(windSpeed);
client.println("m/s </td></tr>");
int uvmessung = analogRead(uvsensor);
float light = analogRead(photoresistor);
client.println("<tr><td> Helligkeit und UV</td><td>");
switch (uvmessung) {
case 1: client.println ("Keine Schutzmaßnahmen nötig</td></tr>");break;
case 2: client.println ("Keine Schutzmaßnahmen nötig</td></tr>");break;
case 3: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 4: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 5: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 6: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 7: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 8: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 9: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 10: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 11: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
default: client.println ("Error</td></tr>");
}
}
}
}
}
}}
void windmessung() {
anemoValue = analogRead(anemoPin); //Get a value between 0 and 1023 from the analog pin connected to the anemometer
sensorVoltage = anemoValue * voltageConversionConstant; //Convert sensor value to actual voltage
//Convert voltage value to wind speed using range of max and min voltages and wind speed for the anemometer
if (sensorVoltage < voltageMin){
windSpeed = 0; //Check if voltage is below minimum value. If so, set wind speed to zero.
}else {
windSpeed = (sensorVoltage - voltageMin)*windSpeedMax/(voltageMax - voltageMin); //For voltages above minimum value, use the linear relationship to calculate wind speed.
}
}
void temphumity(){
String Temperatur = String(dht.readTemperature());
Temperatur.replace(".", ",");
Serial.println("Temperatur: " + Temperatur + " °C");
String Luftfeuchtigkeit = String(dht.readHumidity());
Luftfeuchtigkeit.replace(".", ",");
Serial.println("Luftfeuchtigkeit: " + Luftfeuchtigkeit + " %");
Serial.println();
delay(Wartezeit);
}
tippe oder füge den Code hier ein
Dein Problem ist die doppelte initialisierung der Variablen.
Nimm das String aus der Funktion "temphumity" raus und ändere in der Initialisierung am Anfang float in String für die Sensorwerte.
Aktuell hat die Variable (Temperatur und Luffeuchtigkeit) nur in der Funktion eine Gültigkeit.
Dann muss ein aktueller Sketch aber Fehler zeigen !
Und der Link zu deinem Board fehlt immer noch. ESP8288 ist nur eine Nummer die es als ESP nicht gibt.
Die Seite lädt nicht in sich neu, sondern wird alle 5 sek untereinander neu eingefügt.
Funktioniert aktuell die Übernahme vom Anemosensor nicht. Wie schon geschrieben, hat der Code seperat funktioniert, mit seriellem Monitor.
Licht und UV Sensor springen im Switch Case immer in default. Ich denke jetzt einfach mal das selbe Problem mit der Datenübernahme.
Da die Seite wie im Delay Wartezeit alle 5 sek neu prüft, wird nicht mehrmals die gleiche Ausgabe getätigt. (Ohne Delay bekomme ich min 5x den selben Zeitstempel mit identischen Werten).
#include <WiFi.h>
#include <Arduino.h>
#include "DHT.h"
#include <dht11.h>
#include <Adafruit_Sensor.h>
#include <NTP.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define uvsensor 13
#define photoresistor 32
const int fan1 = 13;
const int fan2 = 5;
const int anemosensor = 26;
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
WiFiServer server(80);
String textfeld;
const int anemoPin = 2;
int anemoValue = 0;
float sensorVoltage = 0;
float windSpeed = 0;
float voltageConversionConstant = .004882814; //This constant maps the value provided from the analog read function, which ranges from 0 to 1023, to actual voltage, which ranges from 0V to 5V[/color]
int sensorDelay = 1000; //Delay between sensor readings, measured in milliseconds (ms)
float voltageMin = 0; // Mininum output voltage from anemometer in mV.
float windSpeedMin = 0; // Wind speed in meters/sec corresponding to minimum voltage
float voltageMax = 4.0; // Maximum output voltage from anemometer in mV.
float windSpeedMax = 14; // Wind speed in meters/sec corresponding to maximum voltage
// Temp und Humity
String Temperatur;
String Luftfeuchtigkeit;
int Wartezeit = 5000;
// Pin des Sensors
int SENSOR_DHT = 33;
// DHT11
#define SensorTyp DHT11
DHT dht(SENSOR_DHT, SensorTyp);
void setup() {
// WLAN ----------------------------------------------------------------------
Serial.begin(115200);
dht.begin();
Serial.println("Verbindung zum Netzwerk wird aufgebaut");
WiFi.begin("xxxx", "xxxx");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
pinMode (anemoPin, INPUT_PULLUP);
Serial.println("Erfolgreich verbunden - IP Addresse:");
Serial.println(WiFi.localIP());
// Uhrzeit
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);
ntp.begin();
server.begin(); // Server starten
}
void loop() {
WiFiClient client = server.available(); // Überprüft ob eine Anfrage vorhanden ist
if (client) { // Falls ein Client sich verbindet
Serial.println("Neuer Client:"); // Für die Anzeige im Seriellen Monitor das sich wer verbunden hat
String position = ""; // Platzhalter für eingehende Nachrichten
while (client.connected()) { // Schleife währendessen ein Client verbunden ist
if (client.available()) { // Wenn es was zu lesen gibt, sammeln und in den Serial schreiben
char symbol = client.read();
Serial.write(symbol);
textfeld += symbol;
if (symbol == '\n') { // Wenn eine neue Zeile kommt
if (position.length() == 0) { // Hier ist die HTTP-Antwort beendet und nun kann was geschickt werden
client.println("HTTP/1.1 200 OK"); // Einfacher HTTP-textfeld
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html><html>"); // Ab hier wird die HTML-Seite gezeigt
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"120\">");
client.println("<style>body { text-align: center; font-family: Arial;}"); // Eine schöne Tabelle erstellen
client.println("table { border-collapse: collapse; margin-left:auto; margin-right:auto; }");
client.println("th { padding: 12px; background-color: #00695c; color: white; }");
client.println("tr { border: 1px solid #dddddd; padding: 12px; }");
client.println("td { border: none; padding: 12px; }");
client.println("</style></head><body><h1>Wetter Kaulsdorf Nord</h1>");
ntp.update();
client.println(ntp.formattedTime("%A, %d. %B %Y")); // dd. Mmm yyyy
client.println("</br>");
client.println(ntp.formattedTime("%T"));
client.println("<table><tr><th>Messgröße </th><th>Messwert</th></tr>"); // Namen der Tabellen Eintrage
temphumity();
client.println("<tr><td>Temperatur</td><td>"); // Eintrag Temperatur
client.println(Temperatur);
client.println(" *C</td></tr>");
client.println("<tr><td>Luftfeuchtigkeit</td><td>"); // Eintrag Luftfeuchtigkeit
client.println(Luftfeuchtigkeit);
client.println(" %</td></tr>");
windmessung();
client.println("<tr><td>Windgeschwindigkeit</td><td>");
client.println(windSpeed*3.6);
client.println("km/h</br>");
client.println(windSpeed);
client.println("m/s </td></tr>");
int uvmessung = analogRead(uvsensor);
float light = analogRead(photoresistor);
client.println("<tr><td> Helligkeit und UV</td><td>");
switch (uvmessung) {
case 1: client.println ("Keine Schutzmaßnahmen nötig</td></tr>");break;
case 2: client.println ("Keine Schutzmaßnahmen nötig</td></tr>");break;
case 3: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 4: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 5: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 6: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 7: client.println ("<b>Schutz erforderlich</b><br>In den Mittagsstunden Schatten aufsuchen<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 8: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 9: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 10: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
case 11: client.println ("<b>Schutz UNBEDINGT erforderlich</b><br>In den Mittagsstunden nicht draußen aufhalten<br>Im Schattenaufhalten<br>entsprechende Kleidung,Hut und Sonnenbrille tragen<br>Sonnenschutzmittel mit ausreichendem LSF</td></tr>");break;
default: client.println ("Error</td></tr>");
}
}
}
}
}
}}
void windmessung() {
anemoValue = analogRead(anemoPin); //Get a value between 0 and 1023 from the analog pin connected to the anemometer
sensorVoltage = anemoValue * voltageConversionConstant; //Convert sensor value to actual voltage
//Convert voltage value to wind speed using range of max and min voltages and wind speed for the anemometer
if (sensorVoltage < voltageMin){
windSpeed = 0; //Check if voltage is below minimum value. If so, set wind speed to zero.
}else {
windSpeed = (sensorVoltage - voltageMin)*windSpeedMax/(voltageMax - voltageMin); //For voltages above minimum value, use the linear relationship to calculate wind speed.
}
}
void temphumity(){
Temperatur = (dht.readTemperature());
Temperatur.replace(".", ",");
Serial.println("Temperatur: " + Temperatur + " °C");
Luftfeuchtigkeit = (dht.readHumidity());
Luftfeuchtigkeit.replace(".", ",");
Serial.println("Luftfeuchtigkeit: " + Luftfeuchtigkeit + " %");
Serial.println();
delay(Wartezeit);
}
du sollst am ESP kein server.println nehmen sondern du baust erst die ganze Seite in einem Buffer zusammen (z.B. message) und überträgst dann die ganze Seite mit einem
Also ich bin jetzt dank noiasca jetzt schon soweit, dass DHT und Regensensor funktionieren. Nun schwanken die °C um bis zu 8. Ich vermute das liegt daran, dass die Abfrage fast 1 zu 1 ausgegeben wird. Daher würde ich es gern so haben, dass die Abfrage einmal in der Minute getätigt wird bzw. die Übertragung auf den Server nur alle Minute stattfindet.
Hallo,
nein das kommt weil Du für die Temperatur zufällig generierte Werte verwendest.
Warum nimmst Du denn jetzt wieder eine so seltsame Vorlage die auf der AsysncWebServer lib beruht. mach doch das was @noiasca dir vorgeschlagen hat. Schau dir zunächst den HalloServer aus den Beispielen für den ESP an. @noiasca verwendet ebenfalls die standard lib für den ESP aus der zugehörigen core. #include <ESP8266WebServer.h>
Wenn Du ganz einfach einsteigen willst dann kann ich dir noch mein Geschreibsel anbieten zum Webserver mit fetch anbieten.