はじめに
この記事ではRaspberry PiとLeafonyを使って短時間でIoT環境センサを作り、Google SpreadSheetを使って簡単にグラフ化する方法について紹介します。
実際にサンプルコードを動かして、ハードからソフトまでIoTサービスの開発をとても簡単に体験できます。
用意するもの
- Raspberry Pi
- Leafony Basic Kit
- サンプルコード
1. Leafony Beaconの作成
ハードウェアはArduino互換ボードLeafonyで作成します。
サンプルリポジトリにあるleafony_beacon.inoが今回使用するスケッチです。
このスケッチはLeafonyをBluetooth Beacon (以下BLE Beacon)として動作させるもので、非常に省電力な動作が可能です。
(参考: 回路設計なしで省電力なBluetooth LE Beaconを開発する)
使用する基板はBasic Kitに含まれる下記の5枚です。
- 4-Sensorsリーフ (温度・湿度・照度・加速度)
- AVR MCUリーフ (ATmega328P)
- USBリーフ
- BLE Sugarリーフ
- CR2032コイン電池リーフ
組み立てをを終えたらleafony_beacon.inoを書き込んでください。
2. Raspberry Piの環境構築
BLE Beaconの受信機にはRaspberry Piを使います。
今回使用するサンプルコードでは、Node.jsでnobleを使ってBLE Beaconを受信します。受信したデータはGoogle API経由でSpreadSheetに書き込んでいます。
下記のスクリプトを実行して環境構築をします。
sudo apt update
sudo apt upgrade
# 必要なパッケージのインストール
sudo apt install -y bluetooth libbluetooth-dev libudev-dev git nodejs npm
# サンプルコードのリポジトリをclone
git clone https://github.com/Leafony/leafony-beacon
cd leafony-beacon/spreadsheet-logger
# 必要なモジュールをインストール
npm install
3. Google SpreadSheet APIの取得
Google SpreadSheetをNode.jsで操作するためにはAPIを取得する必要があります。
下記の記事のStep.1
で自分のGoogleアカウントのSpreadSheet APIを有効にして、credentials.json
を取得できます。
credentials.json
をleafony-beacon/spreadsheet-logger
ディレクトリに
コピーしてください。
4. 実行
Google Driveにシートを作成しましょう。シート名は何でも良いです。
シートには赤線の位置にシートIDとシート名があります。
これらをコピーしてindex.js
の下記の部分に貼り付けます。
const spreadsheetId = '<YOUR SPREADSHEET ID HERE>';
const sheetName = 'Sheet1';
下記のコマンドでサンプルコードを実行しましょう。
初回起動時はGoogle APIの認証用URLにブラウザでアクセスして、表示された認証コードを入力します。
Raspberry Piはブラウザの動作が重いこともあるため、SSH経由で操作することをお勧めします。
$ sudo node .
Authorize this app by visiting this url: <認証用URL>
Enter the code from that page here: <認証コードを入力>
データが送られてきました。 シートをみていると、どんどん新しいデータが更新されていって楽しいです。
5. データの可視化
今回使ったシートを共有します。グラフ化の方法は下記のシートを参考
QUERYを使うと、最新のデータから順に指定した個数だけ別のシートに取ってくることができます。
デバイス名ごとに下図のように整理しました。
すべてのグラフを1ページ目にまとめると非常に見やすいです。
最終受信日時なんかも追加して、ちゃんとRaspberry Piが動いているのかも確認できます。
Google SpreadSheetはスマートフォンやタブレットでも表示できるため、これで簡単に外出先からでもモニタリングできるようになりました。
まとめ
Raspberry PiとLeafonyを使ってBLE Beaconのサンプルアプリを動かしました。
Google SpreadSheetをデータベース兼UIとして用いることで、ほぼノーコードで簡単にリモートでセンシングを行うことができました。
次回
ここまではLeafonyオリジナルのセンサ基板で温湿度や照度の測定を行いました。
次回は圧力やガスセンサを搭載した自分オリジナルの基板を設計しサンプルコードをいじってみようと思います。
補足説明
nobleをRaspberry Piで使う上の注意点
Raspberry PiでBLEのAdvertisementをスキャンするために、nobleというNode.js向けBluetoothライブラリを使用しています。
npm install noble
で入るものはRaspberry Piではうまく動きませんでした。(2019年12月現在)
nobleをフォークした下記のライブラリではRaspberry Piで動作可能です。
npm install @abandonware/noble
とすることで、Raspberry Piだけでなく、WindowsやMac OSで動かすことが可能となります。