PLEN:bit:リモートコントロール(M5Atom + M5Stack Core2)

PLEN:bit に M5Atom を搭載することで、外部との通信が簡単にできるようになります。外部からコントロールしたいですよね!
M5Stack Core2 の画面がタッチセンサーになっていますので、これをリモコンにして、コントロールに挑戦してみました。

M5ATOM と、M5Stack Core2 は ESP-NOW という通信方式を使っています。簡単に低遅延で通信が可能です。

ESP-NOW
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_now.html

ESP-NOWの接続は、ステーションMACアドレスを指定して行います。

なので、まずはステーションMACアドレスを何らかの方法で確認する必要があります。

良く用いられるのは、特徴的なSSIDでアクセスポイント立ち上げ、そのSSIDに接続して、ステーションMACアドレスを自動取得する方法です。

https://github.com/espressif/arduino-esp32/tree/master/libraries/ESP32/examples/ESPNow/Basic

上記サンプルでは”Slave”でSSIDを検索してMACアドレス獲得しています。


…なのですが、今回はプログラムを単純化したかったので、MACアドレスは手動で取得して、プログラム中にハードコーディングしています。

uint8_t stationMac[6];
esp_read_mac(stationMac, ESP_MAC_WIFI_STA);
Serial.printf("[Wi-Fi Station] Mac Address = {0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X}\r\n", stationMac[0], stationMac[1], stationMac[2], stationMac[3], stationMac[4], stationMac[5]);

これでMACアドレス獲得可能です。今回作成したM5Atom側のプログラムは、起動時に上記を実行して、MACアドレスをコンソールに表示するようにしました。コンソール表示されたMACアドレスを リモコン(M5Stack Core2)側のプログラムに設定してください。

プログラムはこちら。

M5Stack Core 2 用 コントローラ
https://github.com/shikarunochi/PLENAtomControl/tree/main/PLENATOMController

コントローラ画像。M5Stack Core 2のSDカードに入れてください。
https://github.com/shikarunochi/PLENAtomControl/tree/main/SD

M5Atom 用 レシーバ
https://github.com/shikarunochi/PLENAtomControl/tree/main/PLENATOMReceiver


M5Stack Core 2 のタッチインターフェースを用いて、画面のタッチされた部分によって、コマンドを送信するようにしました。

押しっぱなしで連続動作するようにしたいところなのですが、単純にタッチ検出で送信すると、送信情報がバッファにたまってしまって、離してもバッファが残っているうちは動作が止まらなくなってしまいます。

うまくバッファクリアできればよかったのですが、いい方法を思いつかなかったので、それそれの動作でどれぐらい時間がかかるかを定義して、その時間のうちは送信を行わないようにしています。


M5Stack Core2 のタッチライブラリは、まだ開発中な感じで、このプログラムでは最初のバージョンに実装されていた M5.Touch.getPressPoint() のみを使用しています。
バージョンアップで、タッチを拾うイベントハンドラも使えるようになる…みたいですね。


PLEN:bit のFLASH-ROMに登録されている「前進」モーションデータは、1歩進んで立ちポーズに戻るモーションでした。
なので、連続で歩こうとしても「1歩進むたびに立ちモーションに戻る」の繰り返しになってしまうのですよね。

なんとかならないかなー、と思っていたのですが、公式PLEN Projectから、連続前進するプログラムが公開されました!

MakeCode用のブロックプログラムでしたので、ソースリストから修正内容を確認してみました。

plenprojectcompany / pxt-PLENbit
https://github.com/plenprojectcompany/pxt-PLENbit

新たにモーションデータを追加するのではなくて、前進モーションの「再生開始フレーム」を指定することで、立ちポーズに戻る部分を飛ばしてモーション再生する方式で実現されてました。モーションデータ追加だと手間だなーと思ってたので、なるほどでした。

このプログラムを参考にしつつ、PLEN5Stack プログラムに機能追加する形で、PLEN:bit + M5Atom でも連続前進できるようにしてみました。


連続前進!まっすぐ進めるかどうかは、また別の話ですね。