現時点(2015年2月12日時点)では発売前の「BLEアドオンモジュール BT00」(※1)を利用してみました。
今回は、Braveridge社製のビーコン「BVMCN1101AA」 (※2)を利用し、アドバタイジング・パケットを
受信した場合にそのビーコン情報を他のプログラムで処理することができるようにスクリプトを書いてみました。
※1. Armadillo-IoT BLEアドオンモジュール BT00 - Armadilloサイト
※2. Bluetooth Beacon (ビーコン) - Braveridge
アドバタイジング・パケットを受信してみる
BLEアドオンモジュール BT00には、Microchip社製 RN4020が搭載されています。 アドバタイジング・パケットを受信する設定は、「RN4020 Bluetooth Low Energy Module USer's Guide」とMicrochipのフォーラム(※3)を参考にしてみました。
SF,1 SS,C0000000 SR,92000000 R,1 F J,1
※3. http://www.microchip.com/forums/m836435.aspx
Armadillo-IoTで上記を実行するには、tipコマンドを利用します。
[root@armadillo-iotg (ttymxc1) ~]# tip -l /dev/ttymxc3 -s 115200 Connected. === "SF,1"を入力 AOK === "SS,C0000000"を入力 AOK === "SR,92000000"を入力 AOK === "R,1"を入力 Reboot CMD === "J,1"を入力 AOK === "F"を入力 AOK F1853941F252,1,-4E,Brcst:4C000215FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFC5 F1853941F252,1,-4E,Brcst:4C000215FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFC5 F1853941F252,1,-49,Brcst:4C000215FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFC5 F1853941F252,1,-4E,Brcst:4C000215FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFC5 F1853941F252,1,-45,Brcst:4C000215FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFC5 F1853941F252,1,-49,Brcst:4C000215FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFC5 === "X"を入力 AOK === "~."を入力 (tipを終了) Disconnected.
サンプルスクリプト
今回はexpectで動作するスクリプトを作成しました。
【添付】 beacond.exp__0.txt
※システムの都合上ファイル名を変更して添付しています。「beacond.exp」などにリネームして利用ください。
スクリプト内では、次のように処理を実行しています。
- RN4020を初期化
- 5秒間アドバタイジング・パケットを受信
- MACアドレス(※4)でユニーク化
- execで他のプログラムを実行
※4. スクリプト内では "beaconid" 又は "beacon" として記述しています
サンプルコールバックスクリプト
検出したビーコンをどのように処理するかを記述するスクリプトも添付しておきます。
簡単にCSV形式で出力するだけの場合は、
【添付】 callback_sample.sh
こんな感じとなります。
サーバーなどにPOSTする場合は、
【添付】 post_sample.sh
こんな感じです。
無理やりtcl8.5を利用する方法
Armadillo-IoTの標準状態では、expectで"dict"を利用しようとしても次のようにエラーとなります。
[root@armadillo-iotg (ttymxc1) /]# expect expect1.1> dict invalid command name "dict" while executing "dict" expect1.2> exit
次のようにコマンドを実行すると一応tcl8.5にアップデートすることができます。
[root@armadillo-iotg (ttymxc1) ~]# cd /home/ftp/pub/ [root@armadillo-iotg (ttymxc1) /home/ftp/pub]# mkdir -p tcl8.5 [root@armadillo-iotg (ttymxc1) /home/ftp/pub]# cd ./tcl8.5 [root@armadillo-iotg (ttymxc1) /home/ftp/pub/tcl8.5]# wget http://ftp.jp.debian.org/debian/pool/main/t/tcl8.5/tcl8.5_8.5.11-2_armel.deb [root@armadillo-iotg (ttymxc1) /home/ftp/pub/tcl8.5]# dpkg-deb -x ./tcl8.5_8.5.11-2_armel.deb . [root@armadillo-iotg (ttymxc1) /home/ftp/pub/tcl8.5]# cp ./usr/lib/libtcl8.5.so.0 /lib/libtcl8.4.so.0 [root@armadillo-iotg (ttymxc1) /home/ftp/pub/tcl8.5]# mkdir -p /lib/tcl8.5 [root@armadillo-iotg (ttymxc1) /home/ftp/pub/tcl8.5]# cp ./usr/share/tcltk/tcl8.5/init.tcl /lib/tcl8.5/
アップデート後には、"dict"がコマンドとして認識されます。
[root@armadillo-iotg (ttymxc1) ~]# expect expect1.1> dict wrong # args: should be "dict subcommand ?argument ...?" while executing "dict" expect1.2>
動作確認
次のように実行すると動作を確認することが出来ます。
[root@armadillo-iotg (ttymxc1) ~]# ls -1 beacond.exp callback_sample.sh* push_record.sh* [root@armadillo-iotg (ttymxc1) ~]# expect ./beacond.exp ./callback_sample.sh ==> now scanning (5 sec)... ==> do callback ==> now scanning (5 sec)... ==> do callback ==> now scanning (5 sec)... Ctrl + c [root@armadillo-iotg (ttymxc1) ~]# ls -1 F1853941F252.csv beacond.exp callback_sample.sh* push_record.sh* [root@armadillo-iotg (ttymxc1) ~]# cat F1853941F252.csv F1853941F252,78,197
参考
- Bluetooth Low Energy(BLE)/ iBeaconとは - Qiita
http://qiita.com/miyatay/items/4d4ce4ccd7905ddc0144