Internet of Things

Dai sistemi embedded all’Internet of Things : un mondo di oggetti interconnessi

Dai sistemi embedded all’Internet of Things : un mondo di oggetti interconnessi
Sistema embedded, Internet of Things, Big Data, Smart City … sono solo una piccola parte dei numerosi termini che oggi rientrano nel dialogo quotidiano tra persone appassionate di tecnologia.
In molti casi, però, anche i non esperti ne sentono parlare attraverso i media ed allora la domanda sorge spontanea : di che cosa si tratta ? cosa devo aspettarmi nel futuro prossimo ?
Cerchiamo di affrontare, in maniera introduttiva, i suddetti temi …
Cos’è un sistema embedded ?
Molte persone quando sentono parlare di sistema embedded sgranano gli occhi ed appaiono enormemente dubbiosi chiedendosi … “ma che cosa è un sistema embedded ?”, “di cosa stiamo parlando ?”
Le stesse persone, tutti i giorni, utilizzano il televisore per guardare le proprie trasmissioni preferite o i film in prima serata, la lavatrice per avere i propri vestiti sempre puliti e magari il forno a microonde per cucinare delle gustose pietanze. Inoltre, per poter trascorrere al meglio il tempo all’interno della propria casa, utilizzano il termostato per impostare la miglior temperatura sia di inverno che d’estate. Tutti i giorni utilizzano un navigatore satellitare per poter raggiungere la destinazione con la propria automobile ed eventualmente un sistema di entertainment per ascoltare della buona musica.
Ebbene, le stesse persone “attanagliate” dall’enorme dubbio su cosa siano i sistemi embedded, non sanno che convivono con essi tutti i giorni, perché essi sono intorno a loro e tutti gli scenari che abbiamo descritto sino ad ora vedono li vedono come protagonisti.
Il televisore, la lavatrice, il forno a microonde, il termostato, il navigatore satellitare ed il sistema di entertainment sono solo una minima parte degli esempi possibili.
Ma allora che cosa è un sistema embedded ?
Se cerchiamo questo termine su Wikipedia otterremo la seguente definizione formale :
“con il termine sistema embedded (generalmente tradotto in italiano con sistema integrato, letteralmente immerso o incorporato) si identificano genericamente tutti quei sistemi elettronici di elaborazione amicroprocessore progettati appositamente per una determinata applicazione (special purpose) ovvero non riprogrammabili dall'utente per altri scopi”
Probabilmente anche questa definizione può sembrare ostica da capire ed allora proviamo a rielaborarla.
Molto semplicemente, un sistema embedded può essere considerato come un Computer, pur non avendo le sue medesime sembianze, che è dedicato ad uno scopo esclusivo, ad un’unica funzionalità.
Il televisore è dedicato al suo scopo (seppur ci siano le smart TV che permettono anche di fare altro), il microonde è utile solo per cucinare, così come la lavatrice per lavare e così via.
Oltre alla curiosità di sapere cosa sia un sistema embedded e considerato che il nostro pane quotidiano è lo sviluppo software, cerchiamo di capire in che modo è possibile mettere le proprie mani su di essi.
Lo sviluppo sui sistemi embedded
Ad oggi lo sviluppo sui sistemi embedded è considerato come un’attività di elite, poiché sulla maggior parte di essi si programma in C ed in C++ (in molti casi addirittura in ASSEMBLER), linguaggi nativi considerati ostici per chi è abituato ad usare C# e VB.Net.
Il loro utilizzo è strettamente legato al fatto che, essendo linguaggi nativi e direttamente compilati per la piattaforma di esecuzione, riescono a fornire in molti casi performance superiori ai linguaggi gestiti, soprattutto in tutti quegli scenari in cui è richiesta una risposta in real time.
Alla conoscenza di tali linguaggi, va aggiunta la capacità di sapersi districare tra gli schemi di circuiti elettrici con i relativi componenti, poiché sviluppare su un sistema embedded significa essere molto spesso a diretto contatto con l’hardware. Ovviamente, anche in questo ambito, c’è chi sviluppa il software applicativo a più alto livello che gode di un certo grado di astrazione dalla macchina sottostante e chi invece è “costretto” a sviluppare i driver per le periferiche e quindi è sempre “armato” di datasheet da dover studiare per poterne trarre la modalità di funzionamento di ogni dispositivo.
Non dobbiamo dimenticare che la maggior parte degli ambienti di sviluppo non sono assolutamente “user friendly” e non forniscono l’enorme numero di funzionalità messe a disposizione da un IDE come Visual Studio. Addirittura, in moltissimi casi ci si può ritrovare a scrivere il proprio codice utilizzando un semplicissimo editor di testo come Notepad e compilare da linea di comando.
Nell’ambito di questo scenario che qualcuno potrebbe definire “apocalittico”, come si distingue e cosa ci offre la Microsoft per poter sviluppare nel mondo dell’embedded ?
Bisogna considerare che molti sistemi embedded sono sviluppati con tecnologie Microsoft utilizzando il sistema operativo real time Windows Embedded Compact (il successore di Windows CE) nell’ambito del quale all’utilizzo del C e del C++ attraverso Visual Studio, si aggiunge anche il linguaggio C# grazie al .Net Compact Framework.
Inoltre, rientrano nel mondo dei sistemi embedded anche i chioschi (es. informativi) che nella maggior parte dei casi sono dei veri e proprio PC sui quali non abbiamo una normale versione di Windows ma una relativa “declinazione” embedded (es. Windows Embedded 8) e sui quali è possibile sviluppare le proprie applicazioni con il .Net Framework o con il supporto di WinRT.
Infine, nel caso in cui ci troviamo di fronte dispositivi con risorse estremamente limitate in termini di memoria RAM e di storage, possiamo anche prendere in considerazione l’utilizzo del .Net Micro Framework che fornisce un runtime completo ed un ottimo livello di astrazione dall’hardware con l’utilizzo della programmazione ad oggetti ed il linguaggio C# con tutti gli strumenti di sviluppo che ne conseguono.
Con questo secondo scenario, sviluppare sui sistemi embedded può non  essere così complicato !
Dall’embedded all’IoT … qual è il passo ?
Da alcuni anni si sente parlare di Internet of Things (IoT), l’Internet delle cose, per poter sintetizzare in un’unica definizione una nuova era in cui non solo le persone sono connesse alla rete attraverso PC, smartphone e tablet ma anche gli oggetti. Il termine è stato coniato da Kevin Ashton nel 1999 ma soltanto da pochi anni è sotto i riflettori e, data la sua giovane età, bisogna ancora valutare se si tratti di un “hype word” destinata a svanire  oppure porterà con se un nuovo mercato ed un nuovo business; numerose statistiche, seppur con valori differenti ma che esprimono l’enormità del fenomeno, parlano di miliardi e miliardi di oggetti connessi entro il 2020.
Personalmente, sono fermamente convinto che non si tratti di una bolla di sapone ma effettivamente del futuro nell’ambito della connettività, per raggiungere una serie di obiettivi come le città intelligenti (smart city) che non potranno far altro che migliorare il nostro stile di vita riducendo anche gli sprechi.
Ma che cosa si intende per sistema IoT ?
Ebbene, l’errore più comune che si commette è quello di pensare che un sistema embedded collegato ad Internet, attraverso una connessione ethernet o wifi, può essere considerato a tutti gli effetti un sistema embedded. Non è assolutamente così !
Il mondo dell’IoT è certamente legato ai dispositivi embedded ed a tutti gli oggetti che ci circondano, soprattutto in termini di sensori, ma ha anche una parte preponderante legata al Cloud ed al processo di elaborazione delle informazioni da essi ricevuti per poter prendere decisioni ed attuarle, anche in maniera automatica, molto spesso in tempi brevi.
Grazie all’Internet of Things, si da estremo valore alle informazioni che i dispositivi embedded (es. sensori) sono capaci di raccogliere per noi in automatico. I dati confluiscono attraverso la grande rete verso i servizi disponibili nel Cloud (pensiamo a tutto ciò che ci fornisce la piattaforma Microsoft Azure) per poter essere elaborati e trasformati in informazioni (conoscenza) attraverso le quali poter prendere delle decisioni che possono prevedere l’intervento umano oppure delle azioni automatiche eseguite sul campo attraverso ulteriori sistemi (es. attuatori)
Quanto detto, ci permette di dire che l’Internet of Things non riguarda strettamente le “cose” ma i “servizi” che permettono di dare valore ai dati reali.
Un esempio banale di soluzione IoT potrebbe essere descritta attraverso il distributore di bibite che si trova abitualmente all’interno di un’azienda. Il distributore ha bisogno di un intervento periodico di un tecnico specializzato per poter sopperire alla mancanza di materia prima (es. caffè, latte, …) e per poter risolvere un eventuale guasto. Tale intervento è tipicamente schedulato (es. ogni settimana) oppure il tecnico viene contattato da un referente aziendale per anticipare il suo arrivo (es. distributore guasto oppure bibita esaurita).
In questo scenario, abbiamo tipicamente dei costi di intervento del tecnico che magari in molti casi non sono necessari (es. il distributore funziona regolarmente ed i prodotti non sono esauriti) e che potrebbero essere evitati o comunque ridotti, ottimizzando i tempi di intervento.
Per quanto riguarda i guasti, il distributore potrebbe essere dotato di una serie di sensori (es. temperatura, ..) ed al rilevamento di un’anomalia potrebbe inviare tale informazione al server dell’azienda che lo gestisce; allo stesso modo, le informazioni di vendita potrebbero essere trasmesse in tempo reale. In entrambi i casi, avremmo l’intervento del tecnico solo in caso di effettivo guasto oppure di esaurimento di un certo tipo di prodotto.
A tali già ottimi risultati, possiamo aggiungere la possibilità di prevedere il guasto del distributore attraverso l’analisi storica dei dati (es. utilizzando Microsoft Azure Machine Learning) per poter riconoscere un pattern ricorrente che anticipa la rottura di un componente. Inoltre, i dati relativi alle vendite possono essere utilizzati per delle campagne di marketing sui prodotti maggiormente acquistati e magari rimuovere tutti quei prodotti che rimangono nel distributore per mesi (fino alla scadenza!).
L’esempio potrebbe proseguire con tantissimi altri vantaggi che confluiscono tutti verso gli obiettivi di riduzione costi, riduzione sprechi e relative ottimizzazioni.
Allora ? Cosa ne pensate ? L’Internet of Things può rappresentare il motore dell’economia nei prossimi anni ?