M5Stack GrayでESPHomeを使うための設定

センサーからのデータを簡単に記録に残すために、ホームオートメーションのためのオープンソースの Home Assistant を試すことにした。Home Assistant は、(センサー)デバイスからのデータ収集やそれらのデータをトリガーや条件としたアクションの制御ができる。

センサーデバイスとしては様々なものが使えるようになっているが、実験を行うには Espressif のESP32 (もしくは ESP8266)で動作する ESPHome が便利そうである。また、とりあえずの実験ではブレッドボードなどを使わず、Groveなどでセンサーをつなげてディスプレイがあるものが便利なので、ESP32を利用した M5Stack Gray (Grey) [ M5Stack Basic ]で試してみることにした ( M5Stack Core 2 は表示が正常にならなかったので、もう少し試してからまとめたい )。

ESPHomeは、YAML (Yet Another Markup Language → YAML Ain't a Markup Language )形式でデバイスの仕様を記述すると、それに基づいて PlatformIO を利用してファームウェアをビルドしてくれる。PlatformIOのダウンロードやライブラリのダウンロードも基本的に自動なので、用意されている機能をYAMLで制御すればよい程度の軽いカスタマイズをする場合には便利と思われる。

試用環境

ハードウェア

ソフトウェア

  • Windows 11 Pro 22H2 22621.1555
    • CP210x Universal Windows Driver v11.2.0 (10/21/2022)
  • Home Assistant 2023.5.2 (Supervisor 2023.04.1, Operating System 10.1, フロントエンド: 20230503.3)
    • ESPHome version: 2023.4.4

試用のまとめ

ESPHomeには ESP32のフラッシュメモリへの書き込みを無線で(Over The Air – OTA)できる機能があるが、最初だけはUSB接続でインストールする必要がある。これを ESPHome Web を利用して行ったが、うまくいかないことが多く難儀した。Platform IO (Arduino)からUSBでプログラムの書き込みをすると問題なくできるので、ESPHome Web 書き込みプログラムの問題なのであろうか。ESP32への書き込みの問題としては、ESP32のフラッシュへの書き込みエラーの時のようなキャパシタの容量不足というわけではなさそうである。

M5Stack Gray (Basic) には ディスプレイ用チップが異なる2種類があり、現在は販売されていないが、ILI9341を使用した古いものでは、カラー表示が反転されてしまう。表示以外の機能は、比較的新しい M5Stack Gray (ILI9342C使用)も、古いM5Stack Gray (ILI9341使用)も同じと思われる。

初期設定手順

M5Stack (Basic, Gray, Core 2)への初期firmware書き込み

M5StackをパソコンのUSBに接続し、Webブラウザから ESPHome Web にアクセスし、書き込みを行う。まず、ESPHome Web ではCONNECT を選択する。ポート選択画面になったら、対象のM5Stackが接続されているポートを選択する。パソコンに接続しているシリアル(UART)デバイスがM5Stackだけなら、1つしか表示されていないはずで、それを選択すればよい。M5Stack以外のシリアルデバイスが接続されいる場合には、M5Stackが CP2102 USB-to-UART Bridge Controller を利用しているので、それを選択する。

初めてM5Stack (Basic, Gray, Core 2)への書き込みを行う場合には M5Stackで利用されている USB – UART ブリッジチップ (CP2102)のドライバをインストールする必要がある。CP210x Universal Windows Driver v11.2.0 (10/21/2022) を使用した。また、Webブラウザからシリアスデバイスを利用する際には、アクセスの許可をする必要がある。

Prepare your device for first use の Install を選択して、初期ファームウェアを書き込む。

Home Assistantへの登録

Home Assistantから ESPHome を使うのが簡単そうなのでそのようにした。

Home Assistant は Windows の Hyper-V を利用してインストールした。

Home Assistant への ESPHome のインストールについては、Getting Started with ESPHome and Home Assistant などに記載がある。

Home Assistant へのESPHomeのインストール時もしくはその後に、サイドバーへの追加を行って、アクセスしやすいようにして以下の例では示している。

初期ファームウェアを書き込むと、ESPHomeで検出がされる。ESPHomeで Adopt を選択することも可能だが、以下では Home Assistant の設定を利用した例を示す。

Home Assistant で通知があり、通知をクリックすると「New devices discovered」と出る。

「Check it out」をクリックして確認する。発見されたデバイスの「設定」をクリックする。

「ESPHomeのノードが検出されました」と出る。追加するかと尋ねられるので、「送信(Submit)」をクリックする。

うまく登録されれば以下のようになる。エリアなどは適切に設定する必要があるが、ここでは必要がないのでそのままにする。

登録後は、ESPHomeからデバイスに応じた YAMLファイルを定義し、ファームウェアをビルドして、WiFi でアップロードすることになる。

M5Stack Gray (ILI9342C使用)

M5Stack Gray (ILI9342C使用)のYAML

M5Stackの機能にESPHomeでアクセスできることを確認するために以下の YAMLファイルを利用した。 YAMLのboard: に m5stack-grey とするので、YAML内ではgray ではなく、 grey を使っている。

暗号のキーやパスワードは、デバイスの登録時に自動的に設定されるのでそれを利用する必要がある。また、デバイス名などはデバイスごとに適切に設定する必要がある。

logger: の level: は必要に応じて変更する必要がある。

M5Stack Basic にはMPU6886がないので、最後の方の 6軸加速度センサー MPU6886に関する記述は、Basic では削除する必要がある。地磁気センサーBMM150はESPHome のセンサーコンポーネントがないために試していない。

ファームウェアのビルドとアップロード

ESPHomeのデバイスの一覧から対象のデバイスの「Edit」をクリックして YAMLを入力する。

YAMLの入力が終わったら「SAVE」をクリックし、次に 「INSTALL」をクリックする。

 

インストール方法の選択が求められるので、適切な方法を選択する。ここでは最も簡単なWiFi経由(OTA)での「Wirelessly」を選択する。

YAMLに応じて必要なソフトウェア(PlatformIO やライブラリ、フォントなど)がダウンロードされ、ビルドが行われる。ビルドがうまくいけば、WiFiによるアップロードが行われ、デバイスがリセットされて起動する。

その後、WiFiによってESP32での実行の際のログが取得されるようになる。

sensor は、定期的にチェックして情報が取得されるので、このYAMLの例では wifi_siginal と uptime の情報が定期的に取得されている。

Home Assistantの画面

Home Assitantのオーバービューの画面で、情報の一部をみることができる。

また、「設定」→「デバイスとサービス」→対象のM5Stackデバイスの選択→「1デバイス」として表示されているデバイスを選択することで、診断情報として、Uptime や WiFi Signal の情報を確認することができる。

実行時のM5Stack Grayの画面

YAMLで作成したファームウェア実行時の画面表示でpage0, page1, page2 は以下のようになる。左ボタンでひとつ前のpageに遷移し(たとえば、page0 が page2)、中央ボタンでpage1に遷移し、右ボタンでひとつ次のpageに遷移する (たとえば、page0 が page1)。また、バックライトの明るさをボタンを押すと変えるようにしている。左ボタンで25%、中央ボタンで50%、右ボタンで100%の brightness を設定している。

最初の方のまとめで書いたように、古い M5Stack Grey (ILI9341使用)では、カラーが反転した。ライブラリ ili9xxx はチップの違いを判別して、初期化を変えるようにはなっていない。

また、M5Stack のディスプレイのためのライブラリが2023年になって ili9xxx に変わり、2023年5月6日現在M5Stack Core 2の表示が正常にできなくなっているようで、過渡期の感じである。displayの model を M5STACKからM5CORE2 にしても正しく表示されなかった。ちなみに、ライブラリを変え、通電したままファームウェアを2種類書き込むと表示が正常になるようであり、ライブラリでのディスプレイデバイスの初期化に問題があるようだ。

その他 (ble_scanner)

M5Stack Grayで ble_scanner を以下をYAMLに追加することでBLEの動作確認しようとした。M5Stackのディスプレイやボタンなどは動作するが、WiFi経由でのデータやログ情報などが取得できない。Home AssistantでもOffline になって、データを取得することができない。M5Stack Core 2では動作しているので、PSRAMなどの量によるのかもしれない。あまり調べていない。