Raspberry PiをiBeacon化してみた。

Posted on
bluetooth i-beacon iphone raspberypi

iBeaconって

Appleの用意した狭域での位置を特定するための枠組み。Bluetooth low energy(BluetoothLE)を使い電波強度から三角測量的に位置を特定する。巷では決済できるとか書いているのもあるが、あれは嘘。iBeaconに関しては位置情報の特定だけ。そのうえで、「このエリアを出たきに」「このエリアに入ったときに」という条件でアクションを起こすことができる。

iBeaconを利用するには、BluetoothLE機能を持ったiPhoneを用意する。あとはビーコンが必要になるが、国内で使える(技適が付いている)BluetoothLEデバイスは、なかなかない。そこでRaspberryPiに、市販のUSB Bluetooth4.0ドングルを挿して、ビーコン化してしまえれば手軽なわけ。

用意したもの

bluezのインストール

1
2
3
4
5
6
7
$ sudo aptitude install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline6-dev
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.11.tar.gz
$ tar xvf bluez-5.11.tar.gz
$ cd bluez-5.11
$ ./configure --disable-systemd --enable-library
$ make
$ sudo make install

正常にインストールできたら、再起動する。

1
$ sudo shutodown -r now

Bluetoothドングルを挿して、認識するかを確認。

1
2
3
4
5
6
$ hciconfig
hci0: Type: BR/EDR  Bus: USB
 BD Address: 00:1B:DC:04:A0:8A  ACL MTU: 310:10  SCO MTU: 64:8
 DOWN 
 RX bytes:340 acl:0 sco:0 events:7 errors:0
 TX bytes:54 acl:0 sco:0 commands:12 errors:0

iBeaconとして動かす

Bluetoothドングルを起動する。

1
2
3
$ sudo hciconfig hci0 up
$ sudo hciconfig hci0 noscan
$ sudo hciconfig hci0 leadv 3

iBeaconとしてアドバタイジングする。

1
2
3
4
5
6
$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00
< HCI Command: ogf 0x08, ocf 0x0008, plen 32
  1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F
  17 D1 AD 07 A9 61 00 00 00 00 C8 00
> HCI Event: 0x0e plen 4
  01 08 20 00

E2から61までがUUID、それに続く00 00がメジャー番号、その後ろの00 00がマイナー番号。C8がパワー。

アドバタジングを止めるには、以下のようにする。

1
$ sudo hciconfig hci0 noleadv