Come realizzare un datalogger con la NodeMCU ESP8266 collegata all’Arduino Cloud

Introduzione

Arduino Cloud è una piattaforma web che serve a connettersi con dispositivi come Arduino, NodeMCU e così via in modo da raccogliere i dati da essi inviati e visualizzarli su una dashboard. Inoltre consente di comandare tali dispositivi sempre da appositi comandi della dashboard. Ha anche la possibilità di generare automaticamente gli sketch da caricare sulla board già correttamente configurati.
È necessario creare un proprio account per poter accedervi e cominciare a creare i propri oggetti (chiamati thing nella piattaforma). Insomma, con Arduino Cloud possiamo realizzare veri e propri progetti IoT (Internet of Things).

Cosa faremo in questo progetto?

Realizzeremo un semplice circuito composto da una NodeMCU ESP8266, un resistore da 4.7kΩ e un sensore DHT22 che rileverà ad intervalli regolari la temperatura e l’umidità ambientali. Questi dati però non verranno visualizzati su un display LCD o salvati su una SD card (come abbiamo invece fatto negli articoli Come fare un datalogger bluetooth per temperatura e umidità con Arduino MEGA e Termoigrometro con orologio e display LCD su Arduino UNO) ma verranno inviati verso l’Arduino Cloud.

Su questo cloud creeremo quindi un oggetto (o thing) in grado di leggere i dati inviati dalla nostra board NodeMCU e di visualizzarli sulla sua dashboard in maniera grafica.

La piattaforma genererà lo sketch di base automaticamente, noi lo prenderemo e creeremo a partire da esso un progetto su PlatformIO in modo da svincolarci dalla piattaforma e utilizzarla solo per la raccolta e visualizzazione dei dati. Completeremo il codice generato dal cloud con la parte che gestisce il sensore DHT22 e che fa le misurazioni di temperatura ed umidità.

Di che componenti abbiamo bisogno?

La lista dei componenti non è particolarmente lunga:

Realizzazione del progetto

Lo schema elettrico

Prima di realizzare il circuito vero e proprio diamo un’occhiata al pinout della board:

Il pinout del NodeMCU ESP8266
Il pinout del NodeMCU ESP8266

Useremo il GPIO 14 (segnato con l’etichetta D5 sulla board) per collegare il sensore DHT22.

Mentre il pinout del sensore DHT22 è il seguente:

Il sensore DHT22 e la sua piedinatura
Il sensore DHT22 e la sua piedinatura

Di seguito lo schema di montaggio realizzato con Fritzing:

Schema elettrico del progetto
Schema elettrico del progetto

Come puoi vedere, l’alimentazione per il DHT22 è presa dall’uscita 3.3V del NodeMCU (pin 3V3). E’ necessario alimentare il sensore con 3.3V in modo che anche la sua uscita sia 3.3V in quanto i pin digitali del NodeMCU non accettano tensioni superiori a 3.3V.

ATTENZIONE: nel NodeMCU ESP8266 la tensione massima tollerata dagli ingressi digitali è pari a 3.3V. Qualsiasi tensione superiore lo danneggerebbe irreparabilmente!!

Il pin di uscita è collegato all’alimentazione tramite una resistenza di pull-up da 4.7kΩ e poi, tramite il filo bianco, al pin D5 (che corrisponde a GPIO14).

Creiamo gli oggetti e la dashboard su Arduino Cloud

Per prima cosa, se non lo hai già fatto, devi crearti un account su Arduino Cloud. Una volta che hai fatto il login ti troverai di fronte a questa pagina:

Pagina iniziale di Arduino Cloud
Pagina iniziale di Arduino Cloud

Clicca sul pulsante GET STARTED e verrai mandato alla pagina:

Seconda pagina di Arduino Cloud
Seconda pagina di Arduino Cloud

Clicca sul pulsante IoT Cloud. Si aprirà la pagina Things.

A questo punto procederai a:

  • creare il device che mapperà la board
  • creare l’oggetto (thing) con le variabili (temperature e humidity) da rilevare e mostrare sulla dashboard associato al device creato al passo precedente
  • creare la dashboard da associare alle variabili rilevate dall’oggetto

Vedremo la procedura appena elencata con questo video:

Creazione del device, dell’oggetto e della dashboard su Arduino Cloud

NOTA BENE: è importante notare che al minuto 1:06 ho scaricato un pdf che contiene i parametri di collegamento al device. Essi sono chiamati Device ID e Secret Key e ci serviranno in seguito. Quindi scarica anche tu questo pdf e conservalo da qualche parte.

Ovviamente i parametri Device ID e Secret Key sono propri di ciascun device, quindi cambiano al variare del device.

Una volta completata la procedura, vai sull’ oggetto test_thing e clicca sul tab Sketch:

Schermata delle proprietà dell'oggetto
Schermata delle proprietà dell’oggetto

Premi poi il bottone Open full editor:

Schermata dello sketch
Schermata dello sketch

Si aprirà una finestra come questa:

Schermata del codice completo
Schermata del codice completo

Ciò che ci interessa (e che useremo successivamente) sono il file principale .ino (quello che in foto si chiama test_thing_feb15b.ino e che da te avrà un nome diverso) e il file thingProperties.h. Questi due file li useremo in seguito nel nostro progetto PlatformIO.

Creiamo il progetto PlatformIO

Abbiamo già visto la procedura di creazione di un progetto PlatformIO nell’articolo Come creare un progetto per NodeMCU ESP8266 con PlatformIO. Delle librerie indicate installa, seguendo la procedura, la libreria DHT sensor library for ESPx by Bernd Giesecke (che viene usata per leggere i dati trasmessi dal sensore di temperatura e umidità DHT22) e lascia perdere le altre due (WiFiManager e UniversalTelegramBot)

Installa invece, sempre seguendo la solita procedura, la libreria Arduino_ConnectionHandler:

Installazione della libreria Arduino_ConnectionHandler
Installazione della libreria Arduino_ConnectionHandler

e la libreria ArduinoIoTCloud:

Installazione della libreria ArduinoIoTCloud
Installazione della libreria ArduinoIoTCloud

Per il momento il file platformio.ini dovrà apparire così (potranno eventualmente cambiare le versioni delle librerie):

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps = 
	arduino-libraries/Arduino_ConnectionHandler@^0.7.3
	arduino-libraries/ArduinoIoTCloud@^1.10.0
        beegee-tokyo/DHT sensor library for ESPx@^1.18

A questo punto torna alla piattaforma cloud, copia il contenuto del file .ino:

Il file .ino
Il file .ino

e incollalo nel file main.cpp del progetto PlatformIO, in modo da sostituirne completamente il contenuto.

Ora crea nella cartella include un file che chiamerai thingProperties.h, vai nella piattaforma cloud, copia il contenuto del tab thingProperties.h:

Il file thingProperties.h
Il file thingProperties.h

e incollalo nel file thingProperties.h appena creato nella cartella include.

A questo punto dovrai editare questo file in modo da collegarlo al cloud:

const char DEVICE_LOGIN_NAME[]  = "4da2b100-b400-4b54-9c97-645a3d048b3a";

const char SSID[]               = SECRET_SSID;    // Network SSID (name)
const char PASS[]               = SECRET_OPTIONAL_PASS;    // Network password (use for WPA, or use as key for WEP)
const char DEVICE_KEY[]  = SECRET_DEVICE_KEY;    // Secret device password

Come vedi, in questa sezione ci sono alcuni parametri da impostare.

Il primo parametro (DEVICE_LOGIN_NAME) è stato aggiunto automaticamente e lo trovi nel pdf che hai scaricato quando hai creato l’oggetto (trovi il riferimento nel video precedente). Nel pdf il parametro è chiamato Device ID.

I parametri SECRET_SSID e SECRET_OPTIONAL_PASS sono, rispettivamente, il nome e la password della tua rete WiFi. Quindi, al posto di SECRET_SSID metterai il nome della tua rete tra doppi apici (“) e al posto di SECRET_OPTIONAL_PASS metterai la password della tua rete (sempre fra doppi apici).

L’ultimo parametro, SECRET_DEVICE_KEY, lo trovi sempre nel pdf che hai scaricato dalla piattaforma col nome Secret Key.

Quindi la sezione in oggetto dovrebbe avere un aspetto del genere:

const char DEVICE_LOGIN_NAME[]  = "4da2b100-b400-4b54-9c97-645a3d048b3a";
const char SSID[]               = "test_cloud";    // Network SSID (name)
const char PASS[]               = "5ty513y8o9";    // Network password (use for WPA, or use as key for WEP)
const char DEVICE_KEY[]  = "TYWLGFTYNMKNV8UGCYRA";    // Secret device password

Modifichiamo i file main.cpp e platformio.ini

Ora aggiungi al file platformio. ini le righe:

monitor_speed = 115200
upload_speed = 921600

in modo che assuma questo aspetto:

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
monitor_speed = 115200
upload_speed = 921600
lib_deps = 
	arduino-libraries/Arduino_ConnectionHandler@^0.7.3
	arduino-libraries/ArduinoIoTCloud@^1.10.0
	beegee-tokyo/DHT sensor library for ESPx@^1.18

A questo punto dovrai fare le modifiche sul file main.cpp in modo da aggiungere le parti che gestiscono il sensore DHT22.

#include "DHTesp.h"
DHTesp dht;
#define  DHT22_PIN 14

Aggiungi queste righe subito dopo gli include. Con questo pezzo di codice includiamo la libreria DHT22, istanziamo l’oggetto dht e definiamo il pin 14 (GPIO14) per la lettura del sensore.

Nella funzione setup modifica la riga:

Serial.begin(9600);

in:

Serial.begin(115200);

e aggiungi, alla fine della funzione, la riga:

dht.setup(DHT22_PIN, DHTesp::DHT22); // Connect DHT sensor to GPIO 14 (D5)

che collega il sensore DHT22 al GPIO14 in modo che possano comunicare.

Nella funzione loop aggiungi queste righe:

delay(dht.getMinimumSamplingPeriod());

humidity = dht.getHumidity();
temperature = dht.getTemperature();

Serial.println(temperature);
Serial.println(humidity);

che servono a fare la lettura dal sensore e a mettere i valori acquisiti nelle variabili temperature e humidity in modo da poterli inviare al cloud.

Puoi comunque scaricare il progetto dal link sotto:

A questo punto compila il progetto e caricalo sulla board. Se tutto è andato bene dovresti vedere le misurazioni di temperatura ed umidità sulla dashboard di Arduino Cloud, come mostrato nel video seguente:

La dashboard mostra i dati acquisiti dalla board

Newsletter

Se vuoi essere aggiornato sui nuovi articoli, iscriviti alla newsletter. Prima dell’iscrizione alla newsletter leggi la pagina Privacy Policy (UE)

Se ti vuoi disiscrivere dalla newsletter clicca sul link che troverai nella mail della newsletter.

Inserisci il tuo nome
Inserisci la tua email
0 0 votes
Valutazione articolo
guest
0 Commenti
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
Torna in alto