💻

M5UnifiedでM5Stackの環境構築

2023/06/14に公開
1

M5Stack買いました

爆買いしました。

購入はスイッチサイエンスさんからです。

https://www.switch-science.com/

色々なM5Stackがあります。M5Stackの開発環境、今までは機種によってバラバラだったのが、スーパーエンジニアらびやん氏により、共通のライブラリM5Unifiedが開発されました。詳しくは以下参照ください。

https://speakerdeck.com/lovyan03/m5unifiednoshao-jie

M5Unified環境構築

導入方法は以下の公式サイト情報が分かりやすいです。
https://docs.m5stack.com/ja/quick_start/m5unified/intro_vscode

ただ、私の環境では、最後に以下のようにエラーが発生してしまいました。

Serial port /dev/cu.usbserial-140
Connecting......................................

A fatal error occurred: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
*** [upload] Error 2
====================================================================== [FAILED] Took 12.99 seconds ======================================================================

 *  ターミナル プロセス "platformio 'run', '--target', 'upload'" が終了コード 1 で終了しました。 
 *  ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。 

エラーメッセージをみると、シリアルポートが間違っているようですね。あるあるですね。というわけでDeviceのSerialからデバイス名を確認します。M5StackのUSBケーブルを差したり抜いたりして、増えたり減ったりするやつがM5Stackのシリアルです。

デバイス名(ポート)を変える方法は、画面上部に丁寧に以下のような注意書きがしてあるので、そのとおりに記載します。

PlatformIO automatically detects upload port by default. You can configure a custom port using upload_port option in platformio.ini. 

具体的にはplatformio.iniの最後の行に以下のようにupload_portを追記しました。

※ デバッグを考慮するとmonitor_portも追記した方が良いので追記しています。書き込むだけならupload_portだけでも問題ありません。

[env:m5stack-core2]
platform = espressif32
board = m5stack-core2
framework = arduino
lib_deps = m5stack/M5Unified@^0.1.7
upload_port = /dev/cu.usbserial-556E0301081
monitor_port = /dev/cu.usbserial-556E0301081

再度ビルドして転送すると、今度は問題なく動きました。


やったね!

M5Unifiedハンズオン

ハンズオンに参加しました。

https://m5stack.connpass.com/event/284276/

資料
https://docs.google.com/presentation/d/1a_PSTQC-5HFejekAp_ExxMcwR8apyax_pxPR6dsnbnY/

ハンズオンのコード
https://github.com/lovyan03/M5Unified_HandsOn/

以下ハンズオンでのメモ。

ハンズオン成果物(?)

https://twitter.com/karaage0703/status/1669662698932682752

チャタリング防止の設定変更

btn.setDebounceThresh();

サイズ異なるモニタで同じ絵を表示するテクニック

以下参考

https://github.com/lovyan03/M5Unified_HandsOn/blob/main/sample_code/Display2.cpp

差分のみを記載することで表示高速化

以下参考

https://github.com/lovyan03/M5Unified_HandsOn/blob/main/sample_code/Display3.cpp

描画の高速化テクニック

以下参照
https://github.com/lovyan03/M5Unified_HandsOn/blob/main/sample_code/Display4.cpp

以下のように明示的に初期化処理startWrite();と終了処理を書くendWrite();

M5.Display.startWrite();
for(int i=0;i<100;++i){
  M5.Display.fillRect(i,0,10,10);
}
M5.Display.endWrite();

極端な例としては、SPI通信を描画以外(SDカード通信等)に一切使わないなら、最初に一発startWrite();してendWrite();しないという使い方もあり。

その他、スプライトを使った2面持ち、メモリへのダイレクト転送などで高速化(ちょっと自信無し、後でコード確認)。

まとめ

M5Stack、過去に結構バージョンとかでハマってうまく動かないこと多かったのですが、あっさり動いて嬉しいですね。

M5Stackで色々作ってみたいなと思います。

https://www.switch-science.com/

参考リンク

https://supernove.hatenadiary.jp/entry/2023/05/13/222441

https://lang-ship.com/blog/work/m5unified-1/

https://docs.m5stack.com/ja/quick_start/m5unified/migration

https://twitter.com/motoh_tw/status/1657760833521487872

関連記事

https://karaage.hatenadiary.jp/entry/2018/09/10/073000

変更履歴

  • 2023/06/16 M5Unifiedハンズオンに関して追記

Discussion

yuta moriyuta mori

M5UnifiedでCore3のカメラを使用する方法が分からず、motohさんのtweetのリンクがとても参考になりました。ありがとうございます。