Un esempio pratico di IoT: dal sensore ad Azure. Overview del progetto.

 

Internet of Things è sicuramente uno degli argomenti di maggiore interesse di questi tempi, non soltanto per le aziende, ma anche per studenti, sviluppatori, maker e appassionati. Nelle case, nelle città e nelle aziende il numero di oggetti connessi è in costante crescita, ma uno degli aspetti che lo rende un tema davvero interessante è sicuramente la possibilità di creare IoT. Si può cominciare con un semplice sensore in grado di rilevare dati grezzi, trasformandoli poi in informazioni, utili per effettuare analisi predittive o più in generale per eseguire determinate azioni o comandi.

L'obiettivo di questo post è quello di illustrare un progetto molto semplice che utilizza sensori per il rilevamento della luce e della temperatura, trasmettendo i dati rilevati su Azure e visualizzandoli in un website sotto forma di grafico. Questo progetto si ispira a Connect The Dots, un progetto molto più ampio ed in costante sviluppo realizzato da Microsoft Open Technologies , ma è stato semplificato al massimo allo scopo di fornire un esempio il più semplice possibile per permettere anche a chi è alle primissime armi di capire quali sono gli step da seguire per "creare IoT". In seguito, saranno pubblicati alcuni post di approfondimento che spiegheranno nel dettaglio step-by-step come potete implementare concretamente questo progetto utilizzando i vostri dispositivi.

Vediamo per prima cosa l'hardware che è stato utilizzato:

image

  • Una board Arduino Uno
  • Un sensore di temperatura
  • Un sensore di luce
  • Lo shield necessario per connettere in maniera molto semplice e rapida i sensori all'Arduino
  • Una Raspberry Pi B+ da utilizzare come gateway, indispensabile in questo esempio in quanto la scheda Arduino non ha la possibilità di connettersi direttamente a internet. E' importante però sottolineare il ruolo del gateway anche in termini di scenario più generale: se si pensa ad esempio ad una smart home, sarebbe complesso e costoso connettere ogni singolo oggetto direttamente alla rete. Sarà sicuramente molto più comodo ed economico interfacciare il frigorifero, la lavatrice e le tapparelle e ogni altro dispositivo ad un gateway all'interno della casa, il quale poi si occuperà della gestione dei dati ricevuti in ingresso e dell'opportuno indirizzamento sul cloud.

Una volta che il dato arriva online, si utilizzano i seguenti servizi di Azure per trasformare il dato grezzo e poco significativo in una informazione vera e propria, in questo caso grafica:

  • Azure Event Hub come punto di accesso al cloud
  • Azure Stream Analytics per l'analisi in tempo reale dei dati e l'esecuzione di determinate azioni
  • Una Azure Web App per la visualizzazione grafica dei dati. In pratica, si tratta del vecchio Azure Website, rinominato appunto Web App dopo l'introduzione di App Service. Per approfondimenti in merito a questo annuncio si può fare riferimento a questo blog post.

L'immagine sottostante è molto utile per capire qual è il processo per trasformare il dato in informazione utile

image

Vediamo ora nel dettaglio il percorso effettuato da ogni singolo dato rilevato:

Sensori e device: Arduino

I sensori di luce e temperatura sono connessi allo shield e, di consegunza, all'Arduino in maniera molto semplice. La scheda Arduino, ovviamente, è stata programmata con un codice che la rende in grado di leggere e interpretare in maniera adeguata gli input provenienti dai sensori, effettuando le opportune conversioni e serializzando i risultati in un JSON che viene poi utilizzato per il trasferimento dei dati da Arduino a Raspberry, tramite cavo USB.

Gateway: Raspberry Pi

Per la configurazione corretta del gateway è stato necessario un lavoro preliminare di installazione del sistema operativo e di alcune librerie, i dettagli verranno forniti nei successivi post di approfondimento.

Su Raspberry è stato caricato un codice che si occupa della lettura dei dati provenienti dalla porta USB, che vengono deserializzati ed inviati sul cloud. Ovviamente, assume un'importanza fondamentale la scelta del protocollo da utilizzare per impacchettare i dati, in modo da garantire sia la sicurezza delle informazioni sia la capacità da parte del cloud di interpretarli nel modo corretto.

Cloud: Event Hub

Come già detto, la porta di accesso a Azure è il servizio Event Hub, che è in grado di interpretare il protocollo AMQP. In questo post non entreremo nel dettaglio del codice utilizzato per interfacciare il gateway con Event Hubs, ma è importante sottolineare la necessità di inserire un riferimento al servizio di Azure all'interno del codice che è stato caricato su Raspberry.

In particolare, come si può notare nello schema, sono stati creati due distinti servizi su Event Hub: uno utilizzato per la semplice visualizzazione dei dati sul website, e l'altro per l'invio di alert al website quando si verifica una certa condizione.

Cloud: Stream Analytics

Per poter interpretare i dati che arrivano su Event Hub e prendere decisioni di conseguenza, è necessario utilizzare il servizio Stream Analytics. Si tratta di un servizio ancora in preview, pertanto per poterlo utilizzare si deve inviare una richiesta di accesso qui. Questo servizio è in grado di leggere i dati da Event Hub ed eseguire delle query per estrapolare le informazioni utili. Nel nostro esempio, lo abbiamo utilizzato per l'aggregazione dei dati e per inviare un alert al website nel momento in cui la temperatura supera un determinato valore di soglia.

Anche in questo caso, i dettagli dell'implementazione verranno forniti nei successivi post di approfondimento.

Cloud: Web App

Per la visualizzazione grafica delle informazioni è stato utilizzato un semplice website, che sfrutta le elaborazioni effettuate dai servizi Azure descritti in precedenza per fornire una rappresentazione grafica in tempo reale.

 

In conclusione, all'interno di questo post abbiamo mostrato tutti gli elementi fondamentali per per poter creare il vostro IoT, descrivendo le connessioni tra i vari elementi e il percorso che il dato deve effettuare per poter essere trasformato in un'informazione utile. Se volete implementare concretamente questo semplice scenario, seguite i prossimi post di approfondimento!

Comments

  • Anonymous
    April 10, 2015
    Non è corretto dire che Arduino non si puó collegare a Internet. Esistono diversi tipi di shield, wired e wireless e molti esempi in rete su come trasferire i dati direttamente da Arduino a un server. Il problema di Arduino (perlomeno delle versioni con processori a 8 bit, quelle derivate da Arduino UNO) è che non hanno risorse (memoria e performance della CPU) per supportare protocolli che richiedono una crittografia complessa come AMQP o HTTPS, che sono i protocolli al momento supportati dal service bus di Azure.

  • Anonymous
    April 10, 2015
    Certo, facendo un discorso generale è assolutamente possibile connettere la Arduino UNO a internet, ma come hai detto tu è necessario utilizzare uno shield Ethernet o Wifi, che non sono previsti in questo progetto specifico. Ovviamente esistono molti altri scenari possibili, ad esempio si potrebbe anche connettere la scheda Arduino ad Azure senza utilizzare il Service Bus, ma per questo post ho selezionato un esempio specifico da presentare step-by-step, fornendo per il momento una semplice overview a cui seguiranno approfondimenti.  

  • Anonymous
    April 10, 2015
    The comment has been removed

  • Anonymous
    April 10, 2015
    Concordo con Moreno Borsalino, propongo di riportare in un futuro articolo lo stesso progetto ma con al centro WIndows 10 su schede tipo Raspberry. Comunque tutto molto interessante.

  • Anonymous
    April 10, 2015
    Grazie per il feedback. Abbiamo scelto questo esempio per mostrare che è possibile connettere a Azure anche schede che non utilizzano un SO Microsoft, ma in futuro descriveremo sicuramente scenari che prevedano l'utilizzo di Windows 10 su schede come la Raspberry Pi 2, ma anche il NETMF