hogehoge, world.

米国カリフォルニアのソフトウェアエンジニアがIT・自転車・音楽・天体写真・語学などについて書く予定。

M5Stack Atom Matrix

私の周囲で最近話題になっていた M5Stack Atom Matrix をポチっとしたのが到着。24mm四方の小さな筐体にESP32(WiFi, Bluetooth込み), MPU6886(加速度/ジャイロ/温度センサー), 5x5 LEDマトリクス, 前面ボタン等が詰め込まれたデバイスである。背面のラベルに内蔵デバイス用も含めたピンの説明がびっしり書かれているのがけなげで微笑ましい。

M5Stack Atom Matrix

とりあえずWiFiのスマート家電リモコン(左)と加速度センサーを使ったおもちゃ(右)を作ってみたのがこれ。

開発&トラブルシュートメモ

開発環境

例によってArduinoで。

  • ボードマネージャからESP32ボードをインストール、M5Stick-Cボードを選択
  • ライブラリからM5Atomをインストール
  • M5AtomやM5Stick-Cのスケッチ例を見ながら適当に作る

基本情報

LEDマトリクス

  • LEDマトリクスはかなりちらつきがある。LED制御信号にジッタが出るのか、WiFiが動作してるときに関係のない色がちらちら光る感じ。ESP8266 Jitter · Issue #367 · FastLED/FastLED · GitHub などを参考にFastLEDのフラグをいじってみるも効果なし。
  • restartしたりlight/deep sleepに入ると、LEDがランダムな状態で光りっぱなしになることがある。非常に困る。⇒ ESP32のボードマネージャを最新(1.0.4)にしたら解消した様子。

追記: これらの問題はM5Atomライブラリの実装に原因があり、FastLEDを直接使えば回避できる。詳しくはこちらを参照: https://tomoto335.hatenablog.com/entry/m5atom-dont-use-library

WiFi

追記: しばらく使っていると接続状態なのにhost unreachableやtimeoutが発生するなど、なかなか安定しない。原因不明。

消費電力

スマートアウトレット

リモコン起動時間

スマートアウトレットリモコンとして使うには、押したいときにすぐ押せないとエクスペリエンス的によろしくない。その観点では常時通電/WiFi接続/機器状態ポーリングして即時反応できるようにスタンバイさせておくのが理想的だが、一日一回押すかどうかのユースケースでは電気も電波ももったいない。そこで普段は電源offあるいはdeep sleep状態にしておき、起動をどれだけ早くできるか試してみた。

工夫のない実装だと、DHCPを使ったWiFi接続→Login API呼び出し→機器状態取得API呼び出しの3ステップでおよそ5秒かかっていた。リモコンの起動待ちとしては少々長い。

WiFi接続でDHCPを使わず静的IPを使い、またLoginで取得したトークンをSPIFFSに保存してLogin API呼び出しをスキップするようにしたところ、3秒弱に縮んだ。感覚的にはまあ実用範囲内である。

 感想

  • この大きさにこれだけ詰め込むのは大したものだが、いかんせんちゃちい。(笑)
  • 小さいのに電池駆動に向かない(スリープ中でも電気を無駄に食う)のは少々もったいない。リモコンやAmazon Dashボタン的なユースケースで使いにくい。
  • ミニロボットやローバーの頭脳にこれはかっこいいと思う。光るし。
  • 知人がバイクにつけようと言っていたが、なるほどそれもかっこいいと思う。