ブログ

Armadillo-IoT: BLEアドオンモジュールを利用してみた

at_nakai
2015年2月12日 13時54分

現時点(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」などにリネームして利用ください。

ただし、今回作成したスクリプト内ではtcl8.5の"dict"を利用しています。
Armadillo-IoTのデフォルト状態ではtcl8.4となっているため動作させることが出来ません。
本記事の最後のほうにArmadillo-IoTで無理やりtcl8.5を利用できるようにする方法を紹介します。

スクリプト内では、次のように処理を実行しています。

  • 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

参考

  1. Bluetooth Low Energy(BLE)/ iBeaconとは - Qiita
    http://qiita.com/miyatay/items/4d4ce4ccd7905ddc0144