Programmare per Arduino Iot Cloud usando l’IDE desktop!

Condividi questo articolo :

Arduino IOT Cloud è un servizio interessante che permette di collegare la propria scheda Arduino (di ultima generazione e originale) ad internet per poi controllarla direttamente dal browser web con un account gratuito, tuttavia presenta delle criticità e una di queste è quella di dover usare l’IDE Web di Arduino, strumento validissimo, ma che allo stesso tempo limita l’utente durante la programmazione della propria scheda.

L’IDE Web di Arduino permette, per chi non sottoscrive un abbonamento Maker (a pagamento), di eseguire solo 200 compilazioni al giorno e sopratutto, girando su un sito internet, l’utente è spesso costretto a cambiare pagina una volta che ha caricato il proprio programma per osservare effettivamente il comportamento sulla dashboard della piattaforma. Il Web editor di Arduino, in ogni caso, resta comunque una valida alternativa all’IDE classico installabile su Windows o Mac, poiché da la possibilità di essere usato su qualsiasi dispositivo (anche tablet e cellulari, se si ha SOLO la necessità di modificare il codice), salvare gli sketch in Cloud e portarseli sempre dietro con un solo account, infine ha molte librerie già integrate senza che quest’ultime debbano essere installate manualmente.

Non tutti sanno che c’è la possibilità di poter programmare per Arduino Iot Cloud direttamente dall’IDE Desktop in modo tale da poter compilare quante volte vogliamo il nostro codice e sopratutto di utilizzare l’IDE classico che resta comunque molto comodo per chi non vuole usare il browser web per la programmazione. E’ da specificare che questo tutorial non è un escamotage per bypassare l’abbonamento, poiché quest’ultimo presenta molti vantaggi e non si limita solo a rimuovere la limitazione delle compilazioni, quindi non è una soluzione da furbacchioni tanto che le librerie che ci serviranno le troveremo tutte nel gestore librerie! 😁

1.Installazione librerie necessarie

Iniziamo a preparare il nostro ambiente di sviluppo installando le librerie che servono dal menu Strumenti->#include libreria->Gestione librerie… :

Cerchiamo e installiamo le seguenti librerie (l’ordine di installazione non è importante) :

arduinoiotcloud, arduino_connectionhandler, arduinocloudthing, arduinoiotcloudbearssl, arduinobearssl, arduinomqttclient, arduino_debugutils e arduinoeccx88

Se non l’avete già fatto e state utilizzando un Arduino MKR WiFi 1010, installate la libreria wifinina, indispensabile per far funzionare il wifi della scheda.

Nella versione dell’IDE 1.8.11 è stato introdotto un ottimo sistema di riconoscimento delle dipendenze e quindi al momento dell’installazione di una delle librerie citate sopra è molto probabile che vengano installate in automatico tutte le librerie necessarie.

Una volta effettuata l’installazione del supporto necessario, passiamo a fare un caricamento di prova sulla nostra scheda, basta anche un semplice blink!

2.Aggiunta scheda nel Board Manager online

Se hai già fatto questo procedimento, non prenderlo in considerazione e passa direttamente al punto 3 di questa guida.

Recati sul sito https://create.arduino.cc/devices/ e aggiungi la tua scheda seguendo le istruzioni a schermo, se lo fai per la prima volta dovrai accedere con il tuo account di Arduino e successivamente installare il plugin di connessione per il browser che ti verrà proposto a inizio procedura.

In questa fase fai molta attenzione a non aver programmi aperti che possano influire sulla seriale della tua scheda, compreso l’IDE Desktop, Slicer per stampanti 3d e come nel nostro caso simulatori per ciclismo interfacciabili con cyclette 😂😂


Ti ricordiamo che noi stiamo usando un Arduino MKR WiFi 1010, se stai usando la stessa scheda e durante il processo di configurazione hai problemi a farla collegare con il servizio, ti consigliamo di seguire questa guida.

Alla fine del procedimento ci verrà proposto un test molto simpatico che ci permetterà di verificare se la scheda è connessa correttamente, facendo spegnere e accendere il led builtin (questa azione avviene tramite internet e non tramite il cavo usb!).

Se tutto è andato a buon fine la procedura ci darà la conferma :

3.Creare il progetto su Arduino Iot Cloud

Passiamo a creare il nostro oggetto connesso nella piattaforma, rechiamoci sul sito https://create.arduino.cc/iot/ e facciamo click su ADD NEW THING :

Diamo un nome al nostro progetto e creiamolo facendo click su CREATE :

Ora aggiungiamo una proprietà di prova cliccando su ADD PROPERTY. Aggiungere una proprietà ci permetterà di creare lo sketch di base che andremo a scaricare e successivamente a modificare con l’IDE Desktop :

Facciamo click di nuovo su ADD PROPERTY e accertiamoci che nella dashboard ci sia lo switch appena creato :

A questo punto possiamo cliccare su EDIT SKETCH per aprire il Web Editor con il codice del progetto :

Dal menu del Web Editor di Arduino possiamo scaricare l’intero codice facendo click su Download Sketch :

Verrà scaricato un pacchetto zip con tutti i file necessari!

4.Capire il funzionamento dello sketch

Estraendo il pacchetto appena scaricato avremo dei file simili a questi :

Apriamo l’unico file dell’IDE di Arduino che ci interessa che avrà estensione .ino e attendiamo che venga aperto :

Ci troveremo davanti a 3 schede, indispensabili per il corretto funzionamento del codice. Per un primo test abbiamo pensato che sarebbe interessante accendere e spegnere il led con il pulsante che troviamo sulla dashboard di Arduino Iot Cloud, per fare questo abbiamo modificato lo sketch principale in questo modo :

la variabile button coincide con lo stato del pulsante che abbiamo creato in precedenza, aggiungendo appunto la proprietà switch e chiamandola appunto button.

Il codice permetterà di attribuire al valore del led (sul pin 6) il valore del pulsante (on = 1 e off = 0).

Inseriamo i dati della nostra connessione wifi nella scheda arduino_secrets.h :

Con il Monitor Seriale aperto carichiamo il programma e controlliamo che la scheda si connetta correttamente alla piattaforma :

Ora che abbiamo caricato il nostro programma andiamo a vedere se funziona, attivando e disattivando il pulsante che troviamo sulla dashboard :

Se il led si accende e spegne insieme al pulsante, il tutto funziona in modo corretto e avremo fatto un ottimo lavoro di configurazione 😁

5. Aggiungere nuove proprietà

Sebbene utilizzare questo escamotage ci toglie di torno la seccatura del numero di compilazioni giornaliere limitato, la comodità di lavorare con il Web Editor sta di certo nel settaggio del codice che avviene in modo automatico e inserendo una nuova proprietà questa viene inserita ovviamente anche nel codice, senza che venga fatto manualmente dall’utente.

Per risolvere questo problema possiamo pensare per benino già dall’inizio quali sono i dispositivi che vogliamo controllare e quali sensori vogliamo portare online e quindi creare inizialmente tutte le proprietà necessarie al nostro progetto. Nel caso non avessimo le idee chiare, dovremmo fare a meno della comodità e fare tutto a mano (doveva esserci la fregatura, che ci vogliamo fare 😂)!

Mettiamo il caso che avessimo la necessità di creare una nuova proprietà che va a leggere lo stato corrente del led sempre dalla categoria SMART HOME :

Verifichiamo che la proprietà sia stata inserita correttamente nella Dashboard :

Successivamente entriamo nella scheda thingProperties.h presente nel progetto aperto in Arduino IDE e andiamo ad aggiungere le righe di codice che permetteranno di gestire i dati della proprietà led.

Dichiariamo una funzione vuota per il change del nostro led :

void funzioneLed();

Successivamente creiamo la variabile che conterrà il valore della proprietà :

CloudLight led;

Infine, nella funzione initProperties inseriamo la seguente funzione che permetterà di inizializzare la proprietà :

ArduinoCloud.addProperty(led, READWRITE, ON_CHANGE, funzioneLed);

Avremo il seguente codice :

Successivamente andiamo nel codice principale e inseriamo la seguente riga di codice nel loop() :

led = digitalRead(6);

Avendo una situazione di questo tipo :

Subito dopo il loop() inserire la seguente funzione che va a completare la configurazione della proprietà :

void funzioneLed() { 
//codice al cambio dello stato del led 
}

Il codice completo di modifiche sarà simile a questo :

Caricando il codice e andando nella dashboard possiamo notare che la proprietà led prende il valore del led builtin e di conseguenza se impostiamo il pulsante su on il lampadario si accende e se lo impostiamo su off, si spegne 🙂

Avrete cosi capito che ogni proprietà viene gestita da Arduino come se fosse una variabile, ovviamente non si tratta delle variabili classiche ma di variabili particolari che andremo ad approfondire nel prossimo capitolo.

6.Variabili, costanti e funzioni base

In questo capitolo vi mostreremo tutte le variabili, le costanti e le funzioni base per lavorare con Arduino Iot Cloud senza utilizzare il Web Editor.

a. Funzioni

Per configurare una nuova proprietà all’interno della nostra scheda per prima cosa bisognerà crearla all’interno della piattaforma e la prassi è stata mostrata nei capitolo precedenti, successivamente è necessario andare a dichiarare una funzione di change, questa funzione permetterà di eseguire le istruzioni desiderate al momento in cui lo stato della proprietà viene variato, tale dichiarazione va inserita nel file thingProperties.h :

void funzioneOnChange();

Ovviamente il nome della funzione non è importante, tuttavia il nome che scegliamo in questa dichiarazione dovrà essere poi inserito nell’inizializzazione della proprietà e nel codice principale del nostro progetto, è importante affiancare il nome della funzione alle parentesi finali “()”.

La funzione andrà scritta dopo il loop() in questo modo :

void funzioneOnChange() {
   //codice
}

Non è obbligatorio creare questa funzione, sarà possibile evitarla e mostreremo come fare nei capitoli successivi! 😁

b.Proprietà e variabili

Ogni proprietà viene gestita dalla scheda e dalla piattaforma come fosse una variabile e di seguito potete consultare tutte le tipologie in base alle proprietà che andremo a creare:

ProprietàVariabileDichiarazioneValore
CUSTOM
Character String StringString nomeVariabile;es. casa
Floatfloatfloat nomeVariabile;es. 5.4
Intintint nomeVariabile;es. 5
ON/OFF (Boolean)boolbool nomeVariabile;true o false
AREA, VOLUME AND FLOW
Area (Square meter) floatfloat nomeVariabile;es. 5.4
Flow rate (Cubic meter per second)//////
Flow rate (Liter per second) //////
Volume (Cubic meter) //////
Volume (Liter) //////
ELECTRICITY AND MAGNETISM
Capacitance (Farad) //////
Conductivity (Siemens per meter) //////
Electric charge (Coulomb) //////
Electric conductance (Siemens) //////
Electric current (Ampere) //////
Magnetic flux (Weber) //////
Electric potential (Volt) //////
Electrical resistance (Ohm) //////
Magnetic field strength (Tesla) //////
Inductance (Henry) //////
Power (Watt) //////
EVENTS FREQUENCY
Cumulative number of heart beats (1)//////
Event rate (1 per minute) //////
Event rate (1 per second) //////
Frequency (Hertz) //////
Heart rate in beats per minute (1 per minute)//////
LENGTH, DISTANCE AND MOTION
Acceleration (Meter per square second)//////
Degrees latitude //////
Degrees longitude //////
Length (centimeters) intint nomeVariabile;es. 5
Length (inches) //////
Length (meters) //////
Velocity (Meter per second) floatfloat nomeVariabile;es. 5.4
LIGHT
Illuminance (Lux) //////
Lumen //////
Luminance (Candela per square meter)//////
Luminous intensity (Candela) //////
MASS
Mass (Gram) //////
Mass (Kilogram) //////
MULTI VALUE
Color HSB CloudColorCloudColor nomeVariabile;
Location CloudLocationCloudLocation nomeVariabile;
SMART HOME (COMPATIBILI ALEXA)
Colored light CloudColoredLightCloudColoredLight nomeVar;
Contact sensor CloudContactSensorCloudContactSensor nomeVar;
Dimmed light CloudDimmedLightCloudDimmedLight nomeVar;
Light CloudLightCloudLight nomeVar;es. 0 o 1
Motion sensor CloudMotionSensorCloudMotionSensor nomeVar;
Smart plug CloudSmartPlug CloudSmartPlug nomeVar;
Switch CloudSwitchCloudSwitch nomeVar;
Temperature sensor (Celsius) CloudTemperatureCloudTemperature nomeVar;
Temperature sensor (Fahrenheit) CloudTemperatureCloudTemperature nomeVar;
TVCloudTelevisionCloudTelevision nomeVar;
OTHERS
Absorbed dose of ionizing radiation (Gray)floatfloat nomeVar;es. 5.4
Acidity (pH value) //////
Amount of substance (Mole) //////
Angle (Radian) //////
Angle (Steradian) //////
Catalysis (Katal) //////
Counter value //////
Data rate (Bit per second) //////
Energy (Joule) //////
Force (Newton) //////
Information content (Bit) //////
Ionizing radiation dose (Sievert) //////
Irradiance (Watt per square meter)//////
Logarithmic quantity (Decibel) //////
Percentage //////
Power level (Decibel relative to 1 W)//////
Pressure (Pascal) //////
Ratio, e.g., value of a switch //////
Relative humidity (Percentage) //////
Remaining battery energy level (Percentage)//////
Remaining battery energy level (Seconds)//////
Sound pressure level (Bel) //////
Specific activity (Becquerel) //////
Time (Second) //////

Per quanto riguarda le proprietà della sezione SMART HOME è possibile abbinarle alla Skill “Arduino” di Alexa che permetterà di usare ogni proprietà come fosse un dispositivo smart.

c. Come inizializzare una proprietà?

Ogni proprietà ha dei parametri specifici che permettono di inizializzare quest’ultima in modi differenti, quando si crea una proprietà questa ha a disposizione varie impostazioni che successivamente devono coincidere con l’inizializzazione nel codice :

Il primo è il Variable Name che dovrà coincidere con il nome della variabile che andiamo a inserire nel codice, in questo caso, considerando uno Switch, dovrà essere dichiarato in questo modo :

CloudSwitch button;

Successivamente è possibile modificare le impostazioni di permesso, consentendoci di impostare la proprietà in modalità sola lettura o lettura/scrittura. Nel codice, prendendo sempre in considerazione l’esempio qui sopra, avrà un parametro corrispondente a questo :

READWRITE

In base alle nostre esigenze potremmo, infine, selezionare il metodo con il quale il valore visualizzato nella dashboard viene aggiornato, considerando l’esempio in questione, il valore cambia quando viene variato e di conseguenza avrà il parametro :

ON_CHANGE

Quindi l’inizializzazione della proprietà Switch nel nostro codice sarà questa :

ArduinoCloud.addProperty(button, READWRITE, ON_CHANGE, funzioneOnChange);

E’ possibile anche evitare la funzione OnChange, sostituendo la funzione con NULL :

ArduinoCloud.addProperty(button, READWRITE, ON_CHANGE, NULL);

Per chiarire l’argomento, la struttura della funzione addProperty è quindi la medesima :

ArduinoCloud.addProperty(nome_variabile, permessi, tipologia_di_aggiornamento, funzione_on_change_callback/null); 

d. Costanti per i parametri

La funzione addProperty di ArduinoCloud permette di inizializzare la proprietà che abbiamo creato inizialmente sulla piattaforma Arduino Iot Cloud. Ogni proprietà ha una serie di parametri che variano il comportamento di visualizzazione e interazione nella dashboard della piattaforma, qui di seguito trovate la tabella con le impostazioni e i parametri corrispondenti da inserire nel codice :

ImpostazioneDescrizioneParametro (costante nel codice)
PERMISSION
Read & WriteR&W (lettura e scrittura).READWRITE
Read OnlyRO (sola lettura).READ
UPDATE
When the value changes On Change (aggiornamento in caso di variazione del valore).ON_CHANGE
Regularly (Every)Every Xs (aggiornamento in tempi desiderati espressi in secondi. X sta per il valore inserito). In questo caso non sarà necessaria una funzione di callback che in ogni caso può essere evitata impostando il paramentro su NULL.X * SECOND
Min ValueValore minimo per le proprietà numeriche.
Max ValueValore massimo per le proprietà numeriche.
DeltaQuando il valore della proprietà cambia, verrà inviato ad Arduino IoT Cloud solo se la differenza positiva tra il vecchio valore e il nuovo valore è maggiore o uguale al Delta. Se delta è 0, Arduino IoT Cloud aggiornerà la proprietà ogni volta che si verifica una modifica.

7.Video correlati

Siamo arrivati cosi alla fine di questa interessante guida, è tanto materiale ma allo stesso tempo molto semplice da seguire 😁.

Speriamo che vi sia utile e non esitate a chiedere aiuto se vi serve! Come sempre usate i commenti! ❤️️

Condividi questo articolo :

Redazione Filo Connesso

Redazione Filo Connesso

Siamo un gruppo di ragazzi appassionati di Informatica, elettronica e robotica. Abbiamo creato Filo Connesso per offrire materiale educativo e informativo dedicato ai nostri settori di interesse.

Potrebbero interessarti anche...

8 risposte

  1. Enrico Sartori ha detto:

    complimenti, tanta roba 🙂

  2. complimenti davvero, materiale serio senza copie e incolla, grazie per avere condiviso

  3. Marcello ha detto:

    Sono le 2:05 di notte e non sono riuscito a smettere di leggere!!
    Grazie mille ragazzi: linguaggio semplice, fruizione comprensibilissima e tanto impegno e dedizione.
    Grazie ancora per quello che fate.
    PS.
    …e domani si prova tutto 😉

  4. Iz ha detto:

    Io ho una scheda Arduino Due e una Arduino Uno, non ho nessuna specificamente IoT (e non vorreu spendere altri soldi).
    Come posso fare con queste?

    • Ciao, purtroppo con quelle schede non puoi usare la piattaforma Arduino Iot Cloud, potresti ripiegare su un esp8266 ma per usarlo con la piattaforma, in ogni caso, dovrai aderire all’abbonamento, a questo punto ti conviene comprare una scheda Arduino di quelle più recenti, per esempio la Nano 33 Iot, e utilizzare la piattaforma gratuitamente! 🙂

Lascia un commento

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