Vol.05 DevicePlus 電子工作マニュアル ~Raspberry Pi を活用してみよう ( 上級編 )~ ibeacon1 個だけであらゆるモノを IoT デバイスに変身! ラズベリーパイと ibeacon で作るコーヒー休憩お知らせマシン http://deviceplus.jp/
もくじ 当電子工作マニュアルは 以下の内容で構成しております 所要時間 :180 分 部材費用 : 約 7,000 円 レベル : はじめに 2 ibeacon1 個であらゆるモノを IoT デバイスに変身! ~ ラズベリーパイと ibeacon で作るコーヒー休憩お知らせマシン ~ 必要なもの 2 ibeacon って何? 3 ibeacon の活用事例 3 ibeacon の利用が可能な端末や環境 3 ibeacon のしくみ 3 ibeacon のビーコン信号が発信する情報 4 ibeacon の届く範囲とエリア分け 5 ibeacon の特徴まとめ 5 ラズベリーパイで ibeacon を利用してみる 5 必要なライブラリのインストール 5 Bluetooth デバイスをラズベリーパイにインストール 6 ラズベリーパイを ibeacon として動かす 7 ラズベリーパイを ibeacon としてビーコン信号を発信する ( アドバタイジング ) する 7 他の端末でビーコン信号を確認する 8 ラズベリーパイを受信側で利用する場合 9 ibeacon チップを用意する 9 ラズベリーパイの受信コマンド 10 コーヒー休憩お知らせデバイスの実装 10 ibeacon 発信側の準備 11 受信側ラズベリーパイの準備 11 まとめ 13 参考 関連リンク 14
はじめに ibeacon( アイビーコン ) というキーワードが 昨年から技術系の雑誌や ウェブサイトでよく見られるようになりました ibeacon は iphone をはじめとする Apple 社の ios バージョン 7 以降に搭載された低電力 低コストを特徴とする Bluetooth Low Energy(BLE) を技術基盤とした通信プロトコルで ワイヤレス技術では 今最も注目されている技術のひとつでしょう ibeacon は ビーコン電波を発信する端末を安価に用意できること 電池などの省電力で長期間運用できること 発信端末から受信端末までどれくらい近いかを Immediate/Near/Far/Unknown といった 4 つレベルで取得できるなどの特徴があります 2014 年後半から ibeacon 対応の iphone を持つユーザーが多くなったことや Android4.3 から ibeacon を利用する BLE 機能の API が搭載さ れたことなどを理由に ibeacon の活用事例が見られるようになりました ibeacon は 一定間隔で複数カ所に端末を設置することで 位置情報を特定でき GPS 電波の届かない屋内の位置情報を利用するサービスなどと親和性が高いことがあげられます 駅やデパートといった施設内の案内機能や 店内の入店を自動的に確認して クーポンを発行するといった 活用の場が広がる可能性を持った技術です 本マニュアルでは ibeacon がどのように利用できるのか? Bluetooth と何が違うのか? という ibeacon の基本的な使い方を紹介するとともに ラズベリーパイで ibeacon を利用するためのライブラリ BlueZ の使い方を解説します また 実例として ibeacon 1 個からできる IoT デバイス コーヒー休憩お知らせマシン を作成します ibeacon1 個であらゆるモノを IoT デバイスに変身! ~ ラズベリーパイと ibeacon で作るコーヒー休憩お知らせマシン ~ 必要なもの 表 1 使用する部品一覧 品名 型名 仕様 数量 参考価格 ラズベリーパイ 2 Model B Raspberry Pi2 Model B 1 3,240 円 MyBeacon Fun MB005 Ac Applix 1 1,000 円 ブレッドボード BB-601 1 130 円 ブレッドボード ジャンパワイヤ EIC-J-L 1 330 円 電池ボックス単 3 2 本用 BH-321-1AS 1 60 円 ピンヘッダ 1 40 ピンヘッダ 1 40 1 40 円 Bluetooth 4.0 USB MICRO ADAPTER BSBT4D09BK BUFFALO 1 1,400 円 PC ファン 静音ファン 1 620 円 参考価格は 2015 年 4 月現在 2
ibeacon って何? ibeacon は ios7 から搭載された近距離無線通信用の新技術または通信プロトコルの名称です ibeacon は現在ワイヤレスのキーボードやマウス ヘッドホンなどで利用している人も多い Bluetooth を低電力での通信を可能に拡張した仕様の Bluetooth Low Energy(BLE) をベースとする技術のため 低電力で運用できることはもちろんのこと その発信端末が低コストで導入できることもメリットの一つとしてあげられています ibeacon の名称は先頭の小文字の i から連想される方も多いように Apple 社が商標を持つ技術です 図 2 JR 東日本の駅構内ナビ (http://www.jreast-app.jp/s-navi/) ibeacon の利用が可能な端末や環境 ibeacon は iphone や ipad などでは ios7 以上 Android では AndroidOS4.3 から Bluetooth の BLE 機能に関する API が利用可能になったので Bluetooth デバイスが BLE 対応であれば Android でも利用が可能になりました ibeacon のしくみ ibeacon と Bluetooth の違いと他のビーコン端末の違い 図 1 ios:ibeacon について (https://support.apple.com/ja-jp/ht202880) ibeacon の活用事例 ここ 1 年で ibeacon に対応したスマートフォン端末が増えた背景もあり 多くの企業で ibeacon を利用したサービスが登場しています 特に ibeacon は屋内の位置情報を取得することができるため 多くの公共施設や商業施設が 施設案内 情報提示アプリとしてリリースをしています JR 東日本が 2014 年 12 月から 2015 年 2 月まで実証実験が行った 東京駅構内ナビ では 東京駅の構内案内アプリとして 地下 1 階と 1 階に ibeacon 端末を約 160 個設置し アプリを起動しているユーザーの現在地の周辺マップと 目的地までのルート案内をするナビゲーションアプリを提供しています ibeacon では ビーコン信号を発信する発信機と その信号を受信する受信機が必要となります 1. iphone の場合もっとも古い機種で iphone4 が ios7 の導入が可能 2. iphone の場合もっとも古い機種で iphone4 が ios7 の導入が可能 よく間違いやすいのが ibeacon は Bluetooth のようにデータの送受信はできず 発信端末は基本的にビーコン信号を発信するだけということです 図 3 ibeacon と Bluetooth の違い 3
また 他のビーコン端末が各社から発売されていますが ibeacon とそれら端末の違いは ibeacon の規格に準拠しているかどうかです ibeacon の規格では 少なくとも 100 ミリ秒ごとに 1 回以上のビーコン信号を発信する必要があります このビーコン信号を発信することを ibeacon では アドバタイズ と呼び ビーコン信号の内容は端末の識別情報を発信することが定められています ibeacon のビーコン信号が発信する情報 proximity UUID 128bit からなるビーコンの識別子です 128bit の UUID で表現し ビーコンそのものを識別するための ID や 法人などの組織などの識別に利用されることが想定されています この値は必須の情報となります major Mac の場合 ターミナルの uuidgen コマンドで 128bit のユニークな UUID キーを作成することが可能です 16bit からなるビーコンの識別子です Proximity UUID とは違い 16bit の unsigned integer 形式の値で proximity UUID が組織などの単位に比べて major はその中のグループ分け ( 例としてデパートで利用する際 proximityuuid が デパートの法人名 major がデパート内の階数に分けたグループなど ) として利用想定されています この値は任意の情報となります minor 16bit からなるビーコンの識別子です major 同様 unsigned integer の形式で major よりもさらに細かくグループ分け (major がデパートの階だとすると その階ごとに入っている店舗などを指定 ) をする際などに利用想定しています この値も major 同様任意の情報となります Measured Power ビーコン発信機と受信機器の距離が 1m だと仮定した場合の信号受信強度 (RSSI:Received Signal Strength Indicator) です 基本的に ibeacon ではこの強度を元に発信機と受信機の距離を測定しています 例として とあるデパート内で ibeacon を利用したアプリを使って ユーザーがそれぞれエレベーター エスカレーター 階段などの利用頻度を計測するようなシーンの場合は 下記のような表の構成で ibeacon 端末を設定します ibeacon 発信端末から発せられるビーコン信号の強さ ( 距離 ) に応じて 4 種類の状態を取得できます 表 2 ibeacon 情報設定の例 1 階 2 階 3 階 Minor UUID 7408A8BD-046B-43E0-95D4-0D5963984EF4 Major 1 2 3 エレベーター 10 10 10 エスカレーター 20 20 20 階段 30 30 30 4
図 4 ibeacon の届く範囲とエリア分けのイメージ ibeacon の届く範囲とエリア分け Immediate エリア もっとも近い位置にいるときに受信できる状態です 電波強度によりますが 大体 10cm 以内の距離に受信端末を近づけた場合にこの状態を取得できます スマートフォンなどを ibeacon 端末にかざしてクーポンを利用するなどといった使い方ができます Near エリア Immediate よりも少し遠く 約 1m 以内での状態を取得できます 店舗の入り口などに端末を設置して 人が出入りしたかなどを検出するといった利用が考えられます Far エリア 距離を測ることのできるもっとも広い範囲のエリアが Far になり 約 10m 以内の状態を取得できます Far は Immediate や Near よりも範囲が広いため 屋内などでは建物の構造の影響で誤差がでるので気をつけましょう 店舗内に人がいるかどうかの判断や 店舗前を通り過ぎるユーザーに対して情報を発信するなどの使い方の他 複数の発信端末を一定の距離でおくことで 屋内のユーザーの位置を割り出すなどの使い方ができます ibeacon の特徴まとめ Apple 社が商標を持つ BLE をベースとした近距離無線通信技術 低コスト 低電力で運用が可能 ibeacon を利用できるのは ios では ios7 から Android では 4.3 から ibeacon1 つだけあっても何もできない 信号を受けて処理を行う端末 サービスが必要 スマートフォンで利用するには Bluetooth をオンにする必要がある 端末から発信されるビーコン信号は proximity UUID( 必須 ) major( 任意 ) minor( 任意 ) の識別情報と Measured Power のビーコン信号強度 ibeacon で取得できるエリアの状態は Immediate Near Far Unknown の 4 つ Unknown エリア ビーコン信号は受信できているが距離を測定できない状態で表示されます Unknown は Far よりも遠ざかったときに検出される他 電波の干渉などで一時的に受信ができない場合や Measured Power が高すぎるなどの場合も Unknown として判定されるので アプリを開発する際は気をつける必要があります 5
ラズベリーパイで ibeacon を利用してみる ラズベリーパイで ibeacon を利用してみましょう その前にラズベリーパイで ibeacon を利用するための下準備をします 図 6 BlueZ のインストール Bluetooth デバイスをラズベリーパイにインストール 図 5 BlueZ http://www.bluez.org/ 2015 年 4 月現在の BlueZ 最新版は 5.30 です 必要なライブラリのインストール ラズベリーパイで Bluetooth デバイスを扱うために bluez というオープンソースの Bluetooth プロトコルスタックを利用します BlueZ は Linux や Android などで手軽に Bluetooth を制御するためのライブラリです 下記 URL から最新の BlueZ をダウンロードして インストールします インストール完了後 一度再起動してください $ sudo aptitude install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline6-dev $ wget http://www.kernel.org/pub/linux/ bluetooth/bluez-5.30.tar.xz $ tar xvjf bluez-5.30.tar.xz $ cd bluez-5.30 $./configure disable-systemd enablelibrary $ make $ sudo make install BlueZ のインストールが完了したら Bluetooth デバイスをラズベリーパイに装着します Bluetooth デバイスは低消費電力モード (BLE - Low Energy feature) 対応のものを利用してください 本マニュアルでは バッファロー社の Bluetooth 4.0+EDR/LE 対応 USB マイクロアダプターを利用します 写真 1 バッファロー Bluetooth 4.0+EDR/LE 対応 USB マイクロアダプター 写真 2 USB ポートに Bluetooth デバイスを装着 BlueZ のインストール完了後の再起動が完了したことを確認して Bluetooth デバイスが認識されているか確認します 図 7のように hcixx: (XX には数字がはいる ) の表示がされていれば Bluetooth デバイスが認識されている状態です 6
Bluetooth デバイスを確認する $ hciconfi g ラズベリーパイを ibeacon として動かす Bluetooth デバイスの準備ができたら 下記 BlueZ のコマンドで ibeacon として動かします BlueZ では基本的に下記のコマンドを利用します BlueZ の主なコマンド 図 7 Bluetooth デバイスがインストールされているか確認 hciconfi g - Bluetooth デバイスの設定コマンド hcitool[ オプション ] コマンド [ パラメーター ] - 通信を制御するためのコマンド dev ローカルデバイスの表示 scan リモートデバイスを探索 name リモートデバイスの名前を取得 info リモートデバイスの情報を取得 Bluetooth デバイスを起動する $ sudo hciconfi g hci0 up $ sudo hciconfi g hci0 noscan $ sudo hciconfi g hci0 leadv 3 これで Bluetooth デバイスから電波の送受信が可能になったので いよいよ ibeacon としてビーコン信号を送受信します ラズベリーパイを ibeacon としてビーコン信号を発信する ( アドバタイジング ) する 図 8 ラズベリーパイをビーコン発信端末として利用 図 9 コマンド内のビーコン信号の割り当て 7
ラズベリーパイを ibeacon 発信端末として利用する場合 下記のコマンドで ビーコン信号を発信できます ラズベリーパイとスマートフォンの距離を離したり 近づけたりすると Immediate ~ Far などへと状態が変わります ビーコン信号の発信 ( アドバタイズ ) $sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 0A CE 38 33 32 13 AA E2 98 F1 34 6D A3 F3 89 72 00 00 00 00 C8 00 信号の内容は図 9 の通りです 色のついた部分を 各自定めた仕様に書き換えてご利用ください また 下記コマンドにてアドバタイズを終了できます 写真 3 ラズベリーパイから ibeacon 信号をキャッチ 図 10 デバイスの起動から ibeacon 信号の送信 アドバタイズの終了 $ sudo hciconfi g hci0 noleadv 図 12 Immediate と Near を検出 他の端末でビーコン信号を確認する ラズベリーパイから正しくビーコン信号が発信されているかを確認します iphone または Android で ibeacon を確認できるアプリの ibeacon Scanner を使います ibeacon Scanner をインストールして起動すると 画面右下に緑色の枠のボタンがあるので それを押すと周囲の ibeacon 端末を探索できます 図 11 ibeacon Scanner 8
ラズベリーパイを受信側で利用する場合 図 13 ラズベリーパイをビーコン受信端末として利用 前項とは逆に 別の ibeacon から発信されているビーコン信号をラズベリーパイで受信する場合について解説します ibeacon チップを用意する WAKE に接続されているスイッチが On になったタイミング (WAKE が立ち上がったとき ) で 30 秒間ビーコン信号が発信されるパターンとなります ibeacon の発信端末は iphone や Android でも比較的簡単なプログラムを書くだけで実装ができます 本マニュアルでは 電子工作に応用が可能な Applix 社の MyBeacon Fun MB005 Ac( 以降 MyBeacon Fun) を利用します MyBeacon Fun では センサやスイッチをつないで 任意のタイミングでビーコン信号を発信できる仕組みになっています 回路の接続方式によって ビーコンの発信タイミングを変えられます MyBeacon Fun の信号パターン http://www.aplix.co.jp/?page_id=9351 図 14 MyBeacon の On/Off 制御のパターン表 写真 4 MyBeacon Fun MyBeacon Fun はサイズが縦 34mm 横 34mm 高さ 4.4mm と非常にコンパクトで 必要な電源電圧が DC1.8V ~ 3.6V なので 電池で長期間駆動することが可能です 今回は MyBeacon の On/Off 制御パターンの中で パターン 1 を利用します パターン 1 では 図 15 MyBeacon 信号パターン 1 9
コマンドを実行すると 発見できた ibeacon 信号の情報が表示されます 表示される内容は 図 16 の通りです 写真 5 MyBeacon パターン 1 回路 この回路では 青色のリード線がスイッチになっています リード線同士をつなげると 30 秒間ビーコン信号が発信されます ラズベリーパイの受信コマンド ラズベリーパイで ibeacon 信号を受信するには 下記のコマンドを使います hcidump コマンドで Bluetooth デバイスのログを吐き出すように設定し その後 hcitool lescan でビーコン信号を発信している端末を探索します ibeacon 信号を受信する $ sudo hcidump R & $ sudo hcitool lescan 図 16 ビーコン信号を受信 これで 受信ができるようになりましたが このままでは他のプログラムから利用するのが大変なので ログを整理するシェルスクリプトを利用して動作させます $ sudo wget http://developer.radiusnetworks. com/ibeacon/idk/ibeacon_scan $ sudo chmod 755 ibeacon_scan $ sudo apt-get install bc $./ibeacon_scan これでラズベリーパイを利用して ibeacon の送受信ができるようになりました コーヒー休憩お知らせマシンの実装 図 17 システム構成 10
これまでの内容を踏まえて ibeacon を使った例を紹介します コーヒーメーカーに ibeacon を設置し オフィス内の誰かが休憩所でコーヒーを入れたことをスイッチで検知してビーコン信号を発信します ビーコン信号は他の人のデスクなどに置かれた受信端末側で ラズベリーパイを通じて誰かの休憩をコーヒーの香りで教えてくれるマシンを作成します このデバイスでは オフィス内の仲間と休憩のタイミングを 視覚 音声 といった伝え方ではなく 香り という気配で お知らせします もともと このデバイスは椎尾一郎氏 美馬のゆり氏らの Meeting Pot Project を参考にしています (http://siio.jp/projects/pot/) Meeting Pot Project は 2001 年に発表され 当時は独自のシステムで構築されていましたが 今回 ibeacon とラズベリーパイで電子工作しましょう 写真 6 今回利用したコーヒーメーカー ibeacon 発信側の準備 ibeacon 発信端末をコーヒーメーカーに装着します スイッチ部分は下記図のように コーヒーメーカーにカップが置かれたときの重さを利用して スイッチが入るようにします 前項で紹介したように MyBeacon の回路パターン 1 を採用することで スイッチが入ってから 30 秒間ビーコン信号は発信されます ラズベリーパイで確認する前に スマートフォンで信号が正しく受信できるか確認します 受信側ラズベリーパイの準備 ラズベリーパイの準備をします ケースには 加工のしやすいコーヒー用の紙コップを利用します 紙コップの中には 香りの元となるコーヒー豆 ( 今回はインスタントコーヒーの粉を使いました ) と 香りを送るためのファンを設置します ファンとラズベリーパイの接続は GPIO ピンを利用します (GPIO の利用については DevicePlus のラズベリーパイ連載第 9 回目 http://deviceplus.jp/ hobby/ ラズベリーパイ _entry_009/ もしくは ダウンロード資料初級編を参照してください ) 香りを送風する PC ファンはラズベリーパイの GPIO の 6 番ピン (GND) と 2 番ピン (GPIO2) に接続します 下記のコマンドでファンを制御します Echo コマンドで GPIO の 2 番ピンに対して 出力をオンオフします GPIO 利用準備 ~ ファンを起動して 30 秒後停止 $ echo 2 > /sys/class/gpio/export $ echo 1 > /sys/class/gpio/gpio2/value; sleep 30s; echo 0 > /sys/class/gpio/ gpio2/value ファンの動作が確認できたら 実際にラズベリー 写真 7 ibeacon 発信端末をコーヒーメーカーに装着 図 17 スイッチが入るしくみ 11
パイで受信した時にファンが回るように先ほどの ibeacon_scan のコマンド内に組み込みます #!/bin/bash # ibeacon Scan by Radius Networks if [[ $1 == "parse" ]]; then packet="echo 2 > /sys/class/gpio/export" capturing="" count=0 while read line do count=$[count + 1] if [ "$capturing" ]; then if [[ $line =~ ^[0-9a-fA-F]{2}\ [0-9a-fA-F] ]]; then packet="$packet $line" else if [[ $packet =~ ^04\ 3E\ 2A\ 02\ 01\.{26}\ 02\ 01\.{14}\ 02\ 15 ]]; then UUID=`echo $packet sed 's/^.\{69\}\(.\{47\}\).*$/\1/'` MAJOR=`echo $packet sed 's/^.\{117\}\(.\{5\}\).*$/\1/'` MINOR=`echo $packet sed 's/^.\{123\}\(.\{5\}\).*$/\1/'` POWER=`echo $packet sed 's/^.\{129\}\(.\{2\}\).*$/\1/'` UUID=`echo $UUID sed -e 's/\ //g' -e 's/^\(.\{8\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.\ {12\}\)$/\1-\2-\3-\4-\5/'` MAJOR=`echo $MAJOR sed 's/\ //g'` MAJOR=`echo "ibase=16; $MAJOR" bc` MINOR=`echo $MINOR sed 's/\ //g'` MINOR=`echo "ibase=16; $MINOR" bc` POWER=`echo "ibase=16; $POWER" bc` POWER=$[POWER - 256] if [[ $2 == "-b" ]]; then echo "$UUID $MAJOR $MINOR $POWER" else echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER" fi packet = `echo 1 > /sys/class/gpio/gpio2/value; sleep 30s; echo 0 > /sys/class/gpio/ gpio2/value` fi capturing="" packet="" fi fi if [! "$capturing" ]; then if [[ $line =~ ^\> ]]; then packet=`echo $line sed 's/^>.\(.*$\)/\1/'` capturing=1 fi fi done else sudo hcitool lescan --duplicates 1>/dev/null & if [ "$(pidof hcitool)" ]; then sudo hcidump --raw./$0 parse $1 fi fi 12
準備ができたら 実際に動作を確認してみます コーヒーメーカーにカップを置いた瞬間 ibeacon 信号が発信されて 紙コップのファンが回りコー ヒーの良い香りがデスク周りに広がりました 休 憩室が別室などの広いオフィスなどで利用した際 は デバイスからコーヒー香りが ほどよい休憩 タイミングを知らせてくれます 写真 8 紙コップ内に設置するファン 写真 9 紙コップの中にインスタントコーヒーの豆 図 18 ラズベリーパイとファンの回路 写真 10 コーヒー休憩お知らせデバイス完成 まとめ 図 19 RaspberryPi2 ModelB の GPIO (http://www.element14.com/community/docs/ DOC-73950/l/raspberry-pi-2-model-b-gpio-40-pinblock-pinout) 本マニュアルでは ラズベリーパイを利用して ibeacon の送受信の方法と ibeacon を利用して コーヒー休憩お知らせデバイス を作成しました ibeacon は 低電力で低コストなため 手軽に面 白いデバイスやサービスが実装できると思います 今回作成した コーヒー休憩お知らせデバイス は スイッチ自体は簡単な仕組みですが この仕組み を生活シーンに応用すると 部屋のドアの開閉を 検知してラズベリーパイから指令を出す 光セン サや温度センサと組み合わせて一定以上の温度に なったら ibeacon を通じて熱中症予防アラートを 発信するといった電子工作ができますね 今回利用した Applix 社の MyBeacon Fun MAKERS ZONE では 上記にあげた例の他 ウェブサイトに 応用例が紹介されているので 興味のある方はぜひご 覧ください MyBeacon Fun MAKERS ZONE http://www.aplix.co.jp/?page_id=9351 13
参考 関連リンク ラズベリーパイを ibeacon 化してみた - 気のむくままに http://jyun1.blogspot.jp/2013/12/i-beacon-make-by-raspberry-pi.html ラズベリーパイで ibeacon を検知する Qiita http://qiita.com/katsuyoshi/items/9d5417495a47c4b15ac1 ラズベリーパイで ibeacon を試してみよう! https://www.eyemovic.com/blog_it/4269.php hcitool と hcidump で確認 http://rpd7.tomolog.info/knowledge/raspberrypi/07_hcitool.html Meeting Pot アンビエントディスプレイによるコミュニケーション支援 http://siio.jp/projects/pot/ 14
お問い合わせ info@deviceplus.jp 掲載記事利用上のご注意 掲載された回路 技術 プログラムなどを利用して生じた 全ての不利益 損害 事故など DevicePlus 編集部 ローム株式会社は責任を負いかねます