«

»

Gen 24

Stampa Articolo

WeMos D1 mini DHT22 Blynk

Il WeMos D1 mini DHT22 Blynk riprende il precedente articolo dedicato al progetto di lettura di un sensore di tipo DHT22 da parte di un ESP8266 e lo estende all’utilizzo con l’App Blynk.

WeMos D1 mini DHT22 Blynk data

In passato hai letto alcuni articoli dedicati a Blynk l’app con cui puoi realizzare delle interfacce grafiche per i tuoi progetti in modo semplice ed intuitivo:

Partendo dalla realizzazione di una interfaccia per la MKR1000 con cui inviare i dati di controllo di 4 relay allo stato solido hai visto come configurare l’app e lo sketch lato IDE Arduino.

In questo articolo cambi micro controllore passando ad un ESP8266 nella sua versione WeMos D1 mini DHT22 Blynk ossia con la lettura di un sensore di temperatura ed umidità e l’app per la visualizzazione del dato.

Configurazione del WeMos D1 mini DHT22 Blynk

Il primo passo consiste nella configurazione dell’app Blynk per lavorare con l’ESP8266 e più nel dettaglio con la WeMos D1 mini:

WeMos D1 mini DHT22 Blynk device settings

collegata in modalità WiFi, ottieni il token che dovrai inserire nello sketch per inviare i dati alla tua app.

Puoi farti inviare il token via email all’indirizzo di posta che hai inserito quando ti sei registrato all’app Blynk.

Dopo la configurazione del device puoi creare l’interfaccia, inizia dalla scelta del componente Gauge:

WeMos D1 mini DHT22 Blynk select widget

dal valore di 300 punti energia.

Configura l’elemento inserendo la label “Temp”

WeMos D1 mini DHT22 Blynk Gauge V0

ed il range di valori entro cui potrà ricevere i dati.

Siccome il valore di temperatura che il sensore DHT22 è in grado di rilevare varia da -40 a +80°C inserisci tali limiti nei valori possibili in arrivo dal sensore e pubblicati come V0 dall’app.

Come Label lascia il capo di default per visualizzare il valore di temperatura istantaneo che la WeMos D1 mini DHT22 Blynk invia all’app.

Aggiungi un secondo elemento di tipo Gauge per l’umidità i cui valori andranno da 0 a 100 essendo la misura del sensore valida all’interno di tale range:

WeMos D1 mini DHT22 Blynk Gauges

il tag virtuale su cui invierai il valore di umidità è V1.

Ed infine aggiungi un grafico storico dei valori inviati, questa funzionalità è gestita automaticamente dal server Blynk a cui invii i dati che provvede a collezionarli e renderteli disponibili in forma grafica:

WeMos D1 mini DHT22 Blynk data

Lo sketch WeMos D1 mini DHT22 Blynk

Lo sketch di raccolta dati WeMos D1 mini DHT22 Blynk riprende lo sketch del precedente e lo estende con le funzionalità di connessione WiFi e Libreria Blynk per ESP8266 di connessione al cloud:

#define BLYNK_PRINT Serial

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

#define DHTPIN 2
#define DHTTYPE DHT22

char auth[] = "IL TUO TOKEN BLYNK";
char ssid[] = "IL TUO SSID";
char pass[] = "LA TUA PASSWORD WIFI";

float h;
float t;

BlynkTimer timer;
DHT dht(DHTPIN, DHTTYPE);

void myTimerEvent() {
  getData();
  
  Blynk.virtualWrite(V0, t);
  Blynk.virtualWrite(V1, h);
}

void getData() {
  h = dht.readHumidity();
  t = (dht.readTemperature()-7.3);

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }


  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");
}

void setup() {
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  timer.setInterval(1000L, myTimerEvent);
  dht.begin();
  
  Serial.println("DHT22 Blynk ready !!!");
}

void loop() {
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
}

Descrizione dello sketch

iniziando dalla linea 01: definisci la costante BLYNK_PRINT come Serial;

linee 03-05: includi le librerie WiFi,Blynk per ESP8266 e DHT per leggere il sensore di temperatura ed umidità DHT22;

linee 07-08: definisci il pin a cui è collegato il sensore ed il tipo di sensore;

linee 10-12: definisci le tre variabili contenenti il Token Blynk, l’SSID e la password corrispondente;

linee 14-15: imposta due variabili globali di tipo float che userai per immagazzinare i dati relativi alla temperatura ed all’umidità;

linea 17: crea l’istanza timer per l’oggetto BlynkTimer con cui scandisci il tempo all’interno dello sketch e l’aggiornamento dei dati;

linea 18: inizializza l’istanza del DHT;

linea 20; definisci la funzione myTimerEvent() che imposterai come callback della liberia Blynk a timer definiti;

linea 21: all’interno della funzione myTimerEvent() richiama la funzione getData() con cui andrai a reperire le informazioni relative ai valori misurati dal sensore;

linee 23-24: invia i valori rilevati di Temperatura ( t ) e Umidità ( h ) ai rispettivi V0 e V1 deginiti sull’App; 

linee 27-43: la funzione getData() è la semplificazione della funzione loop() del precedente articolo in cui WeMos legge dal dht22 la temperatura e l’umidità e li colleziona nelle rispettive variabili;

linea 48: usa il metodo begin della libreria BlynkSimpleESP8266 passandole i tre valori: tocken, ssid e password;

linea 49: imposta il timer per la funzione di callback usando il metodo setInterval con un timer di 1000 millisecondi = 1 secondo e richiami la funzione myTimerEvent();

linea 50: inizializza la comunicazione con il sensore dht usando il solito begin come già descritto nei precedenti articoli dedicati a questo sensore;

linee 56-57: usando i metodi run delle due istanze Blynk e Timer ad ogni ciclo di loop esegui lo sketch e richiami tutte le funzioni di callback.

Al termine dell’Upload dello sketch potrai aprire il monitor seriale e visualizzerai una schermata simile alla seguente:

WeMos D1 mini DHT22 Blynk sketch

Ringrazio l’amico catoplepa per un utilissimo tutorial sul sensore e l’app da cui sono partito per realizzare questo tutorial.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/wemos-d1-mini-dht22-blynk.html

3 comments

  1. Salvatore

    Salve. Lo sketch funziona, ma ogni tanto blynk segnala Herthbeat timeout e mi arriva il messaggio su smartphone. Ho cambiato diversi sketch ma l’errore si ripresenta. come posso risolvere? Grazie per la risposta.
    Se mi indichi una e-mail ti posso inviare la schermata del serial monitor di Arduino Ide.
    Grazie.
    Salvatore Ferraro

    1. Mauro Alfieri

      Ciao Salvatore,
      sembra un problema di connessione.
      Ho cercato nel sito Blynk trovando un’ottima documentazione: http://docs.blynk.cc/

  2. Sandro

    @Salvatore
    Ciao ,prova ad aumentare il tempo nella riga 49 portalo da 1000 a 3000 ms (3 secondi) molte volte il device non riesce a processare un invio dati cosí veloce e si disconnette,mi è capitato più volte.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>