/*

Termometro letto a distanza tramite internet.

Utilizzando un controller wemos ed un sensore di temperatura ed umidità DHT11
possiamo monitorare questi valori da qualunque posto ci troviamo
pur di avere una connessione ad internet.

Per realizzare il progetto si utilizzano il modulo Wemos D1 mini, un sensore DHT11
alcuni cavi di connessione ed un alimentatore usb.
Il software utilizzato è il codice INO sottostante e la piattaforma Thingspeak
ove registrarsi che raccoglie i dati e li visualizza in uno o più grafici.
*/

/*

Connessioni:
Il modulo DHT11 ha 3 pin (VCC, DATA, GND) il controller Wemos ne ha molteplici
ma noi utilizziamo il pin a 3.3Volt, il pin D4, il pin GND. I collegamenti
sono i seguenti:

Alimentazione VCC DHT11 –> 3.3V PIN Wemos
GND shield DHT11 ———> GND PIN Wemos
Data DHT11 —————> D4 PIN Wemos

Si ringrazia l’autore Adriano Gandolfo (www.adrirobot.it) da dove ho ricavato numerose ed esenziali notizie.

*/

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

// Inserire la chiave API del proprio canale, il nome
// del proprio SSID con relativa password
String apiKey = “xxxx”;
const char* ssid = “xxxx”;
const char* password = “xxxx”;
const char* server = “api.thingspeak.com”;

#define DHTPIN D4
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;

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

WiFi.begin(ssid, password);

Serial.println();
Serial.println();
Serial.print(“Connessione “);
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connessa”);

}

void loop()
{

float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println(“Fallito lettura dati da sensore DHT!”);
return;
}

if (client.connect(server, 80)) {
String postStr = apiKey;
postStr += “&field1=”;
postStr += String(t);
postStr += “&field2=”;
postStr += String(h);
postStr += “\r\n\r\n”;

client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: ” + apiKey + “\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);

Serial.print(“Temperatura: “);
Serial.print(t);
Serial.print(” °C Humidità “);
Serial.print(h);
Serial.println(“Invio dati a Thingspeak”);
}
client.stop();

Serial.println(“Attesa di 20 sec”);
// thingspeak richiede almeno un ritardo di 15 secondi
// tra gli aggiornamenti, 20 secondi per essere sicuri
delay(20000);
}