Crea un trasmettitore beacon con Raspberry Pi

iBeacon è il marchio registrato di Apple per dei trasmettitori a bassa potenza e a basso consumo che possono notificare la propria presenza ai dispositivi vicini con iOS7 (o iOS8 ndr). iBeacon usa la tecnologia Bluetooth Low Energy (BLE), chiamata anche Bluetooth Smart, per trasmettere un avviso che include un identificativo unico universale (UUID). I dispositivi Android possono ricevere i messaggi beacon e, per la fortuna di coloro che amano fare hacking, non porta via molto lavoro predisporre un Raspberry Pi ad emettere segnali iBeacon.

149b9a9a-e046-11e3-9014-1138428103fe

 

Perché fare ciò? Beh, se l’atto stesso di configurare un Raspberry Pi non è una gratificazione sufficiente, considera alcuni dei seguenti utilizzi:

  • Puoi organizzare una caccia al tesoro digitale sparpagliando alcuni beacon con tracce differenti durante una conferenza.
  • Personalizzare offerte commerciali basate sulla propria posizione nel negozio e nelle vicinanze di un determinato prodotto.
  • Oppure, mentre stai seduto al bar gustandoti la tua bevanda preferita, il beacon può avvisarti che qualcuno sta scappando via con la tua bicicletta.

Io adoro particolarmente questo ultimo caso. Basta piazzare un trasmettitore BLE all’interno del proprio zaino che, se questo si allontana, ne sei subito avvisato!

Se dai un’occhiata su internet troverei centinaia di possibili usi o idee. Il punto è che questa è una tecnologia fantastica con tantissime applicazioni differenti.

In questo post si scoprirà come cominciare a giocare coi beacon usando il giocattolo universale per gli hacker: il Raspberry Pi.

Requisiti Hardware

Questo è l’hardware che ho utilizzato. Non c’è bisogno che lo acquistiate da Adafruit,ma per avere i risultati migliori, raccomando di usare lo stesso che ho utilizzato io; altrimenti il risultato potrebbe essere non soddisfacente.

Il WiFi e il case Raspberry sono opzionali, ma io ritengo importante che li abbiate: Rendono la vita molto più facile!

Impostare un RaspberryPi come un trasmettitore iBeacon

Nelle ultime settimane ho dovuto montare e configurare numerosi Raspberry Pi come beacon. È vero, ci sono tutorial su internet, ma purtroppo secondo nessuno di essi funziona perfettamente. Troppo spesso succede che quando sei avanti col lavoro, ogni cosa cambi e le istruzioni ristagnino. Inoltre ritengo che alcuni dei tutorial sono semplicemente sbagliati o documentino male il processo.

Questi sono tutti i passi che ho effettuato per impostare un Raspberry Pi come un sensore beacon. Se segui le istruzioni seguenti con l’hardware elencato sopra, sono sicuro che non dovresti avere alcun problema.

Step 1: scaricare un’immagine di sistema

Ci sono numerose immagini di sistema che possono essere utilizzati col Raspberry Pi. Io ho scelto di utilizzare il Raspbian Debian Wheezy. I passi successivo funzionano con la release del 2014-01-07.

Scarica l’immagine dalla pagina ufficiale dei download: http://www.raspberrypi.org/downloads/

Step 2: Step 2: scrivere il disco immagine su una card SD

Ci sono numerosi tutorial disponibili per questo step.

Se usi un mac, raccomando lo script di Ray Viljonen: Raspberry PI SD Installer OS X. È ottimo.

Step 3: Connettersi al Raspberry Pi

Di nuovo, esistono numerosi il connettersi al dispositivo. I personalmente preferisco usare il cavo di console per connettermi direttamente dal mio mac, ma puoi utilizzare la connessione Ethernet & SSH o connettervi una tastiera e un monitor.

Nota che l’user name di defaul è pi e la passwordraspberry.

Step 4: configurazione iniziale del dispositivo

Una volta connesso al dispositivo dovresti prima configurare alcune impostazioni. Eseguisudo raspi-config e completa i seguenti sei step.

  1. Scegli Expand Filesystem.
  2. Dovresti cambiare la password personale.
  3. Scegli Internationalisation Options poi I1 Change Locale. Ho rimosso le impostazioni esistenti e scelto enUS.UTF-8 UTF-8.
  4. Scegli Internationalisation Options poi I2 Change Timezone. Imposta di conseguenza.
  5. Scegli Advanced Options poi A2 Hostname. Scegli qualcosa di univoco.
  6. Scegli Advanced Options poi A4 SSH. IDovrebbe già essere attivo, ma meglio esserne sicuri.

Riavvia Raspberry Pi(sudo shutdown -r now) e riconnettiti.

Step 5: Imposta il Wi-Fi (opzionale)

Nonostante non sia necessario, io imposto sempre il mio WiFi sul mio Raspberry Pi, così che non necessito di Ethernet o un cavo di console per connettermi tramite SSH. Quando possiedi molti dispositivi, questo è particolarmente importante.

Io uso il Miniature WifFi (802.11b/g/n) Module.

Devi fare l’update delle tue interfaces così che il WiFi si connetta con il router wireless. Esegui sudo nano /etc/network/interfaces (o qualsiasi editor vuoi utilizzare) e aggiorna di conseguenza.

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0

iface wlan0 inet dhcp
  wpa-ssid "ssid"
  wpa-psk "password"

Sii sicuro di impostare i tuoi valori ssid e password (e sì, le capitali servono).

Se sei connesso tramite Ethernet, dovresti riavviare con sudo shutdown -r now ma se stai utilizzando un cavo di console, puoi far ripartire la connessione di rete semplicemente con: sudo /etc/init.d/networking restart. Se poi esegui ifconfig dovresti vedere che ora hai un indirizzo IP. A questo punto, di solito, mi connetto usando la SSH.

Step 6: installa le librerie richieste

Ci sono numerosi librerie e strumenti open source per poter inviare beacon dal Raspberry Pi. Installa le seguenti librerie:

sudo apt-get install libusb-dev 
sudo apt-get install libdbus-1-dev 
sudo apt-get install libglib2.0-dev --fix-missing
sudo apt-get install libudev-dev 
sudo apt-get install libical-dev
sudo apt-get install libreadline-dev

Ciò richiede solo pochi minuti.

Step 7: scarica, crea & installa la libreria BlueZ

Le librerie BlueZ fornisce supporto al core di Bluetooth e ai suoi protocolli. Bisogna scarica, creare e poi installare le librerie. Esegui i seguenti comandi in sequenza:

sudo mkdir bluez
cd bluez
sudo wget www.kernel.org/pub/linux/bluetooth/bluez-5.18.tar.gz
sudo gunzip bluez-5.18.tar.gz
sudo tar xvf bluez-5.18.tar
cd bluez-5.18
sudo ./configure --disable-systemd
sudo make
sudo make install
sudo shutdown -r now

Il comandosudo make può richiedere molto tempo per completarsi. Lascialo andare. Se hai seguito le istruzioni esattamente come lo ho illustrate, dovresti terminare il tutto senza problemi.

 

26af888e-e048-11e3-85af-5b6fafa16335

Congratulazioni. Hai impostato con successo il tuo Raspberry Pi come un trasmettore beacon. Certo, ancora non trasmette alcun segnale, perciò proseguiamo col lavoro.

Imposta il Raspberry Pi come un trasmettitore beacon

A questo punto bisogna a trasmettere un segnale. Questo è il momento, a seconda di quello che stai cercando di ottenere, che le nostre strade potrebbero separarsi. Personalmente voglio che il mio Raspberry Pi faccia le seguenti cose:

  • Inizializza e trasmetta una segnale.
  • Si mostri ma non consenta connessioni.
  • Trasmetta un’unica trasmissione, ma mi permetta di avere più di un beacon identificabile.

La trasmissione ha tre importanti identificativi:

  • proximityUUID: un UUID univoco che distingua il tuo beacon dagli altri beacon.
  • major: usato per raggruppare set di beacon in relazione tra loro.
  • minor: usato per identificare un beacon all’interno di un gruppo.

Ciò che è forte riguardo ad un Raspberry Pi usato come un beacon è che puoi scegliere tutti questi valori da te. Forse, il modo più semplice di generare un UUID è eseguire il seguente comando:

python -c 'import sys,uuid;sys.stdout.write(uuid.uuid4().hex)'|pbcopy && pbpaste && echo

Dovresti ottenere un valore come 636f3f8f64914bee95f7d8cc64a863b5 come output. Questo è un UUID a 128-bit che la nostra app utilizzerà per cercare il nostro beacon.

Okay, riconnettiamoci al Raspberry Pi (se necessario) ed eseguiamo i seguenti comandi:

cd bluez/bluez-5.18
sudo tools/hciconfig hci0 up
sudo tools/hciconfig hci0 leadv 3
sudo tools/hciconfig hci0 noscan

Ora, esegui tools/hciconfig e conferma che è ok e funzionante. Il tuo output dovrebbe apparire simile a questo:

hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:13  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING 
        RX bytes:1136 acl:0 sco:0 events:61 errors:0
        TX bytes:855 acl:0 sco:0 commands:61 errors:0

Ora è il momento di utilizzare hcitool per configurare la trasmissione per utilizzare il nostro UUID. Inoltre per questo dispositivo inziale configureremo i valori major eminor come 0 aggiungendo 00 00 00 00 alla fine dell’UUID. Infine, l’ultimo bite da aggiungere sarà il valoreRSSI di C8.

Il comando dovrebbe apparire come il seguente:

sudo tools/hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 63 6F 3F 8F 64 91 4B EE 95 F7 D8 CC 64 A8 63 B5 00 00 00 00 C8

Potresti considerare qualche altro valore. L’intera cosa si butta giù così:

  • Setup the add packet flags:
    1E
    02      # Number of bytes that follow in first AD structure
    01      # Flags AD type
    1A      # Flags value 0x1A = 000011010  
              bit 0 (OFF) LE Limited Discoverable Mode
              bit 1 (ON) LE General Discoverable Mode
              bit 2 (OFF) BR/EDR Not Supported
              bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
              bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
    1A      # Number of bytes that follow in second (and last) AD structure
    
  • Definisci i valori specifici del vendor:
    FF      # Manufacturer specific data AD type
    4C 00   # Company identifier code (0x004C == Apple)
    02      # Byte 0 of iBeacon advertisement indicator
    15      # Byte 1 of iBeacon advertisement indicator
    
  • Il nostro specifico valore UUID:
    63 6F 3F 8F 64 91 4B EE 95 F7 D8 CC 64 A8 63 B5 # our iBeacon proximity uuid
    00 00   # Major 
    00 00   # Minor 
    C8 00   # Calibrated Tx power
    

Esegui il comando. Congratulazioni, stai trasmettendo.

Rileva il tuo segnale beacon

Utilizziamo un app gratuita per cercare il nostro segnale. Per un dispositvo iOS raccomando Locate iBeacon. È facile da utilizzare. Io non ho Android, ma sono sicuro che ci sono molte app adatte.

Quando apri l’app seleziona per primo iBeacon Transmitter e premi il simbolo/pulsante + per configurare il nostro Raspberry Pi.

  • Name: scegli un nome univoco.
  • Proximity UUID: 636f3f8f-6491-4bee-95f7-d8cc64a863b5 (è la versione hex del nostro UUID)
  • Major: 0
  • Minor: 0
  • Power: (lascia vuoto)

Salva questi valori, poi seleziona il pulsante Locate iBeacons. Dovresti vedere il tuo beacon!

956ab73c-e046-11e3-9682-c00043149c67 98ed92e4-e046-11e3-848b-e9cd98157e45 9c220620-e046-11e3-816f-d05624b5e676

Se dovessi avere più di un Raspberry Pi, si possono configurare tutti per trasmettere. Segui tutte le istruzioni già date, poi cambia il valore minor in 1 (01 00 in hex):

sudo tools/hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 63 6F 3F 8F 64 91 4B EE 95 F7 D8 CC 64 A8 63 B5 00 00 01 00 C8

Fantastico!

 

Traduzione di www.beaconitaly.it

 

Fonte: Wadewegner

Self-Broadcasting: possedere un beacon e nemmeno saperlo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Captcha * Time limit is exhausted. Please reload the CAPTCHA.