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

M5Stack Core 2 で ESPHome を使えるように設定のYAMLファイルを作って試してみた。おおむね動作するが不具合もある。

電源管理(AXP192)やタッチスクリーン(FT6336U)のライブラリが安定していない。ライブラリが近い将来に改善されることを期待したい。改善後にテストを再開できるように、執筆時点の備忘録として記録を残しておく。

AXP192に関しては、Support for ILI9342C display (M5 stack Core 2 display) #1076 を参考にした。

まとめ

ディスプレイは、電源投入した直後は正しく表示されないことがある。リセットボタンを押してリセットすることでおおむね正しく表示される。

タッチスクリーンにbinary_sensor を設定してボタンとして使用しても、最初のイベントや押した際のイベントの発生が、物理ボタンと同じ想定した通りに動作しない。

i2sオーディオの使い方は十分にテストしていない。

Bluetooth Low Energy (BLE)などの無線系のテストはしていない。

試用環境

ハードウェア

ソフトウェア

  • 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

設定手順

初期の設定手順は、M5Stack GrayでESPHomeを使うための設定と基本的に同じなので省略する。ただし、ファームウェアのビルド時にPINに関する次の警告が出る。

表示・センサーをテストするYAML

ディスプレイやM5Stack Core 2に内蔵されているセンサーなどのテストしたYAMLファイルを以下に示す。ハイライトされた行は、M5Stack Core 2 を登録した際の情報を使うか、自前のものに書き換える必要がある。

外部コンポーネントライブラリ

先に書いたように、AXP192 や FT6336Uのコンポーネントのライブラリは、まだ、ESPHomeに正式には取り込まれていないので、external_components で指定する必要がある。

AXP192の他のバージョンの古いライブラリだとバイブレータが動作しっぱなしになる。

i2s Audio 関係

i2s による入出力を扱うために、i2s_audio を設定する必要がある。

i2s 出力を使う例としては、media_player がある。上記のYAMLでは、スクリーン下側中央のボタンをリリースした際に、Web上にあるMP3ファイルを再生している。MP3ファイルには、無料効果音で遊ぼう!のサイトを参照させていただいているが、他のものやローカルファイルに変更した方がよい。

また、Home Assistant のダッシュボードなどに表示される MediaPlayer でLocal Media ファイルやRadio Browserでインターネットラジオ、Text to Speech で音声合成をすると、M5Stack Core 2 のスピーカから音声を出すことができる。しかし、今回使った YAMLファイルのままでは、ブツブツと途切れた再生音になる。

i2s 入力を使う例としては、microphone があるが、簡単にその機能を試すコンポーネントがまだない。voice_assistant が i2s の microphone を使うが、Speech-to-Textエンジンですぐに使えるものがないようなので、動作を確認することができなかった。microphone はどのように使えるのか現時点でははっきりしない。ESPHomeのWebでは、今年は、Voice の年とあり、進展を期待したい。

タッチスクリーンとボタン

touchscreen は FT6336U 用の外部コンポーネントライブラリ ft63x6 である程度使える。ディスプレイの下のボタン領域に binary_sensor を設定することで、ボタンとしておおむね使うことができる。

画面下側のボタン領域左側をタッチするとdisplay の前のページが描画される。ボタン領域中央部をタッチすると display の page1 のQRコードが描画され、ボタンのリリース時に media_player で音を出すようにしている。ボタン領域右側をタッチすると次のページが描画される。

後で述べるように 押した際に発生すべきイベントが、リリースの直前に発生する問題が、執筆時点ではある。また、タッチの際に、触れていない領域のボタンの状態がonになる問題もある。執筆時点では、実用的なタッチスクリーンを使ったアプリの開発は難しい感じである。

voice_assistantを有効にするボタンを画面中央に設定することをしてみたが、on_press が on_releaseの直前にしか発生しないのでうまく使えないため、コメントアウトしてある。

座標

display と touchscreen で座標が縦方向の座標が異なる。

displayでは、x,yの範囲が(0,0)からサイズ(320,280)になっている。

touchscreen では、x,yの範囲が(0,0)からサイズ(320, 140)であり、(0,0)からサイズ(320,120)がdisplayの範囲に相当するようである。ディスプレイの下側のボタンの領域は(0,120)からサイズ(320,140)になっているようだ。明確な仕様は ESPHomeでは見つからなかった。

on_press

利用しているライブラリでは、binary_sensor の on_press が タッチをやめた後でないと発生しない。タッチをやめた際に、on_press、on_release が連続して発生する。重複してtrigger を起動しない判定が誤っているように思われる。

ちなみに、M5Stack Gray の物理ボタンの場合には binary_sensor の on_press はボタンを押した際に正しく起動される。

ディスプレイ関係

フォント

Google Fonts を利用する場合には、gfonts: を利用した簡略した形で指定できるようになっている。

QR コード

qr_code は図形の表示のサンプルとして使っている。

display

displayの指定は、おおむねM5Stack GrayでESPHomeを使うための設定と同じである。model: に M5CORE も指定できるようだが、表示が正しく表示されないようなので、M5STACKを利用している。

page0は、線とテキスト描画のテストがされる。

page1は、friendly_name を含むQRコードが描画される。

page2は、円と現在時刻が表示される。現在時刻を参照するために time: platform: homeassistant id: esptime を利用している。

表示は以下のようになる。

センサー

電源管理 axp192

バックライトの明るさ brightness は、ここで指定する。

バッテリのレベルを報告することができる。ログには、DEBUGレベル以上で次のような形式で出力されている。

axp192を設定するためには、i2c の設定が必要である。

6軸加速度センサー mpu6886

M5Stack GrayでESPHomeを使うための設定 とは異なり、加速度の個々のデータは出力しないようにしているため、Home Assistantのダッシュボードで加速度を見ることはできない。ただし、ログには、DEBUGレベル以上で次のような形式で出力されている。

mpu6886を設定するためには、i2c の設定が必要である。

WiFi信号強度 wifi_signal

加速度と同様に、DEBUGレベル以上でログに次の形式で出力される。

動作時間 uptime

加速度、WiFi信号強度と同様に、DEBUGレベル以上でログに次の形式で出力される。

現在時刻 time

page2で時刻表示をするために time: を設定している。

その他

様々な機能を追加しているので、ROMサイズの問題から BLE を含めることができない。BLEを含める場合には、YAMLから機能を削除する必要がある。

ログのデバッグ出力

ボタン操作を行わない場合の、リセット後のログ出力は以下のようであった。

[[audio:190]] という2重かっこの部分は、実際には、かっこは1重である。WordPressのこの部分がショートコードとして解釈されてしまうため、2重に変更している。

余談だが、ESPHomeで表示されているログをコピペして貼り付けたら、自動で SSIDや BASSID が[retracted]に変換されている。よくできている。