Questo progetto per la scheda Raspberry Pi rappresenta sicuramente uno dei modi migliori per iniziare a lavorare con la tecnologia IoT (Internet of Things), accrescendo le proprie competenze in materia e preparandosi per affrontare sfide future ancora più impegnative. L’obiettivo che si è perseguito è stato quello di realizzare un progetto il più semplice possibile, che consentisse anche ai principianti di fare il loro ingresso nel mondo delle applicazioni IoT, con diversi sensori che cooperano e comunicano tra di loro.
Introduzione
Nel progetto proposto, la scheda Raspberry Pi viene utilizzata per registrare delle misure di temperatura, inviando poi delle opportune notifiche a un normale dispositivo Android (i file sorgenti che compongono l’app Android sono inclusi nel progetto).
I passi da seguire e gli strumenti (sia hardware che software) utilizzati nella realizzazione del progetto sono elencati di seguito:
- configurazione della scheda Raspberry Pi;
- utilizzo del sensore di temperatura DS18B20;
- utilizzo del sensore PIR;
- utilizzo combinato dei sensori di temperatura e PIR;
- configurazione di un server web per la memorizzazione delle misure di temperatura;
- utilizzo di Python, PHP, e MySQL;
- utilizzo del servizio Google Cloud Messaging (GCM) per inviare le notifiche relative alle variazioni di temperatura a un’app Android, e per visualizzare i dati storici di temperatura.
Componenti richiesti
Per la realizzazione del progetto completo, è necessario avere a disposizione:
- una scheda Raspberry Pi;
- una scheda di memoria micro SD (con dimensione minima di 4 Gb);
- un sensore di temperatura DS18B20 (se possibile, scegliete il modello Keyes);
- un sensore di movimento PIR;
- una scheda di prototipazione (breadboard) e cavetti per realizzare i collegamenti;
- un computer con collegamento a internet;
- un router e dei cavi Ethernet.
Poichè accederemo da remoto al Raspberry Pi tramite una connessione SSH, non avremo bisogno di monitor, mouse, e tastiera da collegare alla board.
Per quanto riguarda l’ambiente di sviluppo software, occorrerà scaricare le seguenti applicazioni:
- Win32 Disk Imager (per utenti Windows);
- PuTTY (per utenti Windows);
- Advanced IP Scanner;
- WAMP/LAMP/MAMP server.
Principio di funzionamento
In questo progetto la scheda Raspberry Pi verrà collegata al sensore di temperatura e al sensore PIR, acquisendo le informazioni da elaborare successivamente tramite i pin di ingresso/uscita (GPIO) dei sensori stessi. Successivamente, le misure verranno inoltrate a un server web, e infine inviate al dispositivo Android tramite il servizio Google Cloud Messaging (GCM). Una descrizione sintetica del flusso subito dalle informazioni utilizzate nel progetto è il seguente:
Raspberry Pi
↓
Interfaccia con il sensore di temperatura (DS18B20) e con il sensore PIR
↓
Memorizzazione delle misure sul server web
↓
Servizio Google Cloud Messaging (GCM), che invia le notifiche relative alla temperatura a un’app Android
Il sensore di temperatura DS18B20 (in Figura 1 è visibile il modello Keyes utilizzato nel progetto) è di tipo digitale, ed è pertanto facilmente interfacciabile con il Raspberry Pi. Il sensore dispone di tre pin: quello più a sinistra è il segnale di Ground, quello centrale è l'alimentazione VCC, mentre quello più a destra è il pin di Output/Dati. Il sensore utilizzato nel progetto era già fornito con una resistenza da 4,7 kΩ collegata tra VCC e il pin dati. Nel caso doveste utilizzare un sensore diverso da quello proposto, ricordatevi di collegare voi stessi tale resistenza.
Il sensore PIR (visibile in Figura 2) ha invece la funzione di rilevare i movimenti nell’area ad esso circostante utilizzando i raggi infrarossi. E’ importante sottolineare come questo sensore di movimento presenti un ritardo di rilevamento (regolabile) di circa 3 secondi, durante il quale il pin di uscita si mantiene allo stato logico alto, mentre il sensore esegue la misura all’interno del raggio d’azione impostato (regolabile tra 3 e 7 metri). Un altro importante parametro di questo sensore è il “lock time” (fisso, con valore pari a circa 3 secondi), che corrisponde al minimo intervallo di tempo tra due rilevamenti successivi. La tensione di alimentazione del sensore è pari a 5 V.
Step 1 - configurazione del Raspberry Pi
La prima operazione da compiere è quella di installare sul Raspberry Pi la distribuzione Raspbian OS (scaricabile qui). Esistono diversi tipi di distribuzioni installabili sul Raspberry, ma la Raspbian è sicuramente quella più adatta e conveniente, soprattutto per i principianti. Una volta scaricato il pachetto, occorre estrarre il file con estensione .img e scriverlo sulla scheda di memoria SD. Questa operazione differisce a seconda del sistema operativo utilizzato, come vedremo ora.
Utenti Windows
- inserite la scheda SD in un opportuno lettore/programmatore di schede, rilevando l’identificativo del drive ad essa associato;
- eseguite come amministratore l’applicazione Win32 Disk Imager, selezionate poi il file immagine da scrivere e la lettera del drive di destinazione (Figura 3);
- cliccate su “write”, attendete che il processo di scrittura sia completato, dopodichè potete estrarre la scheda SD (prima di lanciare la scrittura, assicuratevi che sulla vostra scheda SD non sia stata abilitata la protezione in scrittura).
Utenti Linux
- eseguite df –h dalla linea di comando, in modo tale da ottenere una lista di tutti i device correttamente montati sul sistema;
- inserite la scheda SD nel programmatore ed eseguite nuovamente il comando df –h per ottenere il nome del device. Si dovrebbe ottenere come output qualcosa di simile a: /dev/mmcblk0;
- smontate la scheda SD tramite il comando umount /dev/mmcblk0 (sostituendo /dev/mmcblk0 con il nome corretto del vostro device). Per essere sicuri, potete anche formattare come FAT32 la vostra scheda tramite il comando sudo mkdosfs –F 32 –v /dev/mmcblk0;
- scrivete ora il file .img sulla vostra scheda SD tramite il comando sudo dd bs=1M if=”/home/linux/2016-05-27-raspbian-jessie-lite.img” of=/dev/mmcblk0. Modificatelo aggiungendo il path al vostro file estratto (dopo if=), e il nome del vostro device (dopo of=). Attendete che il processo di scrittura termini, e poi estraete la scheda SD.
Utenti Mac
- collegate il programmatore di schede con la card SD già inserita;
- dal menu Apple, selezionate “About This Mac”, e cliccate poi su “More info…”. Se state utilizzando il Mac OS X 10.8.x Mountain Lion o una versione più recente, cliccate poi su “System Report”;
- cliccate su “USB” (oppure su “Card Reader” se state utilizzando un lettore di schede SD integrato) e cercate il simbolo della scheda SD in alto a destra nella finestra. Cliccate su di esso, e cercate poi il nome del BSD in basso a destra; dovrebbe essere qualcosa di simile a diskn,dove n è un numero (ad esempio, disk4). Prendete nota di questo numero;
- smontate ora la partizione in modo tale da poter scrivere sul disco. Per fare ciò, aprite Disk Utility e smontate la partizione senza eseguire l’eject, altrimenti occorrerà collegarla nuovamente. Si noti come su Mac OS X 10.8.x Mountain Lion, il comando “Verify Disk” (prima di eseguire l’unmount) visualizzi il nome BSD come /dev/disk1s1 (o qualcosa di simile), consentendo di saltare i due step precedenti;
- eseguite da terminale il seguente comando: sudo dd bs=1m if=path_of_your_image.img of=/dev/rdiskn. Ricordatevi di sostituire n con il numero di cui avete preso nota in precedenza;
- se il comando fallisce, provate utilizzando disk al posto di rdisk: sudo dd bs=1m if=path_of_your_image.img of=/dev/diskn.
Una volta programmata la scheda SD con il file immagine, inseritela nello slot del Raspberry Pi: siamo ora pronti per eseguire il boot!
Step 2 – boot del sistema Raspberry Pi IoT
Ci collegheremo ora al Raspberry Pi tramite SSH utilizzando un comune PC portatile. Ricordiamo che le ultime versioni di Raspbian hanno SSH abilitato di default, per cui l’operazione sarà immediata.
- procuratevi un router con il servizio DHCP abilitato. Ciò è necessario in quanto vogliamo che il Raspberry Pi abbia un indirizzo IP univoco. Colleghiamo quindi sia il PC che il Raspberry Pi al router tramite comuni cavi Ethernet, in modo tale che essi condividano la stessa rete LAN e possano identificarsi tra loro tramite indirizzi IP univoci;
- per collegarsi in SSH, occorrerà conoscere l’indirizzo IP della scheda Raspberry Pi. Eseguiamo quindi l’applicazione Advanced IP Scanner, che produrrà come output una lista contenente gli indirizzi IP di tutti i dispositivi (e dei rispettivi produttori) collegati alla rete. L’output sarà qualcosa di simile a quanto indicato in Figura 4.
Anche in questo caso le operazioni differiscono a seconda del sistema operativo utilizzato dal vostro computer.
Utenti Windows
Utilizzate PuTTY per accedere al terminale del Pi. Lanciate quindi PuTTY ed inserite l’indirizzo IP ottenuto in precedenza (Figura 5).
Verrà successivamente mostrato un prompt di login: utilizzate pi come user id e raspberry come password. Si noti come al primo login verrà visualizzato un messaggio di avviso relativo alle impostazioni di sicurezza: cliccate su “yes” e procedete. A questo punto avremo a disposizione una sessione SSH con il Raspberry Pi (Figura 6).
Utenti Linux e Mac
Aprite una finestra terminale e digitate il commando seguente: ssh 192.168.0.101 -l pi (inserite l’indirizzo IP del Vostro Pi dopo ssh). Inserite raspberry come password.
Configurazione iniziale
- digitate nel terminale il comando sudo raspi-config;
- andate su >Raspi-Config>expand_rootfs>OK per configurare il Pi in modo tale che utilizzi lo spazio intero della scheda SD.
Step 3 – installazione sul PC del server WAMP/LAMP/MAMP
L’installazione di questi applicativi può essere eseguita seguendo questo tutorial o altri analoghi che si possono trovare in rete. Noi lavoreremo su un computer Windows, per cui utilizzeremo il Bitnami WAMP Stack (sono disponibili anche altri ambienti di sviluppo, ma questa procedura fa riferimento alla versione Bitnami).
Durante l’installazione verrà richiesto di creare un account “root” MySQL: prendete nota della password utilizzata per questa operazione. Poichè il codice che verrà eseguito sul server include degli script scritti sia in PHP che in Python, occorrerà configurare il server Apache affinchè possa eseguire gli script con estensione .py. Per fare ciò, occorre modificare il file httpd.conf presente nella cartella di installazione di Apache:
- nel Bitnami Wampstack, occorrerà eseguire la modifica nei seguenti 3 file:
- C:\Bitnami\wampstack-5.6.22-0\apache2\conf\httpd.conf
- C:\Bitnami\wampstack-5.6.22-0\apache2\conf\original\httpd.conf
- C:\Bitnami\wampstack-5.6.22-0\apache2\conf\bitnami\bitnami.conf
- cercate la riga: ‘Options Indexes FollowSymLinks’ e aggiungete ‘ExecCGI’ (Figura 7);
- cercate la riga: ‘#Add Handler cgi-script .cgi’. Scommentatela e aggiungete un ‘.py’ alla fine della riga (Figura 9);
- riavviate ora il server Apache affinchè le modifiche apportate possano diventare operative;
- salvate ora un file di test Python nella vostra cartella DocumentRoot ed eseguitelo sul vostro browser per verificare che tutto sia stato configurato correttamente. Potete [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 5698 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.