M5Stack / MicroPython / streamlit を用いた簡易的な異常検知モニタリングシステムの構築(ハード/ソフト準備編)

temp-hum-monitoring IoT
temp-hum-monitoring



日本の製造業の中の人が,「ベンダーやコンサルに頼らない」をモットーに,一人で/一週間の真夜中だけで/手持ちの機材で,手軽にAI/IoTシステムを構築できることを証明するために挑みました.
当該連載記事はその記録で,今回はハード/ソフトの準備について記載し,プログラミングや実装については次の記事に記載します.
(※完成度が荒目な部分もあるかと存じますがご容赦ください)

ゴール

以下の動画のようなシステムを構築します.

簡単に説明しますと,

  • センサで取得した居室内の温度と湿度データをマイコンからパソコンへ送る
  • 受け取った温度と湿度データをパソコンの画面に約1秒間隔でリアルタイム表示
  • 湿度に対する簡易的な異常検知(いつもの湿度から大きく外れていると異常と判定)

といった上記一連の流れを行っています.

ここで,異常の定義ですが,普段の居室内の湿度を正常とし,これから外れた異常値として,わざと高い湿度を取得するために,加湿器の蒸気吹き出し口にセンサを持っていき,このときの通常の状態から外れた高い湿度を異常として擬似的に定義しています.

正常/異常の判定には,動画で示した内容とは別で事前にデータを取って分析した結果をもとに,ホテリングT-squared法という機械学習(統計と言ったほうが正しいかもしれない)を用いています.
ちなみに,なぜ当該手法に至ったかというと,簡単に計算ができる当該手法でも,事前検証段階で十分に異常検知できたためです.

それでは,必要なものから以下紹介していきます.

必要なもの(ハードウェア)

システム構成図は以下です. 

赤:ハードウェア,青:ケーブル,緑:ソフトウェア

電子工作というとはんだ付けだったり,電流が流れているかテスタでチェックするようなイメージですが,買って機器同士をケーブルでつなげるだけの,すごくシンプルな構成です.
3つしかありませんが,上記のハードウェアについて一つずつ見ていきます.

M5Stack BASIC

メインの制御や通信を行う機器です.
たまたま2つ購入して,手持ち無沙汰になっていた先輩から譲り受けました.ありがたい.
M5Stack BASIC とは M5Stack 社 (https://m5stack.com/) が製造している IoT デバイスの一種で,Wi-Fi / Bluetooth を備え低消費電力である SoC の ESP32 を備え,更にはバッテリー/小型ディスプレイ/物理ボタン/マイクロ SD スロットが備わっているマイコンモジュールです.
そして,GPIO や給電と通信ができる type-C コネクタの他に,GROVE コネクタがついているため,プログラムを書き込んでGROVE 対応のセンサを繋ぐだけで,簡易的なモニタリング機器が作成できてしまうといった優れものです.
大きさと重量は,公称値で 54 x 54 x 17 [mm], 120 [g] と小型で軽量です.

M5Stack-explanation
M5Stack-explanation

上図にある通り,筐体が小さいにも関わらずインターフェースも様々で,動作がプログラミング可能な物理ボタンを 3 つ備えています(例えば,ボタン上の画面に表示した選択肢をボタン入力で操作するなど).
画面は電源ボタンを押すと点灯しますが,個人的な注意として,消灯させるには 1 回押しだとリセットで消えず,長押しもダメで,早く 2 回押すことにより消灯できます(最初の頃は画面の消し方がわからず,電池切れまで放置してました...).

最近では,日本の製造業でもIoTが浸透してきて,こういった簡単に IoT 化ができるような機器が人気となっており,在庫の争奪戦が繰り広げられています.

M5 シリーズは micro SD も装着することができるためストレージの拡張が可能ですが,16 GB 以下でないと認識しないので,購入の際は注意しましょう.

M5Stack では充電可能なバッテリーが備わっているのですが,画面つけっぱなしだったり通信させっぱなしだと 2 時間は持たないので,電源が届かないようなところで 30 分以上使うには,モバイルバッテリーから type-C 経由で給電し続けるか,次のリンクのような拡張電池モジュールを用いると安心できます.
M5Stack は,このようなバッテリーの他に,簡単に積層できる親和性の高い色々なモジュールが展開されていることも魅力の一つです.

M5 シリーズはこの他にも多数あり,GROVE ケーブルのコネクタが基本的にはついているので,BASIC 以外の M5Stack Gray, M5GO, M5Stack FIRE, M5STICK C でも当該記事の内容はできると思われます.

M5 CONTROLLERS
Open-source modular toolkits for IoT devices based on ESP32-updated version of ESP8266. With stackable modules, user-fri...

SHT35-I2C (SHT31-I2C でも可)

温度と湿度を同時に取得できるセンサです.
Factory Scientist 協会 (https://factoryscientist.com/) が運営するファクトリー・サイエンティスト育成講座を受講したのですが,そのキットに同梱されていました.
GROVE コネクタが実装されており,GROVE のケーブルで M5Stack にそのまま繋げることができ,この2つだけで温度・湿度のモニタリングができてしまいます.

基本的に GROVE ケーブルは同梱されていると思われますが,断線したりなど,もし不足するようなことがあればケーブルのみで買うこともできます.

パソコン

M5Stack にプログラムを書き込みますし,今回のシステムにおいてはパソコン側でモニタリングを行いますので,パソコンが必要です.
lenovo, HP, DELL あたりは見るたびに性能が向上した最新機種が増えていきますし,少し型落ちしているとセールで数十パーセントオフとかもあるので,ついついポチりそうになります.
筆者も,長年 Surface Pro 3 を使い続けていたのですが,メモリが 4 GB であったため OS の処理だけでいっぱいいっぱいだったので,メモリ 16 GB, Intel Core i5-1135G7 のノートパソコンに買い替えました.

必要なもの(ソフトウェア)と環境構築

USB ドライバ : CP210x_VCP_{OS}

M5Stack シリーズにおいて,パソコンから USB にてデバイスを認識するためには,CP210x ドライバをインストールする必要があります.
こちら (https://docs.m5stack.com/en/download) からダウンロード可能です.
お使いのパソコンの OS に合わせてダウンロードください.
例えば,windows 10 の 64 bit をお使いの場合は,上記 web ページにて CP210x_VCP_Windows をダウンロードし,.zip を展開の後,CP210x_VCP_Windows フォルダの CP210xVCPInstaller_x64_v*.exe
を実行ください.
インストール自体は .exe 起動して認証したり「はい」を選んだりしかないので,特に問題ないと思います.
正常にインストールできたかどうかについては,M5Stack を USB でパソコンと繋いだ状態で,コントロールパネル → ハードウェアとサウンド → デバイスマネージャー の ポート に,Silicon Labs CP210x USB to UART Bridge (COM?) と表示されていれば OK です.この COM ? の ? には数字が入り,後で使いますのでどこかにメモしておくか,この確認の仕方を覚えておきましょう.
デバイスマネージャーでは以下の画像のように表示されます.

cp210x-usb-to-uart-com
cp210x-usb-to-uart-com

M5Burner (Micro Python 環境構築用)

今回は,M5Stack をマイコン用の Python である MicroPython を用いて制御します(Arduino 言語も,もちろん扱うことができます).
M5Stack 上で MicroPython が使えるように環境構築する手段の一つで一番簡単なのが,M5Burner を用いる方法で,手順は以下です.

  1. こちら (https://docs.m5stack.com/en/download) から,パソコンの OS に適合した M5Buner のパッケージをダウンロードしてください.例えば windows 10 64 bit だと,M5Burner Win10 x64 をダウンロードします(2022/05/20 現在,M5Burner には従来からある無印の他に,v3.0 が追加されていましたが,中身は大きく変わりませんでしたのでどちらを選んでも問題ありません).
  2. ダウンロードした .zip を展開します.M5Burner はインストールの必要がなく,そのフォルダ内のファイルだけで完結するので,パソコン上の好きなところに置きましょう.
  3. M5Stack とパソコンを USB で接続します.注意として,USB ケーブルは通信可能なものである必要があり,充電のみのタイプは不可ですので,なければ 100 円均一などでお買い求めください.
  4. M5Burner.exe を起動します.今回は無印バージョンで見ていきます.
  5. 右上の歯車マークの右上に赤い丸が着いていたら,更新しましょう.この歯車マークを押すとウィンドウ左からスライドしてくるタブの Latest: ?.?.? の横の update から更新が可能です.完了するとソフトの再起動が促されるので,Yes を押して再起動します.
  6. UIFLOW (CORE) と書かれたパッケージの Download をクリックします.ダウンロードが完了すると Download から Remove / Configuration / Burn に変わります.
  7. では,M5Stack に書き込んでいきます.ウィンドウ左上の COM について,先ほどデバイスマネージャーで調べた COM と同じ番号になるように変更しましょう.Baudrate は一旦初期値の 1500000 のままにしておきます.この状態で,Burn をクリックします.
  8. すると Wifi Setting のウィンドウが立ち上がりますので,M5Stack を繋げたい Wi-Fi の SSID (名称) とパスワードを記入します.スマホのアクセスポイント(テザリング)でも OK です.Wi-Fi と繋げなくても良い場合は空欄のまま Start を押します.
  9. 書き込みが始まり,最後に Burn Sccessfully と表示されたら Close を押して終了です.これで M5Stack 側の環境構築が終わりました(プログラムの書き込みは次回の記事で).
手順5_6
手順5_6
手順7
手順7
手順8
手順8
手順9
手順9

手順9が終わると M5Stack が再起動し,次のように「UIFLOW ですよ」という画面が出たあと,1 [s] 後に This is the default program in APP mode. ... と画面に出力されれば,M5Stack 上に UIFLOW というツールでプログラムを書き込める環境が構築されていることを示します.

M5Stack-uiflow
M5Stack-uiflow
M5Stack-uiflow-init
M5Stack-uiflow-init

なにやら「オンラインプログラミングモード」みたいな単語が書いてあります.
ここで UIFLOW とは,ローカルの PC アプリもしくは web ブラウザで動作するプログラミングツールで,Scratch のような GUI 操作を主にした Blockly という言語と MicroPython をサポートしており,UIFLOW を用いることでプログラミングや M5Stack への書き込みが容易にできます.
しかしながら,今回は UIFLOW 自体使わないので無視します.

ではなぜ UIFLOW を入れたかということですが,MicroPython が簡単に入れられるということの他に,UIFLOW により M5Stack に書き込んだプログラムが一つのアプリとしてみなされ,どれを動作させるか選択できて便利だからです.
上記の画面の状態から,左側面の赤色のリセットボタンを一回押すと,再び UIFLOW の APP モードのホームになり,短い時間ですがこの画面が表示されている間に,一番左のボタンを押下することで,書き込んだプログラミングを選択できる画面に遷移できます.
初期状態では,temp.py というアプリがすでに入っていると思います.
参考までに,画面遷移について以下のようにまとめてみました.

uiflow-flow
UIFLOW の画面遷移

Python 及びライブラリ(streamlit 他)

今回のシステムにおいて,

  • M5Stack に書き込む手段
  • 異常検知のための演算
  • 簡易的なモニタリングソフト

に用いるプログラミング言語の Python と必要なライブラリを準備しましょう.

Python 自体のインストールは,次の記事をご覧ください.

必要なライブラリは,Python をインストール後,コマンドプロンプトなどのシェルにて以下コピペでインストールできます(もちろん,お好みで venv などの仮想環境をお使いいただけます).

pip install scipy jupyterlab seaborn PyYAML streamlit adafruit-ampy

もし,パソコンがオフラインだったり会社のプロキシがかかった状態だと,上記の pip install {パッケージ名} が失敗します.
このような環境下におけるパッケージのインストールについては,以下の記事を参考にインストールすることができます.

以上が,M5Stack / MicroPython / streamlit を用いた簡易的な異常検知モニタリングシステムのハード/ソフトの準備でした.

パソコンから M5Stack へプログラミングを書き込む方法,M5Stack から温度湿度センサデータを取得する方法,パソコンへのデータ転送,パソコン側のモニタリングシステムのプログラミングなどの説明については,次の記事にて説明いたします.

コメント

タイトルとURLをコピーしました