Internet of Things nel mondo consumer e aziendale: sviluppare in ambito IoT è sempre più richiesto
Quando si parla di IoT si intendono tutti i dispositivi connessi alla rete Internet. Oggi la maggior parte dei dispositivi nelle nostre case e realtà lavorative lo è: l’IoT è sempre più in espansione e continuerà ad esserlo. Utilizzato sia lato consumer che in ambito aziendale, produttivo, scientifico e altro ancora, l’IoT pervade ormai la nostra realtà, creando un ponte tra mondo fisico e digitale.
Quando si parla di IoT è immediato pensare a dispositivi come uno smartphone o Alexa, ma l’IoT si trova oggi davvero ovunque: solo pensando alla nostra quotidianità, lo troviamo nelle automobili, negli elettrodomestici, nei sistemi di condizionamento e riscaldamento, nei dispositivi domestici smart ecc. Lato consumer, questa risorsa semplifica sempre più la vita quotidiana: grazie al controllo da remoto dei dispositivi, è possibile interfacciarvisi ovunque ci si trovi, anche mentre si sta facendo altro.
L’IoT è un mercato che a livello globale nel 2019 ha raggiunto un valore di 745 miliardi di dollari e che in Italia, nel 2022, stando a uno studio dell’Osservatorio Internet of Things della School of Management del Politecnico di Milano, valeva 8,3 miliardi di euro. Proprio per la sua pervasività, è importante essere consapevoli che si è immersi in un mondo connesso anche quando non ce ne si rende conto o non ci si fa caso. L’IoT permette all’utilizzatore consapevole di questa interazione di comunicare con gli oggetti, ma consente anche a terzi di raccogliere informazioni tramite i medesimi dispositivi. Ad esempio Google Maps, che tutti noi conosciamo bene e utilizziamo frequentemente, permette di visualizzare la situazione del traffico in tempo reale: questo proprio perché raccoglie dati dagli smartphone che altri utenti stanno usando nello stesso momento.
Quando si parla di IoT è quindi importante considerare i temi connessi alla sicurezza informatica, perché bisogna sempre ricordare che nel momento in cui si è in rete si è potenzialmente esposti ai rischi ad essa connessi.
In questo complesso sistema, però, i vantaggi portati dall’IoT sono numerosi e non vengono sfruttati solo dai privati, ma anche dalle aziende, dall’amministrazione pubblica, in ambito medico e industriale, ad esempio per il monitoraggio delle supply chain: in sostanza in ogni contesto.
La sempre maggiore diffusione dell’IoT è possibile perché, sebbene il periodo post-pandemico sia stato caratterizzato da una carenza di materiali e da un aumento dei prezzi, si è comunque andati verso un’economia di scala che ha portato un notevole abbassamento dei prezzi. Se si pensa anche solo a 10 anni fa, infatti, i costi sono contenuti e accessibili rispetto alle potenzialità che gli strumenti ormai hanno.
La diffusione sempre crescente dell’IoT porta a una sempre maggiore customizzazione dell’hardware e soprattutto del software. Sempre di più, infatti, si ha la necessità di avere device smart, anche per uso interno aziendale. Anche gli stessi creatori di smart device necessitano di software scritti ad hoc, partendo dalla necessità di pilotare il device in un dato modo e arrivando all’esigenza di avere anche un’interfaccia grafica.
I device IoT si dividono sostanzialmente in due macro famiglie: device senza sistema operativo e device con sistema operativo.
Molti device IoT, infatti, per rispondere a una serie diversa di necessità, devono consumare poco e non hanno requisiti hardware elevati. Per esempio, se pensiamo a una lavatrice smart, è vero che questa è connessa, ma non richiede comunque una potenza di calcolo paragonabile a quella di uno smartphone. Device come questo funzionano senza un sistema operativo e richiedono quindi una programmazione bare-metal, che interagisce con il sistema al solo livello hardware. Quando si parla di bare-metal si parla solitamente di una programmazione che si focalizza sul funzionamento del processore e di altri componenti di sistema, lavorando con il BIOS e con la sequenza di avvio.
Questo tipo di programmazione, che non richiede quindi il supporto di un sistema operativo, viene scelta per diversi motivi. Ad esempio, perché il device così progettato ha solitamente costi finali inferiori rispetto a un device dotato di sistema operativo, o ancora perché si ha bisogno di un dispositivo che consumi poco a livello energetico o di un device che possa lavorare in modo molto veloce. Infatti, più software il device sfrutta e più, inevitabilmente, perde in velocità: è quindi inutile sovraccaricare un device che, per gli utilizzi a cui è preposto, non richiede la presenza di un sistema operativo o di software pesanti. Non dovendo inizializzare un sistema operativo, un’implementazione bare-metal viene invece eseguita più velocemente e risulta essere efficiente, richiedendo meno memoria e risorse di sistema.
Tendenzialmente un device che non ha un sistema operativo non richiede poi un’interfaccia grafica.
Questo significa che, sebbene possa essere presente uno schermo collegato, questo spesso visualizza solo numeri e non necessita di un server grafico per generare immagini. L’interfaccia grafica è invece necessaria se si vuole rendere un prodotto accattivante a livello commerciale. All’interno di uno stesso sistema possono inoltre coesistere due device IoT: ad esempio, su una linea di produzione è possibile raccogliere dati con un dispositivo IoT che non necessita di un sistema operativo e visualizzare poi questi dati da un PC o uno smartphone, dove è ovviamente presente un sistema operativo.
Attualmente, una delle piattaforme più utilizzate a livello hardware è STM32, una famiglia di microcontrollori a 32 bit.
Sviluppare in ambito IoT per questa famiglia di microcontrollori è relativamente semplice, poiché esistono già una serie di librerie e un ecosistema di grandi dimensioni che vi gira attorno. Esiste ad esempio un ecosistema, denominato STM32Cube, che mette a disposizione una soluzione software completa per sviluppare su questi microprocessori.
Con le dovute competenze alle spalle è quindi possibile acquistare una scheda che monta uno di questi microcontrollori e cominciare a sviluppare in ambito IoT un software che non necessita di sistema operativo. È quindi questo un modo per sviluppare in ambito bare-metal utilizzando il linguaggio C/C++ partendo da una serie di librerie pre-esistenti.
In ambito bare-metal, solitamente, i device eseguono un’unica applicazione che a sua volta attua i vari task richiesti, senza che siano necessari vari strati di software tra l’applicazione e l’hardware.
Un esempio di bare-metal è una lavatrice smart che, sebbene non presenti un sistema operativo interno, si configura comunque come IoT. In questo caso, l’utente finale visualizza poi le informazioni della lavatrice sull’app dedicata.
È però vero che i livelli di potenza di calcolo dei microprocessori e delle schede CPU raggiunti oggi permettono l’integrazione di un sistema operativo in device dove prima questo era inimmaginabile. Ad esempio il telefono cellulare, evolvendo in smartphone, ha incrementano notevolmente RAM e storage, raggiungendo potenze che un tempo non erano proprie nemmeno dei computer.
Quando si esce dal mondo bare-metal, ed è quindi il sistema operativo a gestire l’hardware, sviluppare in ambito IoT è relativamente più semplice.
Quando si parla di sistemi operativi nel mondo IoT si può sviluppare partendo da tutti quelli esistenti, come Windows, macOS, Linux e Android. In ambito Linux è ad esempio possibile utilizzare Yocto per sviluppare un sistema operativo embedded.
Yocto, infatti, consente di progettare un sistema operativo su base Linux estremamente customizzato, in grado di rispondere ad esigenze specifiche garantendo allo stesso tempo una buona sicurezza informatica. A seconda delle scelte fatte, è possibile creare un sistema più o meno sicuro e più o meno pesante da un punto di vista computazionale e di richieste di memoria. Yocto è la toolchain più utilizzata per lo sviluppo embedded in ambito Linux, anche perché può contare su importanti investitori come per esempio Intel, Cisco e Microsoft. La stessa ST, di cui abbiamo parlato prima, è un Silver Member del progetto Yocto. L’interesse dietro Yocto fa sì che sia più semplice trovarvi la soluzione adeguata al singolo progetto: è ad esempio probabile trovare la libreria necessaria a far funzionare il sensore che occorre nel sistema, rispetto a quanto lo sarebbe in una soluzione più di nicchia. Il pezzetto di codice disponibile in Yocto consente così di comunicare con il sensore: è poi necessario scrivere il codice per farlo funzionare, avendo però una base di partenza a disposizione.
Sempre di più, poi, oggi in ambito IoT occorrono applicazioni multipiattaforma, spesso multidevice e con interfacce grafiche valide: un framework di sviluppo molto utile in tal senso è Qt.
Basta ad esempio pensare agli smartphone Android, di molteplici modelli e con schermi diversi. L’app sviluppata deve però essere in grado di adattarsi a tutti.
Oggi, per quanto stiano uscendo framework diversi che potrebbero in futuro affiancarvisi, uno dei punti di riferimento in quest’ambito è Qt, una libreria multi-piattaforma e multi-linguaggio ideale per lo sviluppo di programmi con un’interfaccia grafica. Anche in questo caso, essendo Qt un ecosistema molto usato in diversi ambiti, è facile utilizzarlo per risolvere un’ampia varietà di problematiche hardware e software. Qt permette ad esempio di creare applicazioni per sistemi operativi differenti, senza scrivere programmi diversi per ogni sistema operativo, ma dovendo fare solo le dovute specifiche. Ad esempio, Telegram e Adobe Photoshop sono scritti in Qt.
Oggi, anche grazie a questi strumenti, sviluppare in ambito IoT è più semplice, ma va fatto attraverso la conoscenza degli strumenti e dei loro limiti, considerando le esigenze specifiche caso per caso ed essendo consapevoli di eventuali rischi inerenti alla sicurezza informatica.