要約: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に直結かの違いと推測