3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M5Stack + UIFlow と Node-RED で温湿度の値を BLE UART で送信してグラフ化

Last updated at Posted at 2021-05-23

今回の内容は表題・以下の動画のとおりです。

M5Stack Core2 に 温湿度等がとれるセンサー(ENV II Unit)を取り付け、センサーで取得した値を BLE UART で送信し、それをグラフ化しました。
BLE UART で送信された温湿度の値を受信しているのは Mac で動作させている Node-RED で、BLE を扱えるノードやダッシュボードを使って値の取得・グラフ化を行っています。

以下では、それを実現するためのポイントになる部分を記載します。

用いたデバイス

今回用いたデバイスは、以下の写真にうつっている M5Stack Core2 とセンサー(ENV II Unit)、そして Node-RED を動作させている Mac です。
M5StackCore2とセンサー

用いたプログラム・フローの内容

ここでは、今回用いた UIFlow のブロックのプログラムと Node-RED のフローを示します。

UIFlow のブロックプログラム

UIFlow のブロックプログラム

ブロックプログラムの概要

まず、UIFlow を用いてブロックのプログラムを作る前準備として、UIFlow上で以下の 2つを行います。

  • 画面上にラベルを 2つ配置(温湿度の値を表示させて確認するためのもの)
  • Unit の一覧から ENV II Unit を追加

そして、上で示したブロックのプログラムを作ります。おおまかな処理の内容は以下の通りです。

  • Aボタンを押したら 500ミリごとに定期的に処理を実行
  • 定期的に実行する処理は以下のとおり
    • センサーから温湿度の値を取得
    • 温湿度の値を画面に表示
    • 温湿度の値を JSON 形式にして BLE UART で送信
      • 温度・湿度の値に対応したキーは「d1」と「d2」とした
  • Cボタンが押されたら上記の定期実行する処理を止める

なお、UIFlow で BLE UART を利用可能なデバイスは、記事を執筆した時点では「M5Stack Core2 と M5Stack Fire」のみになります。

Node-RED のフロー

Node-RED のフロー

フローの概要

Node-RED でフローを作る前に、以下の記事にも書いている「node-red-contrib-generic-ble」というノードを追加します。
 ●Mac上の Node-RED で BLE を利用して toio の制御(Read、Notify で値を受け取る) - Qiita
  https://qiita.com/youtoy/items/3db10e1042a5f2af27a0
また、グラフ化の部分にはダッシュボードの Chart を利用します。

デバイスとの接続・通知の受信

M5Stack Core2 との接続や、BLE UART で送信された値を受け取るようにするための手順は、上にも書いた過去の記事をご参照ください。

受信した値をオブジェクトに変換する

M5Stack Core2 から受信したデータは JSON の部分がバイナリデータになっています。ここから温湿度の値を取り出す下準備として、ファンクションノードと JSONノードを使ってオブジェクトへの変換を行います。

ファンクションノードでは、以下の処理を行っています。
msg.payload の中で温湿度のデータが含まれる部分を取り出し、 toString() で文字列に変換しています。

msg.payload = msg.payload.characteristics["6e400003b5a3f393e0a9e50e24dcca9e"].toString();
return msg;

ここに出てくる 6e400003b5a3f393e0a9e50e24dcca9e という文字列は、過去に書いた以下の記事などでも説明しているのですが、M5Stack の BLE の Notify に関する UUID になります。
 ●#UIFlow の BLE UART を使った #M5Stack_Core2 ( #M5Stack )からブラウザへのデータ送信とグラフ化 - Qiita
  https://qiita.com/youtoy/items/1bf6e9390b5dc5d2ba51

上記の処理を行った文字列は、JSONノードでオブジェクトに変換します(※ ノードのプロパティは以下のとおり)。
JSONノード.jpg

温湿度の値を取り出しグラフ化する

JSONノードからの出力は、デバッグノードで出力してみると以下のようになっています。
キーが d1 となっているのが温度の値で、d2 となっているのが湿度の値です。
オブジェクトの中身.jpg
これを以下のようにして、 msg.payload に取り出しました(※ 以下は温度のほうの例)。
チェンジノード.jpg

あとは、取り出した値を Chartノードに入力して、ダッシュボードでグラフとして表示させます。
今回用いた設定値とは異なる部分がありますが、ダッシュボードの Chartノードを使う手順を書いた記事がありますので、手順についてはよろしければこちらをご参照ください。
 ●Node-RED(enebular)でダッシュボード・リアルタイム通信を利用する【ハンズオン資料】 - Qiita
  https://qiita.com/youtoy/items/61e4a6c9061d68f09e3b

ダッシュボードに出力したグラフ

ダッシュボードで温度・湿度をそれぞれグラフ化したものは、以下のようになりました。
けっこう値が変動しているように見えるかもしれないですが、小数点以下の値が少し変わっているだけという感じです(自宅の部屋で 500ミリ秒ごとに取得しているので、それほど変動はありません)。
ダッシュボード(グラフ).jpg

まとめ

今回、以上のような手順で無事に、ビジュアルプログラミングを使ってセンサーによる温湿度の取得・デバイス間での送信・グラフ化を実現できました。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?