Interfacciamo la nostra Demoboard ESP32 ad Arduino IoT Cloud, per visualizzare e controllare sensori da remoto tramite una dashboard web e APP per smartphone.
Recentemente abbiamo dedicato tre articoli ad un progetto che abbiamo voluto per facilitare la prototipazione di applicazioni e sistemi in ambito IoT, basate quindi su un’unità di elaborazione ed una serie di periferiche tra cui sensori ed attuatori sia locali che collegabili tramite connettori; l’unità di calcolo che abbiamo scelto è un SoC ESP32 dotato di connettività wireless e montato su una scheda YB555 commercializzata dalla Futura Elettronica (www.futurashop.it) mentre le periferiche sono sia relé e pulsanti locali, sia sensori di pressione, temperatura, qualità dell’aria e dell’acqua, attività atmosferica, nonché interfacce come la NFC/RFID commercializzati sotto forma di breakout board e applicabili alla scheda, tramite opportuni connettori. Con questa scheda abbiamo preparato alcune applicazioni dimostrative per spiegare come utilizzare l’hardware correlato, rimanendo, però, in ambito locale, ossia sull’acquisizione di parametri ambientali attravrso i sensori e sulla gestione locale di attuatori. Tutti i relativi dati sono stati trattati localmente e utilizzati, ad esempio, per essere visualizzati sul display OLED di bordo o per azionare attuatori locali.
Dopo avervi fornito una panoramica su ciò che è possibile fare con la Demoboard ESP32 ed i suoi connettori di espansione, facciamo un salto di qualità e spostiamo le applicazioni affacciandole a Internet. In particolare, in questa puntata vediamo come collegare il tutto al cloud, in modo da poter visualizzare e controllare sensori e attuatori da remoto, tramite una dashboard web ed una applicazione mobile per smartphone.
Arduino IoT Cloud
Per fare ciò utilizzeremo non un cloud qualsiasi, ma la piattaforma Arduino Cloud, ed in particolare l’applicazione Arduino IoT Cloud; questo perché di fondo la nostra demoboard è basata su un hardware Arduino-compatibile, che è la scheda wireless ESP32: non a caso la programmiamo con l’IDE Arduino.
Per utilizzare il cloud dell’ambiente Arduino e realizzare applicazioni da interfacciare ad esso, la prima cosa da fare è creare un account Arduino, visitando il sito https://cloud.arduino.cc e cliccando, nella pagina web che appare, sul pulsante “Get Started”.
Facendo ciò, verrà visualizzato un form per effettuare l’accesso alla piattaforma, ma noi selezioneremo “Don’t have an account yet? Create one”. Dopo aver seguito i passaggi necessari e confermato l’indirizzo e-mail, ci troveremo davanti alla home di Arduino Cloud, dove cliccheremo sull’icona “IoT Cloud”.
I concetti di Thing, Cloud Variable e Device
La piattaforma si basa su alcuni concetti molto semplici, il principale dei quali è la “Thing” ovvero la rappresentazione virtuale di un oggetto con determinate caratteristiche, dove ogni caratteristica è corrispondente ad una “Cloud Variable”, che nella pratica si comporta esattamente come una normale variabile del linguaggio Arduino, ma che è possibile controllare via cloud.
Abbiamo poi il “Device”, che corrisponde ad un device fisico, che nel caso di questo esempio è la nostra Demoboard ESP32. Creando quindi un “Device” ESP32, una “Thing” corrispondente e un opportuno sketch, collegheremo la nostra Demoboard al Cloud IoT di Arduino.
Creare le variabili della Thing
Iniziamo quindi col creare la nostra “Thing”, cliccando sul pulsante “Create Thing” nell’interfaccia web. La prima cosa da fare è darle un nome, ad esempio “Demo Board ESP32”; procederemo poi col creare 4 variabili, perché 5 è limite massimo ammesso dal piano gratuito (per maggiori informazioni sui piani a pagamento il sito di riferimento è https://cloud.arduino.cc/plans ).
Operando con un account free, creeremo quindi quattro variabili, una per ognuno dei seguenti sensori/attuatori: altitudine, temperatura, pressione, display OLED. Per fare ciò cliccheremo su “Add variable” per ognuna di queste e accederemo alla finestra di dialogo proposta nella Fig. 1, dove assegneremo il nome a ciascuna variabile (la procedura va ripetuta quatro volte, una per ciascuna variabile) e definiremo il tipo.

Per le variabili, dovremo definire i parametri così come descritto qui di seguito:
- Name: altitude, Type: float, Variable Permission: read only, Update policy: on change
- Name: temperature, Type: float, Variable Permission: read only, Update policy: on change
- Name: pressure, Type: float, Variable Permission: read only, Update policy: on change
- Name: message, Type: string, Variable Permission, read write, Update policy: on change
Dopo aver cliccato sul pulsante verde ADD VARIABLE posto in basso nella finestra, arriveremo alla finestra di dialogo proposta nella Fig. 2, dove troveremo elencate le variabili create. Dopo aver creato le variabili, la struttura dello sketch verrà creata automaticamente: ne vedete un esempio nella Fig. 3.


Creare e associare il Device
A questo punto il passo successivo consiste nel creare un Device da associare alla Thing appena creata. Per fare ciò, cliccheremo su “Devices” nel menu in alto, e poi su “Add device”; adesso possiamo creare un nuovo device che chiameremo ESP32, per associarne il nome mnemonicamente alla Demoboard ESP 32, che è il Device che in questo esempio applicativo connetteremo al cloud di Arduino.
Per fare ciò, selezioniamo “Set up a 3rd party device” -> ESP32 Dev Module. Nella finestra che apparirà ci verrà chiesto di dare un nome al device (Fig. 4) e per i nostri scopi possiamo usarne uno a piacimento, come un semplice “ESP32”.

Configurare la connessione al cloud
Al passo successivo, dovremo scaricare le credenziali di accesso create, che ci serviranno in fase di configurazione della Thing. Una volta creato il Device, torniamo sulla sezione “Things” e clicchiamo sulla voce “Associate device” accanto al nome della nostra thing, quindi sul tasto “Associate”, per associare nostra ESP32.
Clicchiamo poi sulla nostra thing “Demo Board ESP32”, e poi sul pulsante “Configure” nella sezione Network. Nella pagina che si apre possiamo andare ad inserire le nostre credenziali per l’accesso alla rete WiFi cui collegarci per la connessione al cloud, oltre alla secret key generata durante la creazione del Device.
A questo punto la nostra Demoboard è quasi pronta per essere collegata al cloud; quindi possiamo collegare fisicamente la Demoboard ESP32 al PC tramite cavo USB, allorché l’editor di IoT Cloud la riconoscerà automaticamente e sarà possibile effettuare il caricamento dello sketch.
Modifichiamo quindi lo sketch come indicato nel Listato 1, in modo che possa inviare correttamente i contenuti delle nostre variabili al cloud.
Listato 1
/*
Sketch generated by the Arduino IoT Cloud Thing “Demo board”
https://create.arduino.cc/cloud/things/cbb4ac0a-4088-43ea-94b4-33794638910e
Arduino IoT Cloud Variables description
The following variables are automatically generated and updated when changes are made to the Thing
String message;
float altitude;
float pressure;
float temperature;
Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/
#include "thingProperties.h"
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BMP280 bmp;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don’t proceed, loop forever
}
if (!bmp.begin(0x76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
temperature = bmp.readTemperature();
pressure = bmp.readPressure();
altitude = bmp.readAltitude();
}
void setText(String message) {
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(message);
display.display(); // Show initial text
}
/*
Since Message is READ_WRITE variable, onMessageChange() is
executed every time a new value is received from IoT Cloud.
*/
void onMessageChange() {
setText(message);
Serial.println(message);
}Come funzionano le variabili cloud
Come noterete, per far si che le variabili siano inviate correttamente al cloud, basterà semplicemente assegnarle ai nostri sensori, ed i loro valori saranno inviati automaticamente.
Per quanto riguarda la variabile “message” questa è gestita tramite la callback onMessageChange(), che verrà richiamata ogni volta che dalla nostra dashboard web andremo a settare un valore per questa variabile.
Possiamo quindi finalmente procedere al caricamento dello sketch, cliccando sull’apposita icona play. Una volta terminato l’upload, potrete aprire il vostro serial monitor e verificare che la board si sia connessa correttamente al cloud.
Creare la dashboard
A questo punto non ci resta che passare allo step finale, che consiste nella creazione di una dashboard per controllare i valori che arrivano dai sensori, e pilotare il display OLED. Creare una dashboard è molto semplice e intuitivo, basterà cliccare sulla sezione “Dashboards” e poi sul bottone “Create”.
Allora si aprirà una dashboard vuota, quindi cliccheremo sull’icona della matita che si trova in alto a sinistra per attivare la modalità di modifica e poi inizieremo ad aggiungere i nostri widget per popolare la dashboard stessa.
Clicchiamo quindi su “Add” e selezioniamo “Value”. Per connettere questo widget ad una delle nostre cloud variable, clicchiamo su “Link variable” sulla destra, e selezioniamo ad esempio la variabile “altitude” precedentemente creata, confermiamo quindi cliccando su “Link variable” e poi su “Done”. Adesso abbiamo quindi creato ed associato il nostro primo widget; se vogliamo, possiamo ripetere l’operazione anche per le variabili “temperature” e “pressure”. e andare a creare widget dedicati.
Completare la dashboard e l’app mobile
Per controllare il display, creiamo ancora un widget “Value”, e colleghiamolo alla variabile “message”. Una volta fatto ciò, scrivendo un messaggio qualunque nel nostro widget, lo vedremo comparire anche sul display OLED della nostra Demoboard ESP32. Provando a fare un po’ di pratica con i widget, potete ottenere una dashboard come quella proposta nella Fig. 5.
Vi facciamo notare che la stessa dashboard, opportunamente adattata, può essere fruita anche da smartphone e dispositivi mobile basati su sistema operativo Android o iOS, scaricando l’applicazione “Arduino IoT Cloud Remote” direttamente dagli APP store del vostro sistema operativo.

Conclusioni
Bene, con questo esempio di connessione all’Arduino IoT Cloud abbiamo terminato.
Resta inteso che l’esempio proposto può essere ripetuto per l’acquisizione di altri dati, provenienti dai vari sensori di bordo o collegabili alla demoboard: basta creare gli appositi Widget per poter intergire, attraverso la dashboard, con l’hardware selezionato come Device e quindi con la Demoboard ESP32.


