はじめに
以下は、名古屋市にある介護系ベンチャー企業、株式会社メグラスにて実施したRaspberry Piを使ってiBeacon信号を取り出すハンズオンのレジュメです。
ぜひコメントやツッコミいただけると幸いです。
ハンズオン実施の背景や準備などは別記事にまとめていますので、そちらを参照してください。
→Raspberry Pi & iBeaconハンズオンを介護系ベンチャー企業でやってみた
また、実際のレジュメでは割り振ったIPアドレスやホスト名などを書いていますが、本記事ではそちらの記載を省く or 伏せた形で公開させていただいております。
ハンズオンのゴール
iBeaconをRaspberry Piに近づけたら何かが起きるようにする
→「百聞は一見にしかず」なので、デモします!(実際のハンズオンでは完成形のデモをしました)
TOC
- 必要なもののダウンロードとインストール
- SDカードへのイメージ焼き
- Bootと接続確認
- 環境構築
- フロー作成
1. 必要なもののダウンロードとインストール
- PiBakery(http://www.pibakery.org/index.html)
※時間がかかるので最初にやる
インストール完了後起動しない(チェックを外す) - pibakery-blocks(自作ブロックを利用。詳細は別記事を参照ください)
PiBakeryインストール完了後下記パスに配置
C:\Program Files (x86)\PiBakery\resources\app\pibakery-blocks - TeraTerm(https://ttssh2.osdn.jp/)
- SDFormatter(https://www.sdcard.org/jp/downloads/formatter_4/)
2. SDカードへのイメージ焼き
- SDカードのフォーマット
- SDFormatterを起動
- SDカードのドライブを選択してクイックフォーマットを実行 →ボリュームラベルは何でもOK
- イメージ焼き
- PiBakeryを起動
- 主催者が作成したrecipe.xmlをインポート
- 必要箇所を変更
- IPアドレス
- ホスト名
- ログインパスワード
- Write!(Raspbian Liteを選ぶように注意)
3. Bootと接続確認
- 焼いたSDカードをRaspberry Piに挿入して電源ON
- スタートアップスクリプトが動いてreboot完了したらログイン
- ID:pi
- PW:さっき決めたパスワード
- IPアドレスの設定確認
ifconfig
- 外部への疎通確認
ping 8.8.8.8
- 自分の端末(Windows機)への疎通確認
ping 192.168.***.***
- 自分の端末でTeraTermを起動してSSH接続を確認
4. 環境構築
-
リポジトリの更新/導入済みソフトのアップデート
sudo apt update sudo apt upgrade
-
Node.jsとnpmのインストール(https://github.com/nodesource/distributions/blob/master/README.md)
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash sudo apt install -y nodejs
-
インストール確認
node -v npm -v
-
Node.jsでBLEを扱うライブラリ "bleacon" を導入(https://qiita.com/yuyakato/items/739443960fac2668f4a3)
mkdir iBeacon cd iBeacon sudo apt install libbluetooth-dev npm install bleacon
-
テスト用スクリプトを用意
vi beacon.js
-
下記のスクリプトをコピペして保存して終了
→viの使い方は自分で調べてください。心を無にしてやるなら、今回は
”i”で編集モードになって、貼り付けて(TeraTermなら右クリック)、”ESC”、”:wq!”で”Enter”ってすればOK
※”wq”は”write”と”quit”var Bleacon = require('bleacon'); // Start scanning Bleacon.startScanning(); // Events Bleacon.on('discover', function(bleacon) { if (bleacon.proximity==="near"){ console.dir(bleacon); } });
-
テスト用スクリプトを動かしてみてiBeaconの信号(BLE)を受信できてるか確認する
sudo node beacon.js
-
iOS端末で "Beacon入門" などのアプリから信号を発信して情報が流れるのを確認→Ctrl+Cで停止
-
Node-REDの導入(https://nodered.jp/docs/hardware/raspberrypi)
cd bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered) node-red-start
-
スタート後、Ctrl+Cで戻る(Node-REDはBGで動く)
-
ブラウザで下記URLへアクセスして動作確認
http://RaspberryPiのIPアドレス:1880
-
問題なければOS起動時の自動スタートを設定
sudo systemctl enable nodered.service
-
Node-REDでBLEを扱えるノードを追加
node-red-stop cd $HOME/.node-red npm install node-red-contrib-bleacon node-red-start
-
再度ブラウザでアクセス(再読込)してノードが追加されていることを確認
5. フロー作成
- 以下のURLのJSONをコピーしてNode-REDにインポート
→https://flows.nodered.org/node/node-red-contrib-bleacon - このままだとデプロイできないので、scanBeacon側だけのフローにする
- jsonのノードのところで動作を「常にJavaScriptオブジェクトに変換」にする
- ビーコン発信して、デバッグ画面みてまずは流れる生のデータを見てみる →https://developer.apple.com/documentation/corelocation/clbeacon
- ググったり、下記のURLを参考にしながらフローを作ってみる
→https://www.1ft-seabass.jp/memo/2017/10/07/node-red-meets-smart-button-switch/
→http://denshibu.blog.fc2.com/blog-entry-28.html