せっかくなので、MatterのPASEを実装してみていたのだけど、すんなりとは動かないな。。。Androidからつなぐと、PAKE3のパケットが返ってこないので、適当に実装したSPAKE2+の鍵交換のどこかが間違ってるのだろうけど。
鍵の検証に失敗したらStatus Report messageを送れと書いてあるけど、Androidは何もレスポンスを返さずに切断してくるような気がする。iOSはホームハブに接続してないとデバイスの設定すらさせてくれなかった。
Matterでデバイスに接続するとき32bitのpinから共有鍵を作るために、P-256曲線でSPAKE2+鍵交換をしているのすごいな。
スペースワンのロケット上がらなかった。。。
* Matterの仕様を眺める
ESP32用のMatterのライブラリを触ってたのだけど、やはりライブラリが大きすぎて、素のESP32だとほかの事が出来ない。そもそもMatterのPASEがまだ良くわかってないので仕様の方も見てみる。
仕様書のダウンロードは無料だけど、メールアドレスと会社名と名前を要求される。登録するとメールで送られてくる。ただ、登録しなくても、仕様自体は検索すればたくさん出てくる。例えば これ とか。
PASEでWiFiの設定するだけでも、通信のためにBLEの上にTCPもどきのBTPを実装して、そのうえでAESで暗号化されたMatterのセッションを実装して、Matter TLVのエンコード・デコードを実装しないといけない。そしてDACはやっぱりECDSAを使うように指定されていた。
ただ、ESP32はハードウェアでAES扱えるし、ECDSAもhttps使うためのTLSライブラリに含まれてるので、実は難しく考えなくても実装できそう?
ESP32-C5 Status: https://github.com/espressif/esp-idf/issues/13331
esp-idfのリポジトリ眺めてたら、たぶんESP32使ってる人のほとんどが思ってる問題がissueとして挙げられてた。そしてすぐcloseされていた。
* Matterについて少し調べる
自作のデバイスをWiFiに接続するとき、Matterデバイスとして振舞えばスマホで簡単に設定できて便利そうだと思って少し調べてみる。
Matterは色々なものに依存していてドキュメント読んで理解するのは時間かかりそうなので、実装から。
まず、 https://github.com/espressif/esp-matter というESP32でMatterを使うSDKが用意されているのだけど、巨大でビルドするのも面倒。そもそもMatterだけでプログラム用のFlash領域使い切りそうに見えるので、最低限必要なものが何なのか見てみる。
Matterデバイスの挙動は何も知らなかったので、最初に読むのは https://speakerdeck.com/hideakitai/matter-wo-remo-nano-dehazimeyouこれが分かりやすかった。
最低限、BLE上でPASEを実装すればWiFiへの接続ができそう。
Device Attestation Certificateを用意しないといけないっぽいけど、esp-matterを見ると開発用の証明書が用意されている。実装読むとPASEのやりとりのレスポンスを秘密鍵で署名して返さないとだめっぽい。そして、署名がECDSAなので全部実装する場合それだけで面倒。いまどきのIoT機器はTLSで通信するだろうしECDSAとか使えるよねということなのかも。
DACの確認の後、NOCを受け取って、利用できるアクセスポイントの情報などを聞かれて、スマホ側でどこに接続するか選択して、SSIDとパスワードが送られてきそう。
おおよその流れは分かったけど、やりたいことのわりに面倒。
というわけで、自分で実装するのはあきらめておとなしくライブラリ使った方が良さそう。
https://github.com/Yacubane/esp32-arduino-matterplatform.ioから使うにはこのライブラリが一番楽そう。BLEスタックをNimBLEに入れ替えてたりして、省メモリと書いてあるけど、それでも動作中の残りのヒープが100kBくらいしかない。。
ESP32とかで作った機器のWiFiの設定が面倒なので、Matterに対応してGoogle Homeアプリとかで管理できるようにすれば良さそうに思ってるのだけど、Matterのプロトコル自体が意外と複雑で悩ましい。
https://github.com/Yacubane/esp32-arduino-matter これ使えば比較的簡単そう?
先週買った電子ペーパーモジュールはとりあえずカレンダーにした。
最初は M5Stack ATOM を使っていたのだけど、なるべく薄くて省電力のESP32モジュールにしたかったので Seeed Studio XIAO ESP32C3 を使ってみた。
ESP32-C3なので、CPUがRISC-Vに変更されてる。C3はクロックが少し低いのと1コアしかないけど、特に問題なかった。ちょっとした処理をするだけなら、今までのESP32の中で一番値段と消費電力と処理速度のバランスが良さそう。
買ったとき気づいてなかったけど、XIAO ESP32C3にはバッテリーの充電回路がついていた。試しに適当なリチウムイオン電池をつないだだけで動いた。
あとは、サーバサイドでカレンダー画像を生成して、ESP32側では定期的に更新チェックして表示するだけ。
ケースは3Dプリンタで適当に作ったけど、バッテリーとか色々入れて、なんとか全体の厚さが8mmに収まった。