M5Stack:ATOMS3

M5Stackから新しい製品、ATOMS3が登場しました。ESP32-S3、0.85インチ128×128のLCD搭載です。

ATOMS3 Dev Kit w/ 0.85-inch Screen
https://shop.m5stack.com/collections/m5-controllers/products/atoms3-dev-kit-w-0-85-inch-screen


ESP32-S3 は無印 ESP32 の後継SoC…といった感じでしょうか?
ESP32-C3 とは違い、RISC-V ではないので、ESP32 と同じように扱えそうです。
こちらのサイトの比較表がわかりやすいです。

Lang-ship : ESP32シリーズ(無印, S2, S3, C3, …)比較 2022年1月
https://lang-ship.com/blog/work/esp32-2022-01/


小型で高性能、しかも価格も安価ということで、大人気になることが予想されます。販売日・販売時刻の予告がありましたので、無くならないうちに確保しました!

液晶部分がボタンになっているのですが、直接押すのはちょっと怖いですね。(すぐ慣れましたがw)

その後、日本販売店のスイッチサイエンスも本家M5Stackサイトも、早々に間に売り切れになってしまいました。今後のM5Stack主力商品になると思いますので、待ってればどんどん入荷すると思います。

LCD入手が中国の春節後になるために、次回は2月中旬になりそうとのこと…。


さっそくの Hello World.

最初、公式ATOMS3ライブラリを使ってみたのですが、まだ動かない状態だったので(LCDのピン指定が違ってたりしてた)M5Unified を使いました。(その後、公式ライブラリもじわじわと修正されている様子です。)

VSCode + platformio でビルドしています。 ATOMS3 FactoryTest の platformio.ini を参考にしました。

ATOMS3 FactoryTest
https://github.com/m5stack/M5AtomS3/tree/main/examples/Basics/FactoryTest

ボードは、ATOMS3 はまだ用意されてなくて、esp32-s3-devkitc-1 を使うようですね。


せっかくの液晶なので、MZ-700エミュレータを動かしてみました。

6×8ドットフォントで240×200で描画したものを、縦横55%縮小 132×110 で、メモリ節約のために132×22ドットで5回に分けて描画しています。
縮小に pushRotateZoomWithAA を使うと、回転の中心がピクセル中心になるので 0.5の誤差が入ってしまうとのこと。
(そのため5分割描画の区切り線が見えてしまってます)


らびやんさんのアドバイスで、pushAffineWithAA 使うと XY座標 ピシッと指定できてキレイに表示されました。(アフィン変換について、ちょっとだけ理解できた…ような気がしましたw)


ESP32-S3 は USB ホストにも対応しているとのことで、USB キーボードからの入力に対応してみました。電源は Grove 等から取得するか、電源供給付きUSBコネクタを使う必要があります。

こちらのプログラムを参考にしました。

esp32-usb-host-demos
https://github.com/touchgadget/esp32-usb-host-demos

小型のUSB-Cキーボードはうまく認識してくれませんでした。
キーボードによってうまくいったりいかなかったりがあるかもしれない?

現状は、単体機能のキーボードを直接接続した場合のみ動作します。USB HUB 経由していたら認識できないです。BBQ20KBDは、キーボード+マウスの複数機能なので内部的に USB HUB経由の扱いなのでしょうね。


プログラムはこちらで公開しました。env:m5atoms3 でビルドしてください。

m5z700AtomHDMI/
https://github.com/shikarunochi/m5z80/tree/master/m5z700AtomHDMI

(Atom Display 版に対応端末追加してるので、プロジェクト名称が AtomHDMI のままなってます。そのへんは気にしないでくださいw)

実行時には、SPIFFS のルートにシステムROM・フォントROM・テープイメージを配置してください。フリーの互換ROMも公開されていますので、MZ-700実機をお持ちでない方も実行可能です。
詳細はこちら。

M5Atom + AtomDisplay で MZ-700 エミュレータ

プログラム書き込み時に、電源ボタン2秒長押し(電源ボタン下のLEDが緑色に光る)で書き込みモードに入ることが必要です。転送後に再起動も必要みたいです。(USBホストを使うときだけかも?)

画面押下でファイル選択、長押しでシステムメニューです。
ファイル選択・システムメニュー画面では、画面押下でカーソル移動(下方向のみ)、長押しで決定です。

ちなみに、platform_packages のバージョンをESP32-S3対応の最新版にすると、以前の M5ATOM Liteでのエミュレータ動作がめちゃ遅くなってしまいました…。なぜかはわからないのですが、今のところは深追いせずに、ATOM Lite 用には旧バージョンを指定することにしてます。