Sensore DHT11 usando un Wemos D1 mini e invio dati sul canale ThingSpeak 

In questo piccolo esempio, vorremmo mostrarvi le potenzialità di una scheda Wemos D1 mini, collegando un sensore di temperatura e umidità DHT11 e pubblicando tutte le misurazioni sul nostro canale ThingSpeak, che costruirà di volta in volta i grafici con i dati forniti.

A differenza di un Arduino Micro, il Wemos D1 mini è dotato di hardware per la connessione WiFi ad un prezzo più che ottimo. 

Wemos D1 Mini dispone di 11 pin I/O digitali, 1 solo ingresso analogico e tutti i pin I/O funzionano con una tensione di alimentazione di 3,3V; la memoria disponibile è di 4MB.

Wemos D1 Mini

Wemos D1 Mini Pinout

Wemos D1 Mini Technical specifics

Il DHT11 é un modulo sensore composito di umidità e temperatura. Il segnale in uscita é calibrato e contien entrambi i dati di temperatura e umidit. L'applicazione della tecnologia digitale di raccolta dati e la tecnologia di rilevamento di temperatura e umidità, garantisce che il prodotto abbia alta affidabilità ed eccellente stabilità a lungo termine. Il sensore include un resistore sensibile all'umidità e un sensore di temperatura NTC collegati con unmicrocontrollore a 8 bit.

Normalmente il DHT11 viene utilizzato come modulo giá provvisto di resistenza e collegabile direttamente a vdd o 3v3. Il modulo DHT11 si presenta come nell'immagine seguente:

Se non volessimo utilizzare il modulo, bensí il componente, allo stesso modo, potremo utilizzare un collegamento come il seguente aggiungendo noi una resistenza adeguata.

In basso alcune fotografie del circuitino che andremo a costruire, spero siano chiare, comunque abbiamo incluso anche uno schema che trovate più in basso

Wemos D1 Circuito

Wemos D1 Circuito

Wemos D1 Circuito

Schema collegamento Wemos D1 Sensore di temperatura e umidità DHT11 o DHT22

Il PIN del Wemos D1 Mini dove abbiamo collegato il DHT11 è il D5 che corrisponde al 14 ( Vedi Pinout nella foto e nel codice in basso ). 

Una breve descrizione dei componenti e alcune foto dei tre sensori che andremo a collegare al nostro micro controllore utilizzando una basetta o breadboard 400 punti.

BREADBOARD 400 Punti

La breadboard o basetta, è il componente fondamentale per realizzare i tuoi circuiti perchè non hai bisogno di saldare nulla in quanto ti permette di staccare e riattaccare i componenti utilizzando i forellini.

Come mostrato nelle fotografie in basso, i forellini delle righe orizzontali fino alla linea centrale di divisione sono collegati elettricamente tra loro, mentre le strisce verticali lungo la basetta sono solitamente utilizzate per i collegamenti di massa (GND) e alimentazione (VCC).

Breadboard basetta caratteristiche di funzionamento, piedinatura 

Breadboard basetta 400 punti collegamenti   

FOTO 3

SENSORE DI TEMPERATURA E UMIDITA' RELATIVA DHT22

Il sensore DHT22 chiamato anche AM2302, rileva l'umidità relativa e la temperatura di un ambiente trasmettendola digitalmente tramite il pin "DATA".Di solito i sensori DHT22 sono già equipaggiati di una resistenza ed collegabile direttamente a VCC ma nel caso non lo fosse, per un corretto funzionamento è buona consuetudine aggiungere sempre una resistenza compresa tra 4.7K e 10Kohm tra VCC e il pin DATA. 

Il sensore di umidità è di tipo capacitivo, utilizza al massimo 2.5mA in fase di lettura e permette di acquisire al massimo un campione ogni 2 secondi.


La misurazione dell’umidità varia da 0 a 100% con un’accuratezza tipica pari al ±2%.
Per quanto riguarda la temperatura invece il DHT22 ha un range di misurazione tra -40 e +80°C con un accuratezza di ±0.5°C grazie al sensore DS18B20 integrato al suo interno. 

DHT22 connections

FOTO 4

LISTA DELLA SPESA

Per iniziare, ecco la lista della spesa, trovi tutto sul nostro sito:

Ora dovremo crearci un'account sul sito web di thingspeak – https://thingspeak.com. Una volta creato l'account dovremo configurare un canale dove visualizzare i dati pubblicati dal nostro dispositivo e creeremo tre campi, uno per la temperatura, l'altro per l'umidità e lìultimo per il punto di rugiada che abbiamo calcolato utilizzando una funzione che vedete nel codice più in basso. I campi dati rilevati dal nostro sensore DHT11. La schermata, apparirà come segue:

Example Wemos D1 Mini Temperature Humidity ThingSpeak Channel Settings

Infine molto importante è ottenere la chiave API in scrittura che vi servirà, insieme all'ID Canale, per poter scrivere i dati su ThingSpeak.

Per ottenere la chiave API in scrittura dovete cliccare su "Chiavi API" e successivamente copiare la chiave generata. ( Ad esempio: 44G47BGQSZ6TV2XO )

Potete anche vedere le rilevazioni dei nostri dispositivi sul nostro canale ThingSpeak - MR WATT Temperature Example

Una volta terminato il circuito e verificato che tutti i collegamenti sono a posto, prima di caricare il codice nel Wemos D1 Mini, dovete inserire la SSID e la password del vostro WiFi per permettere la connessione ad internet del dispositivo e inoltre l'ID del canale e la chiave API in scrittura del vostro account ThingSpeak.

Per poter caricare il codice in basso, dovete scaricare la IDE Arduino e , una volta installata, aggiungere come gestore di schede il Wemos D1, inserendo il seguente link  in "File" / "Impostazioni" nella casella "URL Aggiuntive per il gestore Schede".

Successivamente nel menù "Strumenti" impostate le opzioni come nella foto che segue:

Wemos D1 Mini Arduino IDE Configuration  

Codice:

#include <ESP8266WiFi.h>
#include <stdio.h>
#include <ThingSpeak.h>
#include <Wire.h>
#include <DHT.h>
#include <Arduino.h>
#include <ctype.h> // for isNumber check

// Wifi Settings
char ssid[] = "<XXXXXXXXXXXXXXX>"; // your network SSID (name)
char pass[] = "<XXXXXXXXXXXXXXX>"; // your network password

float dewpt=0; // dew point tempf

WiFiClient client;

//Initialize DHT22 Sensor
#define DHTPIN 14 // what digital pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);


// ThingSpeak Settings

unsigned long myChannelNumber = <XXXXXXXXXX>; // Your ThingSpeak Chennel
const char * myWriteAPIKey = "<XXXXXXXXXXX>";


void setup() {
Serial.begin(9600);
Serial.println();
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
Serial.println("WEATHER STATION - Temperature using Sensor DHT22 - Powered By MR WATT");
Serial.println("BootStrap...");


// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);

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

Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output


// DHT22 Test
Serial.println("Initialize DHT22...");
dht.begin();

// Initialize ThingSpeak
ThingSpeak.begin(client);

}


void loop() {
// Wait a few seconds between measurements.
delay(5000);

float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
float dewpt = 0;

// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(temperature, humidity, false);

dewpt = (dewPoint(temperature, humidity));


Serial.print("t Temperature DHT22: ");
Serial.print(temperature);
Serial.print("C ");
Serial.print("t Humidity: ");
Serial.print(humidity);
Serial.print("%");
Serial.print("t Dew Point: ");
Serial.print(dewpt);

// Write to ThingSpeak
ThingSpeak.setField(1,temperature);
ThingSpeak.setField(2,humidity);
ThingSpeak.setField(3,dewpt);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

delay(15000);
client.stop();

}


// This is section the function that the interrupt calls to increment the rotation count
//---------------------------------------------------
////////////////////////////////////FUNCTIONS////
//---------------------------------------------------


// Functions

// Print Wifi Status

void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}


// Dew Point function
double dewPoint(double temperature, double humidity) //Calculate dew Point
{
double A0= 373.15/(273.15 + temperature);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078);
return (241.88 * T) / (17.558-T);
}

Quì trovate il codice su GitHub

Risultati

Dopo qualche minuto di funzionamento del nostro dispositivo, potremo vedere quanto segue nel nostro canale:

Thingspeak DHT11 Grafico Umidità:

Wemos D1 Mini Grafico Umidità

ThingSpeak DHT11 - Grafico Punto di TemperaturaWemos D1 Mini Graifco di Temperatura

ThingSpeak Grafico di punto di rugiada

Wemos D1 Mini DHT11 Temperature Graph