spresense で circuitpython を使う
マイコンの開発は、python! と色々試していたら、こんなtweetを発見。
SPRESENSEで、CircuitPython が動かせるって知ってました?実は英語版のサポートサイトのみ CircuitPython のスタートガイドが載ってます (なんでやろ?)
え! spresense でも CircuitPython 動くの?
firmware のupdate
ひさしぶりなので、spresnse の firmware をupdate する。
firmware のdownload
2021/06/01 時点では、 v2.0.2。
zip ファイルは解凍しておく
$ unzip spresense-binaries-v2.0.2.zip
書き込みツールのdownload
firmware を書き込む為に、 flash_writer
をdownlaod(mac版)
https://github.com/sonydevworld/spresense/blob/master/sdk/tools/macos/flash_writer
実行権を付与する。
$ chmod +x flash_writer
書き込み
まず、大事なことは、
USBケーブルは、spresense本体のUSBコネクタに挿すこと。
あとで、CircuitPython を利用するときは、逆に拡張ボード側のUSBコネクタに挿す。
tty を確認すると2つのserialが見つかる
- /dev/tty.usbserial-1432330(数字はrandam?)
- /dev/tty.SLAB_USBtoUART
きっと、spresenseのserialドライバが用意した /dev/tty.SLAB_USBtoUART
を利用する。
CP210x USB to serial driver for Mac OS X
また、spresenseの該当箇所のcommand例は、flash_writer 引数が間違ってる(バージョン違い?)ので注意。
-S
option は、最新の flash_writer command で不要になったらしい。
NG
$ ./flash_writer -s -c <serial_port> -b 115200 -d -n -S "./loader.espk" -S "./gnssfw.espk" -S "./dnnrt-mp.espk" -S "./AESM.espk"
OK
$ ./flash_writer -s -c /dev/tty.SLAB_USBtoUART -b 115200 -d -n -s "./loader.espk" "./gnssfw.espk" "./dnnrt-mp.espk" "./AESM.espk"
>>> Install files ...
install -b 115200
Install ./loader.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
120320 bytes loaded.
Package validation is OK.
Saving package to "loader"
updater# install -b 115200
Install ./gnssfw.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
457552 bytes loaded.
Package validation is OK.
Saving package to "gnssfw"
updater# install -b 115200
Install ./dnnrt-mp.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
90640 bytes loaded.
Package validation is OK.
Saving package to "dnnrt-mp"
updater# install -b 115200
Install ./AESM.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
28944 bytes loaded.
Package validation is OK.
Saving package to "AESM"
updater# sync
updater# Restarting the board ...
reboot
数分以上かかるので気長に待つ。
CircuitPython のinstall
バイナリを以下のサイトをからdownload
ただし!
言語は、ENGLISH
を選ぶこと。USでもUKでも可。
理由は、後述の ampy を利用するときに、REPL(Read Evaluate Print Loop)が返す soft reboot
という文字列が、 JAPANESE
版だと ソフトリブート
にローカライズされてしまうから。
そのせいで、ampy コマンドを実行すると以下のエラーが発生する
could not enter raw repl
downloadできたら先ほどと同じようにspresense に書き込む。大事なことは、USBケーブルをspresense本体のUSBコネクタに挿すこと。
$ ./flash_writer -s -c /dev/tty.SLAB_USBtoUART -b 115200 -d -n ./adafruit-circuitpython-spresense-en_US-6.2.0.spk
>>> Install files ...
install -b 115200
Install ./adafruit-circuitpython-spresense-en_US-6.2.0.spk
|0%-----------------------------50%------------------------------100%|
######################################################################
502624 bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# sync
updater# Restarting the board ...
reboot
CircuitPython を試す
準備が完了すると、macにお馴染みのdrive CIRCUITPY
が現れる
あわててはいけない。
USBケーブルをspresenseの拡張ボードにあるUSBコネクタに刺しなおす。
ファイル確認
$ ampy -p /dev/tty.usbmodem1839CC0AC91 ls
/.Trashes
/._code.py
/.fseventsd
/.metadata_never_index
/boot_out.txt
/code.py
/lib
小さいプログラムで試す。
led.py
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED0)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
ampy で実行
$ ampy -p /dev/tty.usbmodem1839CC0AC91 run led.py
4個ある本体上のLEDの1個が、チカチカしたら成功。
built in modules
REPL で help('modules')
を試す。
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 6.2.0 on 2021-04-05; SPRESENSE with CXD5602
>>> help('modules')
__main__ builtins json rtc
_bleio busio math sdcardio
_pixelbuf camera microcontroller sdioio
adafruit_bus_device collections micropython storage
analogio digitalio os struct
array errno pulseio supervisor
binascii gc pwmio sys
bitbangio gnss random time
board io re ulab
Plus any modules on the filesystem
>>>
おまけ
spersenseのCircuitPythonのマニュアルをみていたら、いつか調べようと思っていた、フォルダ内のプログラム名の実行時の優先順位があったので、メモ。
CircuitPython looks for a code file on the board to run. There are four options:
- code.txt
- code.py
- main.txt
- main.py