L'interazione, o meglio la convergenza, tra il mondo IoT e la tecnologia blockchain è uno dei temi maggiormente discussi in questi ultimi tempi. In questo articolo affronteremo questo argomento dando un taglio prettamente pratico, dimostrando tramite un'applicazione eseguita sul Raspberry Pi come la tecnologia blockchain possa trovare numerose applicazioni in ambito IoT.
Introduzione
Blockchain e IoT sono due concetti ormai noti alla maggior parte delle persone che operano in ambito tecnico e comunque sono temi a cui Elettronica Open Source ha sempre dedicato ampio spazio. L'unione di queste due tecnologie (ormai una realtà) è potenzialmente in grado di abilitare scenari particolarmente innovativi, semplificando e rendendo più efficienti numerose applicazioni della vita reale. Su Elettronica Open Source, ad esempio, sono stati pubblicati diversi articoli di introduzione ed approfondimento a IOTA, una criptovaluta sviluppata espressamente per supportare le applicazioni IoT e attualmente in fase di valutazione o utilizzo effettivo da parte di alcune organizzazioni che operano nel settore tecnologico. Riservandoci di proporre in futuro un progetto simile per IOTA (magari, se possibile, basato sulla scheda ESPertino), cominciamo in questo articolo a vedere come sia possibile collegare un sistema embedded economico e diffusissimo, come il Raspberry Pi, alla rete blockchain, aprendo la porta a innumerevoli applicazioni in ambito IoT.
Schema a blocchi del progetto
Lo schema a blocchi del progetto è visibile in Figura 1. Il Raspberry Pi versione 3 B/B+ si comporta come un dispositivo IoT, collegato alla rete internet tramite la sua interfaccia integrata WiFi. La scheda Raspberry Pi controlla un'applicazione che può essere di qualunque tipo. Per semplicità, nel nostro progetto supporremo che tale applicazione, integrata con la rete blockchain, sia associata a un GPIO della scheda Raspberry. In pratica, piloteremo il valore di uscita di un preciso GPIO solo e soltanto quando riceveremo una transazione di pagamento in bitcoin a un indirizzo prefissato sulla blockchain. Si realizza, in sostanza, un sistema in grado di erogare servizio "on demand", per la fruizione del quale l'utente deve fare pervenire al sistema un accredito in bitcoin. Poco importa in questa sede cosa venga collegato al GPIO, l'importante è dare una dimostrazione di come il mondo delle applicazioni IoT possa essere facilmente integrato con quello delle criptovalute, in particolare con il bitcoin e la relativa infrastruttura blockchain. La fantasia dei progettisti elettronici non ha limiti e possiamo pertanto facilmente immaginare delle possibili applicazioni attinenti il mondo reale: parchimetri, erogatori di bevande e snack, autolavaggi e altro ancora. Gli script proposti nel progetto possono, inoltre, essere facilmente modificati in modo tale da introdurre la variabile tempo. Potrebbe, ad esempio, essere utile attivare un GPIO configurato come uscita soltanto per un tempo prefissato, trascorso il quale l'uscita viene nuovamente disattivata e il sistema attende di ricevere una nuova transazione di pagamento. Dopo il livello IoT, composto dalla scheda Raspberry Pi e dall'applicazione comandata tramite GPIO, possiamo identificare nello schema a blocchi un livello intermedio, realizzato interamente a livello software. Tale livello si compone anzitutto di un server HTTP, opportunamente installato e configurato sul Raspberry Pi. La scelta è ricaduta su Apache 2, un server HTTP nato come progetto open source, molto collaudato, largamente diffuso e facilmente installabile sulla nostra scheda. Il server è accompagnato dal linguaggio di script PHP, necessario per interpretare ed eseguire gli script che installeremo sul server. Anche PHP non ha bisogno di presentazioni: si tratta, probabilmente, del più importante linguaggio di script lato server, un vero e proprio "motore" che spinge ogni giorno un'enorme quantità di siti web in tutto il mondo. Abbiamo, infine, il livello associato al mondo delle criptovalute, ovvero bitcoin e blockchain nel nostro caso. Per usufruire dell'infrastruttura offerta dalla blockchain è sufficiente ottenere un indirizzo da associare al device IoT e creare uno script PHP basato sulle Websocket API offerte dalla blockchain stessa. Lo script PHP, dopo essersi collegato all'indirizzo su cui l'infrastruttura blockchain rende disponibile il servizio, sarà in grado di ricevere in tempo reale delle notifiche relative a nuove transazioni e nuovi blocchi inseriti nella blockchain. In particolare, nel nostro caso ci registreremo soltanto alle notifiche di transazioni (pagamenti o accrediti) ricevute all'indirizzo specificato nello script (l'indirizzo che abbiamo scelto di associare al nostro Raspberry Pi, il device IoT). Ecco, quindi, che il cerchio si chiude: ogni transazione di pagamento (potenzialmente eseguita in qualunque parte del mondo) avente come destinatario l'indirizzo associato al nostro dispositivo IoT, verrà anzitutto registrata nella blockchain. Poiché il nostro script PHP si è registrato per ricevere le notifiche, potrà ricevere tale informazione dal canale websocket blockchain, abilitando e rendendo l'applicazione o servizio IoT.
Configurazione Raspberry Pi
Come accennato in precedenza, per l'applicazione è richiesto un Raspberry Pi 3 B/B+, accompagnato da una scheda di memoria SD da almeno 16 Gb ad alte prestazioni. Sulla scheda dovrà anzitutto essere caricata l'immagine della distribuzione Raspbian Stretch, scaricabile direttamente dal sito ufficiale Raspberry [1]. Come versione possiamo utilizzare quella completa, che include il desktop e altro software di base. Dopo aver programmato la scheda SD e aver eseguito il primo boot, occorre aggiornare la distribuzione attraverso i seguenti comandi da impartire in una finestra terminale, oppure collegandosi al Raspberry Pi via SSH (in quest'ultimo caso occorre avere precedentemente abilitato la relativa funzionalità [2]):
sudo apt-get update
sudo apt-get upgrade
Possiamo quindi procedere con l'installazione del server HTTP Apache 2, che avviene tramite il seguente semplice comando:
sudo apt-get install apache2 -y
Per accertarsi che l'installazione di Apache 2 sia andata a buon fine, è sufficiente inserire l'indirizzo IP assegnato al Raspberry Pi dal router WiFi nella barra degli indirizzi di un comune browser per internet. Se Apache 2 è stato installato correttamente, nel browser comparirà la pagina "Apache2 Debian Default Page", visibile in Figura 2.
Il passo successivo consiste nell'installazione di PHP 5, che anche in questo caso viene eseguita attraverso un unico comando:
sudo apt-get install php libapache2-mod-php -y
Per verificare che PHP 5 sia stato correttamente installato e sia attivo sul Raspberry Pi, dobbiamo creare un semplice script di test. Daremo il nome phpinfo.php a tale script, proprio perché la sua funzione sarà quella di eseguire il comando phpinfo, una sorta di comando di verifica sulla corretta installazione di PHP. Il file andrà, inoltre, creato all'interno della cartella /var/www/html/, coincidente con il percorso di default utilizzato da Apache2 per memorizzare le pagine web. Il comando da impartire risulta pertanto il seguente:
sudo vi /var/www/html/phpinfo.php
Mentre il contenuto da inserire nel file script è il seguente (viene semplicemente invocato il comando phpinfo):
<?php
phpinfo();
?>
A questo punto apriamo nuovamente il browser internet e inseriamo nella barra degli indirizzi il seguente url (xx.xx.xx.xx dovrà essere sostituito con l'indirizzo IP assegnato al vostro Raspberry Pi):
xx.xx.xx.xx/phpinfo.php
Nel browser dovrebbe a questo punto comparire la pagina relativa al comando phpinfo, come visibile in Figura 3.
Configurazione HW
Abbiamo precedentemente affermato che l'applicazione IoT controllata o comandata dal Raspberry Pi sarà, per ragioni di comodità, collegata a uno dei GPIO. Poiché in questa sede siamo interessati a verificare la validità dell'applicazione (lasciando alla fantasia del lettore la scelta di quale destinazione finale assegnare al progetto), collegheremo a uno dei GPIO del Raspberry Pi un semplice led, accompagnato dalla consueta resistenza di limitazione della corrente. Più precisamente, occorre collegare un comune diodo led con in serie una resistenza da 1 kOhm tra il pin #1 e il pin #11 del connettore GPIO del Raspberry Pi. Prestare attenzione alla polarità del diodo led. Il pin #1 corrisponde all'alimentazione 3.3V, mentre il pin #11 corrisponde al GPIO 0 utilizzato dalla libreria Wiring Pi. Tale libreria offre un'interfaccia molto semplice e funzionale per controllare e comandare lo stato dei GPIO della scheda direttamente dalla shell (e, quindi, anche da uno script PHP). Ricordiamo che la libreria Wiring Pi è integrata nella distribuzione Debian Stretch e pertanto non richiede alcuna installazione. Riassumiamo brevemente alcuni utili comandi relativi a Wiring Pi, necessari per una completa comprensione degli script che esamineremo a breve: [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2467 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.