2017/12/20

RaspberryPiでBlueJelly

どうも、クラゲです。
今回は、ラズパイでBlueJellyを実行する方法です。

動画では半固定抵抗のツマミを回すことで動くスライドのアプリを使いました。
表示はブラウザのChromiumを全画面表示しています。
RaspberryPiのブラウザ設定で、とあるフラグを有効にするのがポイントです。
はじめてこのページに飛んできた人もいるかと思いますので、一応全体も説明します。

【 概要 】


【 RaspberryPi 】


ハードウェア
ラズパイは、RaspberryPi3を使いました。
RaspberryPi3はUSBドングルなどを付けなくてもBLEが最初から対応しているので便利です。

今回はSSH接続ではなく、ラズパイを直接操作する形になりますので、ディスプレイ、キーボード、マウスが必要です。

OS
OSは2017/11/29にリリースされたRASPBIAN(Stretch)を使っています。
初期設定方法はこちらをご覧ください。
RaspberryPiの初期設定

ブラウザ設定
ここが一番のポイントです。
まずRASPBIANの標準ブラウザであるChromiumを立ち上げます。
アドレスバーに以下を打ち込んでください。フラグ設定画面になります。

chrome://flags


フラグ設定の中で、"Experimental Web Platform features"という項目があります。
"有効にする"というリンクがあるので、クリックします。


一番下に"今すぐ再起動"というボタンがあるので、クリックします。
これでWeb Bluetooth APIおよびBlueJellyがラズパイで使えるようになりました!

【 古いRASPBIANの場合 】

2017/11/29にリリースされたRASPBIAN(Stretch)以降をお使いの方はここは飛ばしてください。
古いRASPBIANの場合、BlueZを最新にしないと上手くいかない可能性があります。
過去に行って成功した備忘録を残しておきます。

sudo apt-get install build-essential libglib2.0-dev libreadline-dev libdbus-1-dev libudev-dev libical-dev
 
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.45.tar.xz
 
tar -xf bluez-5.45.tar.xz
 
cd bluez-5.45
 
./configure
 
make
 
sudo make install
 
sudo nano /lib/systemd/system/bluetooth.service
 
# 開かれたエディットの9行目の最後に --experimental flagを追加
ExecStart=/usr/local/libexec/bluetooth/bluetoothd --experimental flag
CTRL+o, Enter, CTRL+x
 
sudo systemctl daemon-reload
 
sudo systemctl restart bluetooth

参考サイト

http://technobytz.com/web-bluetooth-api-bluetooth-low-energy.html

【 BLEデバイス 】

ハードウェア

BLEが搭載されているデバイスであれば、何でも対応可能です。
ここでは例として、小さく使えるBLE Nano2を用いています。
また、BLE Nano2はmbedを用いて開発しています。

BLE nano2とmbedについての詳細説明はこちらをご覧ください
BLE Nano2でLチカ

このデバイスはブレッドボードを用い、はんだごてを一切必要としません。
各部品の購入場所や結線方法についての詳しい説明はこちらをご覧ください。
BLE Nano2ではじめてのBLE通信!

ファームウェア
ファームウェアのソースコードは、先ほどのリンク先にも載っていますが、こちらです。
こちらからimportすることですぐに書き込み可能です。
BLENano_SimpleTemplate


ファームウェアで何を行っているのかをざっくり説明した図です。
今回は青いルートの部分しか使いませんのでそちらを説明します。
人がツマミ(半固定抵抗)を回すことにより0.0V~3.0Vのアナログ電圧が変動します。BLE Nanoはタイマーループでずっとその電圧を受け取りA/D変換して0~1023のアナログ値に変換してから、rxという変数に渡しています。
このrxがBLEでやり取りできる部分で、ラズパイ側はこの値を受け取ることになります。

【 アプリ(HTML/JavaScript) 】


アプリはWeb Bluetooth APIを用いて作っています。
Webアプリなので、XcodeもAndroid Studioも不要ですし、ユーザーがインストールする必要もありません。
さらにBlueJellyというラッパーライブラリを使ってシンプルなコードを記述しています。
こちらに実行可能なサンプルを置いてあります。ラズパイやAndroid、Mac、LinuxなどWeb Bluetoothに対応した端末でアクセスすれば実行可能です。
サンプル

スライドにはslickというライブラリを活用しています。ソースコードやソースコードの詳細解説についてはこちらをご覧ください。
BLEデータに応じてスライド操作!

以上、RaspberryPiでBlueJelly でした。