Pi als iBeacon (USB-baken)

iBeacon is een protocol dat door Apple is ontwikkeld en in 2013 is geïntroduceerd voor het uitzenden van gegevens via het Bluetooth-protocol. Het biedt ook een manier voor apparaten om hun afstand tot het baken te berekenen. Er zijn verschillende redenen waarom je een iBeacon-installatie wilt. Een voorbeeld is het adverteren van jouw winkel via het iBeacon-protocol. Een andere is om de afstand tot bepaalde items bij te houden, zoals auto- en huissleutels.

In deze tutorial laten ik zien hoe je op basis van de Raspberry Pi een beacon bouwt. Daarnaast leg ik het pakketformaat uit dat het iBeacon-protocol verwacht.

Wat is een BLE-beacon
Bluetooth-bakens of beacons zijn (mini) zenders met de klasse van Bluetooth Low Energy (LE). Het zijn apparaten die hun identificatie uitzenden naar draagbare elektronische apparaten zoals smartphones in de buurt. De technologie stelt smartphones , tablets en andere apparaten in staat om acties uit te voeren wanneer ze zich in de buurt van een baken bevinden.

Bluetooth-bakens gebruiken Bluetooth Low Energy-nabijheidsdetectie om een ​​universeel unieke identifier (UUID) te verzenden die wordt opgepikt door een compatibele app of besturingssysteem. De identifier en verschillende bytes die ermee worden verzonden, kunnen worden gebruikt om de fysieke locatie van het apparaat te bepalen, klanten te volgen of een locatiegebaseerde actie op het apparaat te activeren, zoals een check-in op sociale media of een pushmelding.

iBeacon
Apple’s iBeacon was de eerste BLE Beacon-technologie die uitkwam, daarmee zijn de meeste beacons geïnspireerd op het iBeacon-gegevensformaat. De iBeacon is een eigen, gesloten standaard.

Gegevensspecificatie
iBeacons zenden vier stukjes informatie uit:

  1. Een UUID die het baken identificeert.
  2. Een MAJOR nummer dat een subset van bakens binnen een grote groep identificeert.
  3. Een MINOR nummer dat een specifiek baken identificeert.
  4. Een TX-vermogensniveau dat de signaalsterkte aangeeft op één meter van het apparaat. Om het goed te laten werken moet dit nummer voor elk apparaat door de gebruiker of fabrikant gekalibreerd worden.

Een scantoepassing leest de UUID, het Major nummer en het Minor nummer en vergelijkt deze met een database om informatie over het baken te krijgen. Het baken zelf bevat geen beschrijvende informatie, het vereist een externe database om bruikbaar te zijn. De database wordt door de ontvanger gebruikt om in actie te komen of specifieke informatie te verschaffen, denk aan een audiotour in een museum.

Het TX-vermogensniveau wordt gebruikt met de gemeten signaalsterkte om te bepalen hoe ver het baken van de scanner verwijderd is. Houd er rekening mee dat Tx-Power waarde door de gebruiker per baken moet worden gekalibreerd om nauwkeurig te zijn. De Tx-Power is een waarde die het gemeten zendvermogen in dBm op 1 meter van het baken aangeeft. Deze informatie wordt doorgaans eenmaal voor het baken geconfigureerd en is niet dynamisch. Het kan worden gebruikt in combinatie met de ontvangen RSSI om de ruwe afstand tot het baken te berekenen.

RSSI, of “Indicator voor ontvangen signaalsterkte”, is een meting van hoe goed uw apparaat een signaal van een zendend apparaat zoals een beacon kan horen.

Advertentiemodus
Om deze tutorial te laten werken, heb je een Bluetooth-adapter nodig die ondersteuning biedt voor het in de advertentiemodus zetten. De Bluetooth op de Raspberry Pi leent zich hier prima voor. Bezit jouw Raspberry Pi geen Bluetooth of wil je een andere gebruiken? Zorg er dan voor dat de Bluetooth-adapter die je wilt gebruiken de advertentiemodus ondersteund.

Bouwen van een Eddystone baken
Eddystone is het populairste baken dat is ontwikkeld door Google. De meeste bedrijven gebruiken het Eddystone baken om een locatie gebaseerde melding te verzenden. Het is een open-source en multiplatform baken. Bovendien kan het gebruikt worden met zowel iOS als Android.

Aan de slag!

1 – Voordat we de Bluetooth van onze Raspberry Pi als iBeacon configureren, moeten eerst de geïnstalleerde pakketten op de Pi bijgewerkt worden.

We doen dit door de volgende opdrachten in de LXterminal in te voeren.

sudo apt-get update

sudo apt-get upgrade

2 – Vervolgens schakelen we het Bluetooth-apparaat van onze Raspberry Pi in. Het Bluetooth-apparaat zou de hci0-interface moeten zijn. Een bluetooth adapter in een van de USB poorten heet hci1.

Om het Bluetooth-apparaat op te starten, moet de volgende opdracht op de Pi uitgevoerd worden.

sudo hciconfig hci0 up

3 – Nu we de Bluetooth-module hebben ingeschakeld, moeten we de bedrijfsmodus wijzigen in “Low Energy Advertising“, ook wel BLE (Bluetooth Low Energie) genoemd. De modus wordt zo instelt dat deze zich in de modus “Niet-verbindbare ongerichte reclame” bevindt.

Dit proces is vrij eenvoudig en omvat het opnieuw gebruiken van de hciconfig-tool. Voer de volgende opdracht in om de modus van het Bluetooth-apparaat te wijzigen.

sudo hciconfig hci0 leadv 3

4 – Zodra we de Bluetooth-modus hebben veranderd in “Low Energy Advertising“, kunnen we doorgaan met het instellen van de Bluetooth van de Pi om de iBeacon-payload gegevens uit te zenden.

Met ‘payload’ wordt de informatie bedoeld die getransporteerd dient te worden en het doel van het transport vormt. Dit in tegenstelling tot het gehele pakket aan data dat uiteindelijk getransporteerd wordt. Dit pakket omvat zowel de payload als de informatie om het transport mogelijk te maken, zoals metadata en headers.

Om te testen of de iBeacon naar behoren werkt op de Raspberry Pi, geef je in de LXterminal de volgende opdracht (dit is één regel).

sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 1A FF 4C 00 02 15 C7 C1 A1 BF BB 00 4C AD 87 04 9F 2D 29 17 DE D2 00 00 00 00 C8 00

Ik zal de pakketgegevens die we uitzenden later in deze tutorial uitleggen, maar voorlopig zorgen we ervoor dat de uitzending werkt.

Bovenstaande opdrachten in de LXterminal

5 – Installeer nu op jouw iOS- of Androidapparaat een beacon scanner applicatie. Op mijn iOS device gebruik ik eBeacon:BLE Scanner van JAALEE Inc. Op Android werkt de  Beacon Scanner-app van Nicolas Bridoux erg goed .

Met behulp van deze applicaties kunnen we een scan uitvoeren om de iBeacon te vinden die we zojuist hebben ingesteld. Zodra je jouw Raspberry Pi iBeacon ziet, kun je doorgaan naar de volgende stap.

Hoewel commercieel en beperkt laat de iOS app Bluetooth BLE Gadget Finder de afstand tot het baken zien.

Mijn pi-beacon staat op 1-5 meter van mijn smartphone

Op Wikipedia vind je een uitgebreide uitleg over iBeacon.


Payload
Nu we hebben geverifieerd dat we onze iBeacon op de Raspberry Pi correct hebben geconfigureerd, gaan we dieper in op de payload-gegevens.

1 – Het overgrote deel van de payload-gegevens mag niet worden gewijzigd, aangezien het iBeacon-protocol van Apple dit vereist. De gegevensblokken die je kunt wijzigen, zijn de UUID, de grote/minor bytes en het signaalvermogen.

De onderstaande tabel laat de functie van elk bit zien dat we doorsturen naar ons Bluetooth-apparaat.

De gele blokken van de payload kun je wijzigen

2 – Ik kan je nu laten zien hoe je een nieuwe UUID (Universally Unique Identifier ) voor de Pi iBeacon kunt maken. Om te beginnen moeten we een nieuwe UUID maken.

Om snel een nieuwe UUID te genereren, gebruiken we een website genaamd Online UUID Generator. Er zijn veel betere manieren om een UUID te genereren, maar voor deze tutorial is deze het meest eenvoudig.

3 – Zodra je een UUID hebt, verwijder je de koppeltekens ervan en voeg je na elke twee letters een spatie toe. Hieronder heb ik een voorbeeld geplaatst van wat ik bedoel.

Het gewijzigde UUID heeft hetzelfde aantal bytes om de UUID te vervangen die we eerder in de tutorial hebben gebruikt.

Van:
98374d0a-fa8f-43ab-968b-88eaf83c6e4c

Naar:
98 37 4d 0a fa 8f 43 ab 96 8b 88 ea f8 3c 6e 4c

4 – Om nu de UUID in de opdracht te vervangen, zoek je naar bytewaarde “15” van de opdracht dat de lengte van de lading aangeeft.

Vanaf hier moet je de volgende 16 bytes (Nabijheid UUID, 1e t/m 16e byte, zie tabel) verwisselen. Ik heb hieronder een voorbeeld opgenomen. Hier laat ik zien hoe een aangepaste versie van de opdracht eruit zou moeten zien. De vetgedrukte tekst is de informatie die vervangen is.

sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 06 1A FF 4C 00 02 15 98 37 4D 0A FA 8F 43 AB 96 8B 88 EA F8 3C 6E 4C 00 00 00 00 C8 00

Hopelijk heb je nu je Raspberry Pi iBeacon in gebruik. Het is goed dat je begrijpt wat voor soort gegevens jouw Bluetooth-apparaat verzend. Evenals dat je weet hoe je de UUID kunt vervangen door je eigen gegenereerde UUID.


Test het beacon met MiniScanner
Voor de tutorial iBeancon/LBE-scanner, waarmee je beacons met een UUID kunt scannen, heb ik de tool MiniScanner gemaakt. Deze tool scant de omgeving op (USB) beacons en laat o.a. het MAC-adres en de signaalsterkte zien van het apparaat dat het UUID uitzendt.

Je vindt de MiniScanner in de middensectie van de tutorial iBeacon/LBE-scanner. De scanner is handig als je een tweede Pi hebt waarop de MiniScanner draait en een andere Pi dat als beacon fungeert. Zo test je op afstand het beacon dat je met deze tutorial maakt.

Have A Nice Day!

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*