Raspberry Pi 3 als iBeacon

Gepostet von am 14. Februar 2017, 00:36

2013 hat Apple die iBeacon-Spezifikation vorgestellt. Dabei handelt es sich um kleine Buttons einem Bluetooth Low Energy (BLE) Transmitter, die in regelmäßigen Abständen Meldungen versenden. Bluetooth-fähige Smartphones und ähnliche Geräte können diese Meldungen empfangen und somit die Anwesenheit von diesen Buttons feststellen. Das kann von Apps ausgewertet werden und zum Beispiel zur Lokalisierung und Navigation genutzt werden oder auch für lokalisierte Werbung.
Weitere Informationen gibt es hier von Apple oder auch bei hier bei Wikipedia.

Raspberry Pi 3 als iBeacon.

Als iBeacon können nicht nur die vorher genannten Buttons sondern im Prinzip jeder BLE-Transmitter dienen. So gibt es für iOS eine App, die ein iPhone in einen iBeacon verwandeln kann. Genauso gut geht es aber auch mit dem Bluetooth-Transmitter vom Raspberry Pi 3.
Technisch gesehen versenden die iBeacons immer BLE Advertising Pakete. Verbindungen werden nicht aufgebaut, da sonst keine Advertising Pakete mehr versendet werden könnten. Wie das genau funktioniert ist hier beschrieben.

UUID

Zusammengehörige iBeacons haben alle die gleiche UUID. Diese UUID muss auch in der jeweiligen App bekannt sein, da das Framework nur zulässt, dass man nach bestimmten bekannten UUIDs lauscht. Ein Scan nach allen beliebigen UUIDs ist mit den Funktionen von iOS nicht möglich.
Eine neue UUID kann unter Mac OS im Terminal mit dem Befehl uuidgen erzeugt werden.
Unterschiedliche iBeacons die zur gleichen UUID gehören können anhand des Major und Minor Fields unterschieden werden.

Aufbau eines iBeacon Pakets

Apple hat den Aufbau eines iBeacon Pakets genau spezifiziert. Das Paket ist immer 26 Byte lang. Was die einzelnen Bytes bedeuten, steht in folgender Tabelle:

Position Anzahl Bezeichnung Beschreibung
Byte 0 1 Length 0×1A = 25
Byte 1 1 Type immer 0xFF
Byte 2-3 2 company identifier immer 0×4C00
Byte 4-5 2 beacon advertisement indicator immer 0×0215
Byte 6-21 16 proximity UUID muss generiert werden
Byte 22-23 2 major field beliebig
Byte 24-25 2 minor field beliebig
Byte 26 1 tx power muss gemessen werden

Erzeugung mit dem Raspberry Pi 3

Auf dem Raspberry pi kann man das mit iBeacon Paket mit dem Befehl hcitool erzeugen. Das muss ggf. erst noch installiert werden.
Im folgenden verwenden wir die UUID 3E758249-954E-4B68-8FA2-BBCA32C3DCF7

Als erstes muss man das Advertising Paket konfigurieren:

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 3e 75 82 49 95 4e 4b 68 8f a2 bb ca 32 c3 dc f7 00 00 00 00 c8 00

Danach muss man noch das Versenden des Advertising Pakets aktivieren:

sudo hcitool -i hci0 cmd 0x08 0x000a 01

Dann sollte man das iBeacon mit einer entsprechenden App finden können. Eine passende App für iOS wäre Locate Beacon von Radius Networks. Allerdings muss auch hier vor einem Scan die verwendete UUID eingetragen werden, damit das iBeacon gefunden wird.

Danach sollte das iBeacon in der Liste auftauchen.

Anschließend kann man noch die Daten des iBeacons anzeigen.


Kategorien

Stichworte Raspberry Pi,Raspberry Pi 3,Bluetooth,BLE,iBeacon,UUID


Kommentare

Kommentarfunktion für diesen Artikel geschlossen.