chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

ESP32C3を購入、MicroPythonを入れてみる

要約:ESC32-C3を買った。MicroPythonのファーム(esp32c3-usb-20220618-v1.19.1.bin)を焼くと動いた
詳細:
RISC-Vを動かしてみたいと思い、手頃な価格のESP32-C3を購入した。(seeed studioのXIAO-ESP32-C3)

USB-Cに接続するとシリアルで繋がったが特にコンソールに表示もされず、初期ファームが何なのかよくわからない。
MicroPythonを焼いてみようと思い、esptool.pyでesp32c3を指定したが、エラーになった。自分が使ってるesptoolは古いせいか、デバイスを認識できないようだ。autoで走らせてもエラーになる。

$ esptool.py --chip  auto --port /dev/ttyS8  chip_id
esptool.py v2.8
Serial port /dev/ttyS8
Connecting...
Detecting chip type...

A fatal error occurred: Unexpected UART datecode value 0x03700000. Failed to autodetect chip type.

esptoolをpipで入れてみたが、ビルドでエラーになる。Python.hが無いと怒られる。なぜか??

            gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DFFI_BUILDING=1 -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/include/python3.9 -c c/_cffi_backend.c -o build/temp.cygwin-3.3.6-x86_64-3.9/c/_cffi_backend.o
            c/_cffi_backend.c:2:10: fatal error: Python.h: No such file or directory
                2 | #include <Python.h>
                  |          ^~~~~~~~~~
            compilation terminated.
            error: command '/usr/bin/gcc' failed with exit code 1
            [end of output]

Python.hをPCに入れないといけないのかもしれない。調べるのに時間がかかりそうなので、Esp用テストツールのファーム書き込み機能で代用してみる。

適当にやってみたが、COMポートは接続されるものの、応答がない。ちゃんと調べないとだめか。。


MicroPython - Python for microcontrollers

MicroPythonの代わりにCircuitPythonを落として入れてみる
Luatos Core ESP32C3 Download

CircuitPythonは起動できた。

オートリロードがオンです。ファイルをUSB経由で保存するだけで実行できます。REPLに 入ると無効化します。

Press any key to enter the REPL. Use CTRL-D to reload.

Adafruit CircuitPython 8.0.0-beta.6 on 2022-12-21; Luatos Core-ESP32C3 with ESP32-C3
>>> help('modules')
__future__        collections       neopixel_write    terminalio
__main__          digitalio         nvm               time
_asyncio          displayio         onewireio         touchio
_bleio            dualbank          os                traceback
_pixelmap         errno             ps2io             ulab
adafruit_bus_device                 espidf            pulseio           ulab
adafruit_bus_device.i2c_device      fontio            pwmio             ulab.numpy
adafruit_bus_device.spi_device      framebufferio     rainbowio         ulab.numpy.fft
adafruit_pixelbuf gc                random            ulab.numpy.linalg
aesio             getpass           re                ulab.scipy
analogio          hashlib           rgbmatrix         ulab.scipy.linalg
array             i2cperipheral     rtc               ulab.scipy.optimize
atexit            i2ctarget         sdcardio          ulab.scipy.signal
audiocore         io                select            ulab.scipy.special
audiomixer        ipaddress         sharpdisplay      ulab.utils
binascii          json              socketpool        uselect
bitbangio         keypad            ssl               vectorio
bitmaptools       math              storage           watchdog
board             mdns              struct            wifi
builtins          microcontroller   supervisor        zlib
busio             micropython       synthio
canio             msgpack           sys
Plus any modules on the filesystem
>>>

ESP32C3用のファームとして、ESP32-C3 with USBというバージョンもある。何が違うのかビルドオプション等を調べないと分からないが、、これを焼いてみる*1
MicroPython - Python for microcontrollers

こっちのバージョンだとCOMポートで通信ができた。

>>>
MPY: soft reboot
MicroPython v1.19.1 on 2022-06-18; ESP32C3 module with ESP32C3
Type "help()" for more information.
>>>
>>>
>>> help('modules')
__main__          framebuf          uasyncio/stream   uplatform
_boot             gc                ubinascii         urandom
_onewire          inisetup          ubluetooth        ure
_thread           math              ucollections      uselect
_uasyncio         micropython       ucryptolib        usocket
_webrepl          neopixel          uctypes           ussl
apa106            network           uerrno            ustruct
btree             ntptime           uhashlib          usys
builtins          onewire           uheapq            utime
cmath             uarray            uio               utimeq
dht               uasyncio/__init__ ujson             uwebsocket
ds18x20           uasyncio/core     umachine          uzlib
esp               uasyncio/event    uos               webrepl
esp32             uasyncio/funcs    upip              webrepl_setup
flashbdev         uasyncio/lock     upip_utarfile     websocket_helper
Plus any modules on the filesystem
>>>

RAMは121KB空いているようだ。起動後のクロックは160MHz

>>> gc.mem_free()
121536
>>> machine.freq()
160000000

ESP32-C3のRISC-Vはシステムクロックが最大160MHzらしいので、これ以上は上げられない。RISC-V上でMicroPythonを動かしてRISC-Vを使ったといっていいのか。。多分だめだろう。RISC-Vの手触り感とか言いたいのなら、アセンブラのレベルまで降りないとダメなのでは・・自問自答

*1:外付けUSB-SerialのICがあるか、それとも、ESP32-C3に直結かの違いと推測