まず、クロスコンパイル用の環境としてLinux環境を用意します。今回は仮想環境(Virtualbox)上で動くUbuntu 14.04を使いました。
Raspberry Pi用のコンパイラは以下のGithubで公開されています。
ツールを適当なディレクトリにクローンします。
1 2 3 |
|
コンパイラが3種類入ってますが、gcc-linaro-arm-linux-gnueabihf-
がRaspberry Piに最適化されたコンパイラです。
1 2 3 4 5 6 |
|
gcc
の動作確認をしてみます。
1 2 3 4 5 6 7 8 9 |
|
次にRaspberry Piのユーザランドを用意します。rsync
でRaspberry Piから取得します。
1 2 3 |
|
Raspberry Pi側でapt-get update
や新しくパッケージをインストールする度に再取得する必要があるので、スクリプトにしておくよよいでしょう。
コンパイラにパスを通して簡単なプログラムをコンパイルしてみます。
1 2 3 4 5 6 7 8 |
|
1 2 3 |
|
file
コマンドでARMようの実行ファイルが生成されたことがわかります。
1 2 |
|
ファイルをRaspberry Piにコピーします。
1 2 3 |
|
Raspberry Piで動作することが確認できました。
1 2 |
|
BluetoothのドングルはPLANEX の BT-Micro4を使いました。BLEタグと接続するので、Bluetooth 4.0対応のものが必要です。
Bluethoothを扱うためにBluezをインストールします。こちらによるとBluezはソースから最新版を入れたほうがよさそうです。
1 2 3 4 5 6 7 |
|
下記のようなエラーが
LDFLAG
に-lrt
を付けてみてください。/usr/bin/ld: profiles/health/mcap.o: undefined reference to symbol 'clock_getres@@GLIBC_2.4' //lib/arm-linux-gnueabihf/librt.so.1: error adding symbols: DSO missing from command line collect2: ld returned 1 exit status Makefile:4184: recipe for target 'tools/mcaptest' failed make[1]: *** [tools/mcaptest] Error 1 Makefile:2648: recipe for target 'all' failed make: *** [all] Error 2
参考: http://www.forum-raspberrypi.de/Thread-raspbian-bluez-5-x-kann-nicht-erstellt-werden
まず、ドングルがUSB機器として認識しているかを確認します。
1 2 3 4 5 6 |
|
ちゃんと認識されました。
hciconfig
を用いて状態を確認します。
1 2 3 4 5 6 |
|
上のようにDown
状態だったら起動します。
1 2 3 4 5 6 7 |
|
WICED Senseの電源を入れ、スキャンします。
1 2 3 4 5 6 7 |
|
WICED Senseのアドレスが00:10:18:01:07:F1
であることが分かりました。
ひたすらログが出続けるのでCTRL-Cで止めます。
実際に接続できるか確認してみましょう。
1 2 |
|
問題なさそうなのでgatttool
を使って、インタラクティブモードで接続してみます。
1 2 3 4 5 6 7 |
|
最初は接続できるものの、すぐに切断されてしまい、primary
コマンドがエラーとなります。
ノンインタラクティブモードなら大丈夫のようです。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
切断されてしまう原因が分からないのですが、ノンインタラクティブモードで進めてみましょう。
Manufacturer Name String
を取得してみます。
1 2 3 4 |
|
期待通りBroadcom
という文字列が取得できました。
では、本来の目的であるセンサー情報を取得してみます。ここを参考に、notification
を受け取るために0x0100
を書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
無事、センサーデータを取得できたのですが、やはい、1秒くらいで接続が切れてしまいます。
hcidump
でパケットをキャプチャしてみたところ、WICED Senseから接続を切っているようですが。。。今日のところはここで手詰まりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
RaspBerry Piのセットアップに関してはいろいろな方が書かれているので今更感もありますが、無線LANのセットアップまで行いたいと思います。
ダウンロードサイトからOSイメージをダウンロードします。NOOBSというインストーラーもありますが、今回はOSを直接インストールします。ディストリビューションはDebianベースのRASPBIANを選びました。RPM派の人はFedoraベースのPIDORAでもよいと思います。
OSイメージをダウンロードしてmicroSDに書き込むわけですが、今回はMacを使って書き込みます。
まず、microSDをMacに差してマウントポイントを確認します。下記の例だと /dev/disk5s1
が対象となるmicorSDです。
1 2 3 4 5 6 7 8 |
|
ディスクをアンマウントします。
1 2 |
|
dd
コマンドを使って書き込みます。microSDの書き込み性能にもよると思いますが、かなり時間がかかるので気長に待ちます。
1 2 3 4 |
|
Rrapberry PiにmicroSDを差して電源を入れるとOSが起動します。設定メニューが出るので初期設定を行います。目的次第なのですが、以下のように設定しました。
次に無線LANのセットアップを行います。おそらく、大抵の無線LANアダプターが使えると思いますが、BUFFALOのWLI-UC-GNMを使いました。
まず、無線LANアダプターをUSBポートに差して認識していることを確認します。
1 2 3 4 |
|
wpa_passphrase
コマンドを用いてパスフェーズの暗号化を行います。
1 2 3 4 5 6 |
|
次に、生成された内容を /etc/wpa_supplicant/wpa_supplicant.conf
に追加します。うちのアクセスポイントはWPA/WPA2 AESで接続するので、以下のようになりました。
1 2 3 4 5 6 7 8 9 10 |
|
続けて /etc/network/interfaces
を変更します。
1 2 3 4 5 6 7 8 9 10 11 |
|
設定が完了したのでインタフェースを再起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
最後にホスト名で ssh
接続できるように avahi-daemon
をインストールします。
1 2 |
|
Macから ping
が通ればOKです。
1 2 3 4 5 6 7 8 9 10 11 |
|
入手したのはBroadcomのWICED Sense。これ一つに温度、湿度、気圧、ジャイロスコープ、加速度センサー、コンパスが内蔵されています。
購入は以下からできますが、マクニカの方は、現時点では売り切れのようです。
Android/iPhone用のアプリが提供されていて、以下から入手できます。
まずは、Macから接続してみましょう。LightBlueというアプリケーションを使います。
“WICED Sense Kit”というデバイスが見つかるはずなので、[Service: 180A] - [Characteristic: 2A29] を選択すると、”Broadcom”という文字列が見つかるはずです。
これらの”180A”や”2A29”といった4桁のUUIDはBluetoothの規格として定義されていて、Bluetooth Developer siteで確認できます。
見たところ、WICED Senseが対応しているService/Characteristicは以下のもののようです。
一方、32桁のUUIDはデバイス開発者が独自に定義したものとなります。どうやら”33EF9113-3B55-413E-B553-FEA1EAADA459”がセンサーデータのようです。
“Subscrib”ボタンを押すと以下のようなデータを取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Sensor Dataのフォーマットはクローズドのようなのでここには書きませんが、以下から入手できます。
アカウント登録が必要ですが、企業や大学のメールアドレスならすぐに承認されます。ただし、gmailなどのフリーなemailアドレスだと拒否されてしまいます。
というわけで、今回はWICED SenseがどのようなSensor Dataを送ってくるかがわかりました。次回はRaspberry Piのセットアップを行いたいと思います。
]]>