Switch Scienceのサイトを見ていたら、RPi Pico-Wの在庫があるようで、抽選でもなく普通に買えるようだった。ちょっと信じられず確認する意味もあって、発注してしまった。ついでに、液晶パネルが内蔵されているM5StackのATOM S3も買った。数日後、配達された。技適マークは基板本体には刻印されておらずケースにシールで貼られていた。ケースを無くさないように注意。ATOM S3の場合は本体上部のシールに〇と〒で印刷されている。これでもって証明になるのかどうかちょっと分からないが、、まぁ通過している証なんでしょう。
ATOM S3はコンパクトで可愛いのだけど、USBケーブルの上に黄と黒の注意シールのようなものが貼られている。ATOMはシンプルでシュッとしたデザインなのに、これは何だろうか??押すなよ危険という感じだが。ATOM S3の古い写真を見ていると、この部分は液晶と接続するフレキシブル基板がカーブしている部分のようであった。かつてはフレキ基板がむき出しになっていて、不注意で押したりすると断線したりしたのかも。だから、ここは押すなということで、注意を引き付けるために黄と黒のシールになっているのではと推測
■追記
ATOM S3を買ったのは、TV会議システム用にMuteのOn/Offを切り替えボタンを作りたかったから。TV会議していると、普段Mute状態から急に振られたものの、2画面だったりしてマウスカーソルがどっかに行っててなかなか返事できないことがある。この問題に対して、Mute On/Offボタンを使って回避したい。USBシリアル変換チップを介さず直接ESP32に接続されていたら、USBライブラリを使って仮想キーボードが作れるはずなのだが。。MicroPythonnのREPLもUSB経由なので、衝突するような気もする。。
■追記
M5 StackのAtom S3にFirmを焼こうとしているがエラーになる。traceしたらPanicになっているようであった。
なぜなのか? esptoolが古い??
$ esptool.py --chip esp32 --port /dev/ttyS20 write_flash 0x1000 M5STACK_ATOM-20230426-v1.20.0.bin esptool.py v2.8 Serial port /dev/ttyS20 Connecting... Chip is ESP32D0WDQ6 (revision 0) Features: WiFi, BT, Dual Core, Coding Scheme None WARNING: Detected crystal freq 0.00MHz is quite different to normalized freq 26MHz. Unsupported crystal in use? Crystal is 26MHz MAC: 00:00:00:00:00:00 Uploading stub... Running stub... A fatal error occurred: Invalid head of packet (0x47)
結論から言うとesptool.pyが古いのが原因。サポートチップにesp32s3が指定できるぐらいのバージョン(V4.5.1とか)でないと多分不可能
$ esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x1000 adafruit-circuitpython-m5stack_atoms3_lite-ja-8.1.0-beta.2.bin
そもそも、MicroPythonはESP32S3用にはまだビルドされておらず、バイナリ上の互換性がなかったらESP32C3用ファームを入れても動かないだろう。CircuitPythonではESP32S3用のものが存在する。無理やりBINを焼いてみたらUSBデバイスとしてすら認識されなくなった。そのため、まずはbootloaderを入れて、AtomS3がUSBデバイスとして見えるようにしてから、UF2ファイルをDrag&Dropで焼くことにする。
UF2に対応したboot loaderは以下から入手できる
https://adafruit-circuit-python.s3.amazonaws.com/bootloaders/esp32/tinyuf2-m5stack_atoms3_lite-0.14.0.zip
これを、Adafruit_WebSerial_ESPTool(ブラウザ上で動作)を使ってAtomS3に焼く。そうすると、AtomS3はUSBデバイスとして見えるようになるので、CircuitPythonをDrag&Dropで転送することでファームが焼かれる。
USBからserial over usbとしてTeraTermで接続してみる。表示は以下。CircutPythonが動いている。
>>> os.uname() (sysname='ESP32S3', nodename='ESP32S3', release='8.1.0', version='8.1.0-beta.2 on 2023-04-26', machine='M5Stack AtomS3 Lite with ESP32S3') >>> help('modules') __future__ collections micropython terminalio __main__ countio msgpack time _asyncio digitalio neopixel_write touchio _bleio displayio nvm traceback _pixelmap dualbank onewireio ulab adafruit_bus_device errno os ulab.numpy adafruit_bus_device.i2c_device espidf ps2io ulab.numpy.fft adafruit_bus_device.spi_device espnow pulseio ulab.numpy.linalg adafruit_pixelbuf espulp pwmio ulab.scipy aesio fontio rainbowio ulab.scipy.linalg alarm framebufferio random ulab.scipy.optimize analogbufio frequencyio re ulab.scipy.signal analogio gc rgbmatrix ulab.scipy.special array getpass rotaryio ulab.utils atexit hashlib rtc usb_cdc audiobusio i2cperipheral sdcardio usb_hid audiocore i2ctarget select usb_midi audiomixer io sharpdisplay uselect binascii ipaddress socketpool vectorio bitbangio json ssl watchdog bitmaptools keypad storage wifi board math struct zlib builtins mdns supervisor busio memorymap synthio canio microcontroller sys Plus any modules on the filesystem
きになるのは、MQTT用ライブラリが見当たらない点。まぁやりたいのはUSB HIDを作ることなので、MQTTなくてもいいのだが。。
https://docs.m5stack.com/en/core/atom_lite
■追記
「ESP32S3はビルドされておらず」とかなんの疑いもなく書いているが、正しくはビルドされていた。なんでこうも自信満々で書けるのか。。自分
https://micropython.org/download/GENERIC_S3/
LCDはサポートされないが、一般マイコンボード向けのファームがあるのでこれを入れてみる。
file: GENERIC_S3-20230426-v1.20.0.uf2