ArduinoとDHT11デジタル温度センサーからMeshbluのMQTTブローカーにメッセージをpublishするサンプルを作成しました。またWebブラウザから直接メッセージを取得することもできました。これらを組み合わせてリアルタイムにセンシングデータをモニタリングするダッシュボードをfreeboardで作ってみます。
データソース
freeboard-mqtt
最初はfreeboard-mqttを参考にしてPahoのJavaScript Clientをfreeboardのexternal_scripts
に指定する方法を試しました。MeshbluのMQTTブローカーだとうまく動作しません。
freeboardのMeshbluデータソース
freeboardのソースコードを読んでいるとfreeboard.datasources.jsにMeshbluのデータソースが追加されていました。オフィシャルでサポートされているのでうまく行きそうです。
Arduino Unoの準備
スケッチは前回作成作成したコードを使います。DHT11のセンサーはArduinoのPD2に配線します。 WR702NモバイルルーターとEthernetでつなぎインターネットに接続します。
freeboardのインストール
プロジェクト
パブリックのfreeboardにはまだMeshbluのデータソースが追加されていません。ローカルのDockerでfeeboardを起動します。ApachやNginxでも構いませんがテスト用に使っているnode-staticのコンテナとして起動します。
まず適当なディレクトリにプロジェクトを作成します。
$ mkdir -p ~/node_apps/freeboard-static |
publicディレクトリにfreeboardのソースをgit cloneします。
$ git clone https://github.com/Freeboard/freeboard.git public |
以下のようなプロジェクト構成になります。publicディレクトリにfreeboadがデプロイされています。
$ tree -L 1 . |
ソースコード
今回はgoogle/nodejs-runtimeをベースイメージに使います。
FROM google/nodejs-runtime |
コンテナは1つなのでDocker Composeは不要ですが、あとで他のコンテナとオーケストレーションするために最初からDocker Composeにしておきます。
freeboard: |
package.jsonからnode-staticのインストールをします。
{ |
メインプログラムです。単純に./public
ディレクトリをサーブします。
var static = require('node-static'); |
Docker Composeからコンテナを起動します。
$ docker-compose up |
feeboardの設定
ブラウザからfreeboardを起動しているDockerコンテナに接続します。
Datasourceの追加
DATASOURCES > ADD > TYPE > Octobluを選択します。
UUIDとTOKENはArduinoのスケッチでMQTT publishするときに使った組み合わせを指定します。
Paneの追加
ADD PANE をクリックしてあたらしくPaneを作成します。
Widgetの追加
作成したPaneの+ボタンをクリックします。DHT11センサーからは湿度と温度を計測しているので、HumidityとTemperatureの2つのWidgetを作成します。
湿度のパーセントはゲージの半円グラフで表示します。VALUEの+DATASOURCEボタンをクリックしてJSONデータから取得するデータを指定します。
温度のCはテキストと折れ線グラフで表示します。
設定をJSON形式で保存
最後にこれまでの設定をJSON形式で保存してローカルにダウンロードします。ブラウザをリロードしても設定は消えてしまいます。次回はLOAD FREEBOARD
をクリックしてJSONをアップロードします。
完成
Arduinoからは5秒間隔でDHT11センサーから計測した値をMQTT publishしています。上の工具アイコンをクリックすると編集画面になります。通常はこのダッシュボードの画面を表示します。