0. はじめに
とあるQ&Aがきっかけで、Rasberry Pi 4でiBeaconを受信する方法を調べたので、ここにまとめておくことにした。
最初は、『iBeaconも所詮は、BLEペリフェラルだから、簡単に受信できるだろう』と考えていたが、汎用のBluetoothセントラルのスキャンでは、見つけるのが大変だった。
BLEやiBeaconの細かいことは省いて、Rasberry Pi 4 で必要なコマンド等を書いておく。
以下のPDFを参考にさせていただいた。多謝
1. 環境
- 使用した Raspberry Pi 4 の諸元は、以下のとおり。
$ cat /sys/firmware/devicetree/base/model
Raspberry Pi 4 Model B Rev 1.5
$ cat /proc/cpuinfo
processor : 0
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
(以下省略)
$ cat /etc/debian_version
11.8
$ cat /etc/issue
Raspbian GNU/Linux 11 \n \l
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
$ uname -a
Linux raspberrypi4 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
$ cat /proc/version
Linux version 6.1.21-v8+ (dom@buildbot) (aarch64-linux-gnu-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023
まずは、送信側から説明する。
2. Rasberry Pi 4 を iBeacon の送信側にする
以下のコマンドを投入する。
$ hciconfig
hci0: Type: Primary Bus: UART
BD Address: E4:5F:01:AF:B5:2B ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:1548 acl:0 sco:0 events:94 errors:0
TX bytes:2564 acl:0 sco:0 commands:94 errors:0
$ sudo hciconfig hci0 up #先の確認ですでにUPであったが念の為
$ sudo hciconfig hci0 noscan #ペリフェラルのスキャンを停止
$ sudo hciconfig hci0 leadv3 #アドバタイズLv3を開始
$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 48 53 44 42 4C 45 41 44 80 C0 18 00 FF FF FF FF 00 01 00 10 C8 00
上記コマンドで送信したiBeacon固有情報(自由に設定可)は以下の内容。
proximity UUID | 48534442-4C45-4144-80C0-1800FFFFFFFF |
---|---|
major | 0001(1) |
minor | 0010(16) |
Androidスマホのアプリ「Beacon Scope」で受信を確認。Rasberry Pi 4 から iBeacon 情報を送信できていることが確認できた。

次のコマンドを投入して、iBeacon信号の発信を停止する。
$ sudo hciconfig hci0 noleadv
次は、Rasberry Pi 4 で iBeacon を受信する方法を説明する。
3. Rasberry Pi 4 で iBeacon を受信する
iBeaconのアドバタイズデータを確認するため、hcidumpコマンドをインストールする。
$ sudo apt install bluez-hcidump
$ sudo hcidump –R & #バックグラウンドで実行
$ sudo hcitool lescan

iBeacon信号の受信を停止するにはCtrl+C
を打つ。バックグラウンドのhcidumpプロセスは、psコマンドでプロセス番号を調べてkillするか、fgコマンドでフォアグランドに移してからCtrl+C
を打つ。
ちゃんと受信できているが、他にBLEデバイスがたくさん存在していると、探すのに手間がかかる。
冒頭で引用したPDFで紹介されているシェルを利用すると、簡単に見ることができる。そのために、まず、bcコマンドをインストールする。
$ sudo apt install bc
次に、シェルファイル(ibeacon_scan)をダウンロードして、実行権限を付与する。
$ sudo wget http://developer.radiusnetworks.com/ibeacon/idk/ibeacon_scan
$ sudo chmod 755 ibeacon_scan
$ ./ibeacon_scan
Set scan parameters failed: Input/output error
UUID: 48534442-4C45-4144-80C0-1800FFFFFFFF MAJOR: 100 MINOR: 10 POWER: -59
UUID: 48534442-4C45-4144-80C0-1800FFFFFFFF MAJOR: 100 MINOR: 10 POWER: -59
^C
原因は未調査だが、シェルに書いてあるread
コマンドがエラーとなり大量に出力されてしまうが、編集されていて見やすい。
4. おわりに
電池駆動できる安価なBLEモジュールがあれば、iBeaconを何個か自作して、家じゅうに隠して、スマホを持って宝探しするのも面白そうである。
何かの参考になれば幸いです。以上