📟

M5 Atom-S3 を Circuitpython で使う

2024/09/05に公開

M5 Atom-S3 を Circuitpython で使う

  • 超小型ながらディスプレイ付きのマイコンM5 ATOM-S3 のファームウェアを書き換えてCircuitpythonで使用する
  • ATOM-S3 を Circuitpython で使うための準備として、ファームウェアを書き込んで動作確認までの記事となる

リソース

M5 Atom-S3

Circuitpythonファームウェアの書き込み準備

  • Circuitpythonのファームウェアは2段構えの構成になっていて、ブートローダーとCircuitpythonインタプリタ本体を書き込む必要がある
  • まず初めにSerial通信を使用してブートローダーを書き込む
  • ブートローダー導入後はUSBマスストレージとして振る舞えるので、Circuitpythonインタプリタ本体をファイルとして配置する
  • Circuitpythonインタプリタ本体導入後もUSBマスストレージとして振る舞うので、制作したプログラムや必要になるライブラリのモジュールのファイルを配置して実行することになる

必要なもの

  • PCと接続するUSB通信ケーブル
  • python環境構築済みPC

環境

  • 使用したOS : Mac OS Sonoma 14.6.1
  • 使用したハード : MacBook Air

pythonの準備

  • ディレクトリを用意する(以下準備したディレクトリでの作業)
  • python仮想環境の準備
  • 仮想環境にesptoolをインストールする
$ python3 -m venv venv
$ source ./venv/bin/activate
$ pip install --upgrade esptool

ツールとファームウェアのダウンロード

  • esptoolのダウンロード
    • https://github.com/espressif/esptool
    • git clone でも Codeボタン から Download ZIP でも良いのでダウンロードしてUnZip
    • 展開した中に esptool.py があればOK
  • ブートローダーのダウンロード
  • CurcuitPyhon本体のダウンロード
    • https://circuitpython.org/board/m5stack_atoms3/
    • DOWNLOAD .UF2 NOW を押して保存
    • 言語の選択はpythonからコンソールに返ってくる言語が変わるのでお好みで
    • adafruit-circuitpython-m5stack_atoms3-en_US-9.1.3.uf2 のような .uf2 ファイルがあればOK

ファームウェア書き込み

PCと接続する

  • Atom-S3画面のボタンを押しながらUSB-Cを接続
  • Atom-S3画面のボタンを押したまま、側面のリセットボタンを押して数秒後に離す
  • Atom-S3画面のボタンを離す
  • ls /dev/cu.* でデバイスの名称を確認する
$ ls /dev/cu.*
/dev/cu.Bluetooth-Incoming-Port /dev/cu.usbmodem11401
  • /dev/cu.Bluetooth-Incoming-Port /dev/cu.usbmodem11401 の2つが返ってくる
  • 使用するのは /dev/cu.usbmodem の方。番号は場合によっては異なるかもしれない。

esptool.py を使用してESP32-S3 とシリアル通信が可能かを確認する。

  • esptool.py から chip_id を問い合わせて通信を確認する
$ python3 ./esptool-master/esptool.py -p /dev/cu.usbmodem11401 chip_id
esptool.py v4.7.0
Serial port /dev/cu.usbmodem11401
Connecting...
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded Flash 8MB (GD)
Crystal is 40MHz
MAC: MACアドレス
Uploading stub...
Running stub...
Stub running...
Warning: ESP32-S3 has no Chip ID. Reading MAC instead.
MAC: MACアドレス
Hard resetting via RTS pin...

ブートローダーを書き込む

  • 問題なく通信できたらブートローダーを書き込む
  • 書き込むファイルは combined.bin
$ python3 ./esptool-master/esptool.py -p /dev/cu.usbmodem11401 write_flash 0x0 ./tinyuf2-m5stack_atoms3-0/combined.bin

esptool.py v4.7.0
Serial port /dev/cu.usbmodem11401
Connecting...
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded Flash 8MB (GD)
Crystal is 40MHz
MAC: MACアドレス
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00438fff...
Compressed 4425552 bytes to 125641...
Wrote 4425552 bytes (125641 compressed) at 0x00000000 in 11.9 seconds (effective 2987.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
  • 書き込めたらUSBケーブルを抜いて再度差し込む
  • FinderにデバイスがUSBストレージとして表示される -> ATOMS3BOOT

Circuitpythonインタプリタの導入

  • Finderにデバイス内に adafruit-circuitpython-m5stack_atoms3-en_US-9.1.3.uf2 をドラッグアンドドロップなどで投入する
  • ファイル名のバージョンや言語などはダウンロードしたファイルによって異なる
  • 自動で再起動がかかり接続が切れる
  • 繋がると、CIRCUITPY というUSBストレージとして認識される
  • 画面には Hello World! が表示される(小さい!!!)

プログラムの書き込み

  • code.py が自動実行されるPython ファイルとなっている。
  • 中身は Hello World! のPrint文
print("Hello World!")

ライブラリの入手

  • https://circuitpython.org/libraries
  • 最新のライブラリバンドルをダウンロードする
  • メジャーバージョンは .uf2 ファイルのバージョンと合わせること
  • 使用するのであれば最新のコミュニティバンドルもダウンロードする
  • mpy と py がある
    • mpyがコンパイル済みで速度と容量に優れるが直接読めない
    • pyは容量はかさむが直接読める
  • 導入するのはフラッシュメモリの量と使用するライブラリの数と相談してお好きなほうで良い
  • プロジェクトで使用するモジュールのフォルダのみをデバイスのlibフォルダに放り込む
  • https://learn.adafruit.com/welcome-to-circuitpython/circuitpython-libraries

Discussion