#include <Wire.h> // Wire Bibliothek für I2C-Display
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-Display: adresse 0x27, 2 Zeilen á 16
#include <WiFi.h> //Einbinden der WiFi-Bibliothek
#include <ESPAsyncWebServer.h> //Einbinden der Webserver-Bibliothek
#include <SPIFFS.h>
//Ein Objekt namens server erstellen. Der Bauplan bzw. die Klasse des
//Objekts heisst AsyncWebServer. Wir benutzen spaeter die Methoden
//on(), onNotFound() und begin() des Objekts. 80 bedeutet, dass der
//Webserver auf Port 80 Anfragen erwartet. Dies ist der Standard HTTP-Port.
AsyncWebServer server(80);
//WLAN-Zugangsdaten
char* ssid = "Wokwi-GUEST"; //hier muss die SSID stehen
//hier muss das Passwort stehen
// Beispiel LM75 auf dem Carrier Board hat
// die Adresse 1001.000R/W. Diese 7 Bits entsprechen 0x48
#define SLAVE_ADR 0x48 //I2C 7-Bit-Adr
char hellString[8];
int temperatur;
int hell;
int lm75_read(void) // Einlesen des Temperaturwerts
{
int i_msb;
Wire.beginTransmission(SLAVE_ADR); // Auf den Slave schreiben
Wire.write((byte)0x00); // Pointer auf 0 setzen
Wire.requestFrom(SLAVE_ADR, 1); // Ein Byte vom Slave anfordern
while (Wire.available()) // Wenn der Slave sendet
i_msb = Wire.read(); // Temperaturwert vom Slave lesen
Wire.endTransmission(); // Stoppbedingung
return i_msb; // Genauigkeit: +/- 1°C
}
void temperatur_ausgeben(){
lcd.setCursor(0, 0); // zuerst die Spalte, dann die Zeile
lcd.print("Temperatur: ");
// Messen der Temperatur
temperatur = lm75_read();
// Ausgabe auf LC-Display
lcd.print(temperatur);
lcd.write(0xDF); // Display-Code fuer das Grad Zeichen
lcd.print("C ");
delay(200);
}
void hell_ausgeben(){
hell = analogRead(34);
dtostrf(hell, 4, 0, hellString);
lcd.setCursor(0, 1);
lcd.print("Hell: ");
lcd.print(hellString);
lcd.print(" ");
}
void setup()
{
Wire.begin(21, 22); // I2C-Bus initialisieren SDA = 21, SCL = 22
lcd.init(); // LDC initialisieren
lcd.clear(); // LCD Anzeige löschen
lcd.print("ESP32 Webserver");
Serial.begin(115200); //serielle Schnittstelle initialisieren
Serial.print("Verbindungsaufbau zu ");
Serial.println(ssid);
WiFi.begin(ssid); //WiFi-Verbindung herstellen
//warten bis Verbindung steht
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("Verbindung hergestellt.\n Lokale IP: ");
Serial.println(WiFi.localIP());
Serial.print("ESP Board MAC Adresse: ");
Serial.println(WiFi.macAddress());
if (!SPIFFS.begin()) {
Serial.println("An Error has occurred while mounting SPIFFS!");
}
server.on("/", HTTP_GET, [] (AsyncWebServerRequest * request) {
request->send(SPIFFS, "/index.html", String(), false, processor);
});
server.on("/style.css", HTTP_GET, [] (AsyncWebServerRequest
*request) {
request->send(SPIFFS, "/style.css");
});
server.on("/temperatur.svg", HTTP_GET, [] (AsyncWebServerRequest *request){
request->send(SPIFFS, "/temperatur.svg");});
server.on("/helligkeit.svg", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->send(SPIFFS, "/helligkeit.svg"); });
server.onNotFound([] (AsyncWebServerRequest * request) {
request->send(404, "text/plain", "Seite nicht vorhanden!");
});
server.begin(); //Den Server starten mit der Methode begin()
}
void loop() {
temperatur_ausgeben();
hell_ausgeben();
temperatur = lm75_read();
hell = analogRead(34);
Serial.print("Temperatur = ");
Serial.print(temperatur);
Serial.print(" *C ");
Serial.print("Helligkeit = ");
Serial.println(hell);
delay(1000);
}
//Hier lassen sich die einzelnen Platzhalter ersetzen
String processor (String var) {
if (var == "TEMP") {return String(temperatur);}
if (var == "HELL") {return String(hell);}
}