M5StickC で MicroPython を使う
RPi Pico や micro:bit で Micropythonが動いたので、M5StickCでも試す。
firmware の書き換え
公式の UIFlow もいいけど、なるべき他の機種とバージョンを揃えたいので、ESP32のfirmware を利用する
MicroPython用firmware
2021.05.14 時点では、 以下が最新だったので利用する。
- esp32-20210429-unstable-v1.15-22-ga708848b0.bin
なお、今回のM5StickCのserialコンソールは、 /dev/tty.usbserial-C55295C045
firmware の書き込み
M5Stick本体は、いつものように、 G0
と GND
をショートして書き込みモードにする。
esptool.py
を利用する。
まずは削除
$ esptool.py --chip esp32 --port /dev/tty.usbserial-C55295C045 erase_flash
esptool.py v3.0
Serial port /dev/tty.usbserial-C55295C045
Connecting.....
Chip is ESP32-PICO-D4 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: d8:a0:1d:51:01:24
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 6.7s
Hard resetting via RTS pin...
書き込む
$ esptool.py --chip esp32 --port /dev/tty.usbserial-C55295C045 write_flash -z 0x1000 Downloads/esp32-20210429-unstable-v1.15-22-ga708848b0.bin
esptool.py v3.0
Serial port /dev/tty.usbserial-C55295C045
Connecting........_
Chip is ESP32-PICO-D4 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: d8:a0:1d:51:01:24
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Compressed 1469200 bytes to 953181...
Wrote 1469200 bytes (953181 compressed) at 0x00001000 in 85.6 seconds (effective 137.2 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
確認
M5StickC を手動で電源ON/OFFしてからampy で、内容を確認
$ ampy -p /dev/tty.usbserial-C55295C045 ls
/boot.py
対話モードで確認
$ screen /dev/tty.usbserial-C55295C045 115200
MicroPython v1.15 on 2021-04-29; ESP32 module with ESP32
Type "help()" for more information.
>>> print("ok")
ok
>>>
LCD のドライバ
ドライバファイル ST7735.py をM5StickC 上にPUTする。
$ ampy -p /dev/tty.usbserial-C55295C045 put ST7735.py
font
$ ampy -p /dev/tty.usbserial-C55295C045 put sysfont.py
fontファイル sysfont.py をM5StickC 上にPUTする。
電源管理
$ ampy -p /dev/tty.usbserial-C55295C045 put axp192.py
sample プログラム
m5stickc.py
from machine import Pin, I2C, SPI
from axp192 import AXP192
from ST7735 import TFT
from sysfont import sysfont
i2c0 = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
axp = AXP192(i2c0)
axp.setup()
lcd = TFT(SPI(1, baudrate=27000000,
polarity=0, phase=0, bits=8, firstbit=SPI.MSB,
sck=Pin(13), mosi=Pin(15), miso=Pin(36)), 23, 18, 5)
lcd.initg()
lcd._size = (80, 160)
lcd._offset = bytearray([26, 1])
lcd.invertcolor(True)
lcd.rgb(False)
lcd.rotation(2)
lcd.fill(TFT.BLACK)
lcd.rect((1, 1), (78, 158), TFT.BLUE)
lcd.line((1, 124), (78, 124), TFT.CYAN)
lcd.fillrect((2, 140), (77, 28), TFT.CYAN)
lcd.text((8, 42), 'MicroPython', TFT.WHITE, sysfont)
lcd.text((8, 62), 'M5StickC', TFT.WHITE, sysfont)
実行
$ ampy -p /dev/tty.usbserial-C55295C045 run m5stickc.py
Arduinoのに比較するとドライバが少ないし、機能も十分とはいえないけど、 G0
と GND
をショートさせなくてもプログラムが気軽に実行できるのはよい。
地道にドライバを探そう。