/********* Rui Santos Complete project details at https://RandomNerdTutorials.com https://randomnerdtutorials.com/esp8266-ds18b20-temperature-sensor-web-server-with-arduino-ide/ mit Sensor DS18B20 *********/ #include #include #include #include #include #include #include #define ONE_WIRE_BUS 4 /* SensorDS18B20 an GPIO 4 = D2 */ static const char compileFILE[] PROGMEM = __FILE__; /* hh:mm:ss */ static const char compileDATE[] PROGMEM = __DATE__; /* Mmm dd yyyy */ /* Setup a oneWire instance to communicate with any OneWire devices */ OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); /* Variables to store temperature values */ String temperatureF = ""; String temperatureC = ""; String defective = ""; bool err_tempC = 0; bool err_tempF = 0; bool zu_kaltC = 0; bool zu_kaltF = 0; uint8_t tog = 1; /* Timer variables */ unsigned long lastTime = 0; unsigned long timerDelay = 5000; const char* ssid = "......"; /* Enter your WIFI ssid */ const char* password = "......"; /*Enter your WIFI password */ AsyncWebServer server(80); /* Create AsyncWebServer object on port 80 */ /* Fkt um die DS18B20 Temperatur zu messen, umgewandelt in °C */ String readDSTemperatureC() { /* static uint8_t tog = 1; */ float tempC = 0; err_tempC = 0; zu_kaltC = 0; sensors.requestTemperatures(); tempC = sensors.getTempCByIndex(0); /* if(tempC == -127.00) {*/ if(tempC < -100.00) { err_tempC = 1; return "--.--"; } else { if(tog) { tempC = tempC + 0.01; } else { tempC = tempC - 0.01; } /* tog = (!tog); */ Serial.print("Temperatur Celsius: "); Serial.println(tempC); /* Serial.println(tog); */ if(tempC < 10.0) zu_kaltC = 1; } return String(tempC); } /* Fkt um die DS18B20 Temperatur zu messen, umgewandelt in °F */ String readDSTemperatureF() { /* static uint8_t tog = 1; */ float tempF = 0; err_tempF = 0; zu_kaltF = 0; sensors.requestTemperatures(); tempF = sensors.getTempFByIndex(0); if(tempF < -100.00) { err_tempF = 1; return "--.--"; } else { if(tog) { tempF = tempF + 0.01; } else { tempF = tempF - 0.01; } /* tog = (!tog); */ Serial.print("Temperatur Fahrenheit: "); Serial.println(tempF); /* Serial.println(tog); */ if(tempF < 10.0) zu_kaltF = 1; } return String(tempF); } /* Fkt um bei DS18B20 Fehler Fehlermeldung zu erzeugen */ String readDSTemperatureERR() { String noError = ""; if((!err_tempC)&&(!err_tempF)&&(!zu_kaltC)&&(!zu_kaltF)) { Serial.println("\nSensor DS18B20 ist ok\n"); noError = "kein Fehler"; } if(err_tempC||err_tempF) { Serial.println("Sensor DS18B20 ist nicht ok"); noError = "Kann Sensor DS18B20 nicht lesen"; } if(((zu_kaltC)||(zu_kaltF))&&(!err_tempC)&&(!err_tempF)) { Serial.println("Das ist zu kalt"); noError = "Das ist zu kalt"; } /* Serial.print(zu_kaltC); Serial.print(zu_kaltF); Serial.print(err_tempC); Serial.println(err_tempF);*/ return String(noError); } /* Replaces placeholder with DS18B20 values */ String processor(const String& var) { //Serial.println(var); if(var == "TEMPERATUREC") { return temperatureC; } else if(var == "TEMPERATUREF") { return temperatureF; } else if(var == "DEFECTIVE") { return defective; } return String(); } const char index_html[] PROGMEM = R"rawliteral(

DS18B20 HaWi

Version V1.0, 03.11.2024

Temperatur: %TEMPERATUREC% °C

Temperatur: %TEMPERATUREF% °F

Fehlermeldung: %DEFECTIVE% )rawliteral"; void setup() { Serial.begin(115200); /* Serial port for debugging purposes */ Serial.println(); Serial.println(""); Serial.println("\nFilename: "); Serial.println(FPSTR(compileFILE)); Serial.print("Datum: "); Serial.println(FPSTR(compileDATE)); Serial.println(""); sensors.begin(); /* Start up the DS18B20 library */ temperatureC = readDSTemperatureC(); temperatureF = readDSTemperatureF(); defective = readDSTemperatureERR(); WiFi.begin(ssid, password); /* Connect to Wi-Fi */ Serial.println("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("IP address: "); Serial.println(WiFi.localIP()); /* Print ESP8266 Local IP Address */ // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send_P(200, "text/html", index_html, processor); }); server.on("/temperaturec", HTTP_GET, [](AsyncWebServerRequest *request) { request->send_P(200, "text/plain", temperatureC.c_str()); }); server.on("/temperaturef", HTTP_GET, [](AsyncWebServerRequest *request) { request->send_P(200, "text/plain", temperatureF.c_str()); }); server.on("/errormessage", HTTP_GET, [](AsyncWebServerRequest *request) { request->send_P(200, "text/plain", defective.c_str()); }); server.begin(); /* Start server */ } void loop() { if ((millis() - lastTime) > timerDelay) { temperatureC = readDSTemperatureC(); temperatureF = readDSTemperatureF(); defective = readDSTemperatureERR(); tog = (!tog); lastTime = millis(); } }