#ifdef ARDUINO_ARCH_ESP32 //Uso librerie diverse per esp32 o esp8266
#include <WiFi.h>
#include<WebServer.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd = LiquidCrystal_I2C (0x27, 16, 2);
WebServer server(80);
#else
#include <ESP8266WiFi.h>
#include<WiFiClient.h>
#include<ESP8266WebServer.h>
#include<ESP8266mDNS.h>
ESP8266WebServer server(80);
#endif
//#include "DHTesp.h"
#include<DHT.h>
#include<ThingSpeak.h>
//#include "secret.h"
#define DHTPIN 2 //pin a cui è collegato il sensore
#define DHTTYPE DHT22 //definisce il tipo di sensore
//Da secret.h
#define WSSID "Wokwi-GUEST" //Inserire il nome della rete WiFi a cui collegarsi
#define PASS "" //Inserire la password della rete WiFi a cui collegarsi
#define API_KEY "BC89SZYI6IZQZQ9W" //Inserire l'API_KEY del canale ThingSpeak
#define SERVER_THINGSPEAK "api.thingspeak.com" //
#define NUMERO_CANALE 2108806 //Numero del proprio canale su ThingSpeak
DHT dht(DHTPIN, DHTTYPE); //Istanza della classe DHT
float t, h; //Sono le variabili per temperatura e umidità
//Costruttore di classe
//ESP8266WebServer serverESP8266(80);
WebServer serverESP32(80);
WiFiClient client;
void setup() {
lcd.init();
lcd.backlight();
dht.begin(); //Avvia la comunicazione col sensore
Serial.begin(115200);
Serial.println("setup");
ThingSpeak.begin(client);
WiFi.mode(WIFI_STA); //Stabilisce la connessione
WiFi.begin(WSSID, PASS); //Accesso alla rete
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP());
//MDNS.begin("dht22"); //potremo raggiungere il server all’indirizzo http://dht22.local/
server.on("/", sendTemp); //chiamata alla funzione "sendTemp"
server.begin(); //avvia il server
}
void loop() {
h = dht.readHumidity(); //Legge il valore di umidità e lo assegna ad h
t = dht.readTemperature(); //Legge il valore di temperatura e lo assegna a t
server.handleClient(); //Questo metodo controlla periodicamente se ci sono richieste dai client
//MDNS.update(); //Aggiorna il nome del server
//Se vogliamo leggere i dati anche sulla seriale
//TempAndHumidity data = dht.getTempAndHumidity();
//Serial.println("Temp: " + String(data.temperature, 2) + "°C");
//Serial.println("Humidity: " + String(data.humidity, 1) + "%");
//TempAndHumidity data = dht.getTempAndHumidity();
Serial.println("Temp: " + String(t, 2) + "°C");
Serial.println("Humidity: " + String(h, 2) + "%");
lcd.setCursor(0, 0);
lcd.println("Temp: "+ String(t, 2)+ "C");
lcd.setCursor(0, 1);
lcd.println("Humidity: " + String(h, 2) + "%");
ThingSpeak.setField(1,t); //Setta il valore di t al relativo campo di ThingSpeak
ThingSpeak.setField(2,h); //Setta il valore di t al relativo campo di ThingS
ThingSpeak.writeFields(2108806,"BC89SZYI6IZQZQ9W"); //Invia i dati su ThingSpeak
Serial.println("---");
delay(1000);
}
//Funzione che invia i dati al client
/*
*Ad esempio:
*Temperatura 25.90 gradi
*Umidità 34.20%
*/
void sendTemp()
{
String page=""; //Qui concateniamo i dati da inviare al client per la visualizzazione
page += "Temperatura"; //+= esegue la concatenazione tra le stringhe
page += String(t, 2); //Istanza della classe Stirng() che ritorna la stringa di t con 2 decimali
page += "gradi";
page += "\n"; //A capo
page += "Umidità";
page += String(h, 2); //Istanza della classe Stirng() che ritorna la stringa di h con 2 decimali
page += "%";
server.send(200, "text/plain", page); //Invia la risposta al client con la stinga page
}