15 dicembre 2017

tutorial: come implementare, cos'è e a che può servire un beacon bluetooth con raspberry pi


Benvenuti!
Questo tutorial vi fornirà una rapida guida su come implementare un Beacon BLE con i raspberry pi oltre che una panoramica su cosa sono, come funzionano e per cosa possono essere utilizzati i beacon.

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per implementare ed utilizzare un beacon occorrono:
  • un qualsiasi modello di raspberry pi (in caso di modelli che non hanno il Bluetooth integrato si dovrà aggiungere un dongle Bluetooth via USB) + una microSD + un alimentatore (da almeno 2.1A)
  • Raspbian OS Lite
  • un router per la sola configurazione iniziale ed uno smartphone per testare il risultato

Per quanto riguarda il primo punto non occorre altro: il raspberry pi, una volta configurato, sarà attivo e non richiederà alcun intervento (neanche da remoto). Sarà invece indispensabile avere un alimentatore che eroghi in uscita almeno 2.1A.
Raspbian OS Lite è probabilmente la scelta migliore poiché è leggero, consuma poche risorse ed ha preinstallati tutti i tool necessari per la configurazione.
Infine, il router è indispensabile per la configurazione da remoto: collegando il raspberry pi a monitor e tastiera, invece, si potrà configurare il tutto senza utilizzare la rete. Lo smartphone è indispensabile per testare lo specifico esempio che andremo ad implementare.


2. Che cos'è un Beacon BLE?



Un beacon è un dispositivo molto economico che consuma pochissima energia ed è posizionato in determinati punti strategici (es: in una stanza, in un negozio o in una determinata area geografica). Esso è in grado di sfruttare il protocollo Bluetooth Low Energy (BLE) per inviare brevi informazioni a dispositivi presenti nelle vicinanze.

Il caso d'uso più banale che può venire in mente è quello di sponsorizzazione di un sito web, o l'invio di messaggi informativi/pubblicitari a chi si avvicina al beacon stesso. Esempi possono essere il classico totem in un negozio oppure una fermata smart del bus: non appena un utente si avvicina al punto in cui è presente il beacon, immediatamente sul suo telefonino apparirà il messaggio correlato. Questi sono esempi semplici e rapidi di progetti che possono essere realizzati, ma gli usi in realtà sono pressoché illimitati: da giochi interattivi su base geografica (es: caccia al tesoro smart), a sistemi di allarme evoluti (es: tracking di valigie e zaini); da sistemi di geolocalizzazione indoor (dove il GPS non funziona), a qualsiasi altro tipo di azione possa venire in mente legata alle posizioni geografiche.

La cosa interessante dei beacon è che essi sono rilevati automaticamente sia da Android che da iOS, e soprattutto che è sufficientemente semplice crearne di personalizzati.

I raspberry pi 3 e pi zero wireless possono trasformarsi facilmente in beacon poiché hanno integrato un modulo Bluetooth. Ma anche i vecchi modelli oppure il Pi Zero standard, che non hanno il bluetooth integrato, con un semplice dongle Bluetooth esterno via USB possono essere utilizzati per lo scopo. Inoltre, tutti i single board computer consumano pochissime risorse e sono programmabili, quindi perfetti per essere eventualmente trasformati in Beacon BLE smart.


3. Come funziona un Beacon BLE?



Un beacon sfrutta il protocollo Bluetooth Low Energy per inviare in broadcast un messaggio che i dispositivi in prossimità possono interpretare per eseguire determinate azioni sulla base dell'informazione ricevuta. La differenza tra i beacon ed altre tecnologie basate sulla localizzazione è che il broadcast (cioè l'invio del segnale a chiunque sia in ascolto) è unilaterale: il beacon invia, gli smartphone ricevono. Non c'è altro scambio di dati, e tutta la logica deve essere sviluppata sul client (sul telefono), cosicché il beacon stesso non possa venire a conoscenza di informazioni potenzialmente sensibili e non debba avere una struttura logica complicata.

Esistono diversi protocolli che permettono di far dialogare i beacon con gli altri device:
  • iBeacon che, come è facilmente intuibile dal nome, è stato introdotto nel 2013 da Apple. Il funzionamento è molto semplice: i beacon inviano in broadcast un UID (identificativo univoco), quindi i dispositivi che lo ricevono lo girano ad un server online che manderà loro in risposta una notifica personalizzata in base all'UID ricevuto. Questa tecnologia può essere utilizzata per sponsorizzazione, pubblicità, magari in negozi per dare sconti mirati a chi ha la carta fedeltà, e quant'altro;
  • AltBeacon è una variante open-source di iBeacon e funziona allo stesso modo;
  • URIBeacon è un protocollo pensato non tanto per inviare UID quanto più URL. L'idea è quella di inviare informazioni che non necessitano di server online esterni per essere decodificate, ma che possano essere subito riconosciute dal dispositivo nei paraggi. Questo protocollo può essere sfruttato per sponsorizzare siti web, oppure rimandare rapidamente l'utente al download di una applicazione, etc;
  • Eddystone è stato ideato da Google e le sue specifiche sono state pubblicate nel 2016. Esso è lo standard per Google per Beacon BLE compatibili con Android e con iOS, quindi è sicuramente un buon inizio per giocare con i beacon. Permette 3 modalità d'uso:
    • UID (anche in formato criptato, in questo caso EID)
    • URL
    • Telemetria. Con quest'ultima modalità è possibile scambiare informazioni aggiuntive come il voltaggio della batteria del beacon, la temperatura del beacon, il numero di pacchetti inviati dall'accesione del beacon, ed il tempo di attività dello stesso.
    In aggiunta a ciò, Google ha rilasciato le cosiddette Proximity Beacon API sfruttabili in Android ed iOS per associare ad ogni beacon alcuni dati aggiuntivi (senza la necessità di passare per server online), dati che possono anche essere aggiornati in tempo reale ed essere recuperati con le Nearby API di Android e la Nearby library di iOS.


4. Physical Web



Uno degli utilizzi più interessanti della tecnologia beacon, aldilà della geolocalizzazione indoor che è ancora agli stadi iniziali, è il Web Fisico (Physical Web). L'idea è quella di sfruttare uno o più beacon posizionati in determinati punti strategici per inviare in broadcast una o più URL, cosicché chiunque passi nelle vicinanze ed abbia un dispositivo compatibile possa riceverle. Chrome su Android è compatibile con il Physical Web (purtroppo il supporto è stato eliminato nella versione per iOS), ed anche Mozilla ci sta lavorando. Uno dei possibili usi di questa tecnologia può essere quello di inserire dei beacon vicino a monumenti, aree di interesse, fermate del bus e quant'altro, e l'utente semplicemente tirando fuori lo smartphone (senza far praticamente null'altro) può raggiungere pagine web specifiche con informazioni e contenuti aggiuntivi rilevanti, o magari la lista dei bus in arrivo... In tutto ciò la cosa più comoda ed interessante è che non è necessaria alcuna applicazione aggiuntiva da installare (e non sono necessari neanche specifici server che facciano da traduzione del messaggio generato dal beacon).


5. configurare il raspberry pi come Beacon BLE


Per configurare un raspberry pi come beacon occorrerà installare su una microSD la versione Lite di Raspbian OS; configurare l'accesso SSH per potersi collegare da remoto, quindi digitare alcuni comandi da terminale, di seguito descritti.

Il tool che permette di configurare il modulo Bluetooth è hciconfig: con esso sarà possibile abilitare (rendere "up") il Bluetooth del pi. Solitamente il modulo Bluetooth è identificato dalla periferica hci0 (questo è sicuramente vero per i raspberry pi che ce l'hanno integrato), quindi con il comando sudo hciconfig hci0 up verrà abilitato il modulo.
A questo punto è necessario indicare al sistema che il modulo sia advertise e non-connectable. Per fare ciò sarà sufficiente digitare il comando sudo hciconfig hci0 leadv 3. In pratica esso rende impossibile a dispositivi esterni la richiesta di connessione cosicché il bluetooth possa essere utilizzato solo per inviare dati e non riceverne.

Il passo fondamentale, però, è l'impostazione della stringa contenente le informazioni (ad esempio la URL) che si vuole che il beacon trasmetta. Per far ciò si deve utilizzare il comando sudo hcitool -i hci0 cmd seguito dal payload, cioè i dati di advertising.
Il payload ha una struttura ben precisa che va generata correttamente affinché tutto il processo funzioni. Esistono alcuni tool online che consentono la generazione rapida delle Eddystone-URL e di tutto il payload a contorno per inviarle.

Nota: le Eddystone-URL si utilizzano quando si vuole mandare in broadcast una URL, in alternativa occorre utilizzare gli Eddystone-UID/EID o gli Eddystone-TLM.


L'informazione che viene inviata dal beacon è una stringa codificata in byte contente la URL e altre informazioni di controllo. Ad esempio, per mandare in broadcast l'indirizzo web del mio blog, il comando completo da digitare è: sudo hcitool -i hci0 cmd 0x08 0x0008 1b 02 01 06 03 03 aa fe 13 16 aa fe 10 00 03 67 6f 6f 2e 67 6c 2f 76 6b 46 6b 76 41 00 00 00 00.

Nota: il protocollo Eddystone obbliga l'utilizzo di URL https, quindi verranno scartate tutte le URL che iniziano con http:// ed accettate solo quelle che iniziano per https://. Inoltre, le URL non possono essere eccessivamente lunghe, poiché c'è un limite fisico sui byte che possono essere trasmessi. Il consiglio è quello di utilizzare un tool di compressione delle URL, come goo.gl di Google.


A questo punto il gioco è fatto: il raspberry pi non farà altro che inviare costantemente in broadcast il messaggio in byte impostato, e qualsiasi dispositivo compatibile con il Physical Web sarà in grado di leggerlo.
Con Android 4.2 o superiori le Proximity Beacon API sono integrate nei Google Play Services, quindi basterà avere il bluetooth e la localizzazione attivi (e chiaramente i permessi per Chrome per utilizzarli), ed automaticamente nella tendina delle notifiche apparirà la URL condivisa dal beacon. In alternativa esistono varie applicazioni installabili dagli store di iOS ed Android compatibili con Eddystone (e anche gli altri protocolli descritti in precedenza).


5. conclusioni


I Beacon BLE sono una tecnologia molto interessante che permette di dar vita a diversi progetti altrimenti difficilmente realizzabili. L'esempio visto in questo tutorial è solo una tra le tante possibilità offerte (e probabilmente quella di più semplice realizzazione): l'unico limite, come sempre, è la nostra immaginazione.
Ci sono chiaramente delle condizioni da tenere a mente (la lunghezza massima del messaggio che può essere scambiato, il limite di portata del Bluetooth, e quant'altro), ma ragionando attorno a tali peculiarità si può arrivare a dar vita ad interessanti esperimenti o magari veri e propri utilizzi sul campo.

Bene: come indicato ad inizio guida, alcuni aspetti sono stati lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

Nessun commento:

Posta un commento