Pythonによるファームウェアの書き込み
TWELITE のファームウェア書き込みを行うPythonモジュール(ベータ版)
tweliter
モジュールは、現在ベータ版です。概要
tweliter
モジュールは、TWELITE のファームウェアを書き込むためのPythonモジュールです。
PyPIからインストールでき、コマンドラインツールとして使用できるほか、Pythonスクリプトから制御することもできます。
インストール方法
PyPIからインストールしてください。
pip install tweliter
Poetryなら
poetry add tweliter
Linuxにおける追記事項
udev
によって権限を与える必要があるかもしれません。
/etc/udev/rules.d/99-ftdi.rules
を作成します
# TWELITE R / MONOSTICK (FT232R / 0403:6001)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666"
# TWELITE R2 / R3 (FT230X / 0403:6015)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", MODE="0666"
- udev ルールを更新します
sudo udevadm control --reload-rules
sudo udevadm trigger
また、TWELITE STAGE アプリでは ftdi_sio
モジュールのアンロードが必要ですが、Pythonで使用する際はこれをロードする必要があります。
modprobe usbserial
modprobe ftdi_sio
使用例
コマンドラインツールとして
tweliter
に続いて、バイナリファイル(.bin
)を指定します。
tweliter dir/SomeApp_BLUE.bin
BLUE シリーズと RED シリーズを間違えないようにしてください。
コマンドラインオプション
tweliter -h
usage: tweliter [-h] [--url URL] [--verify] [--startmsg STARTMSG]
[--retry RETRY]
file
Write TWELITE BLUE/RED firmware
positional arguments:
file Firmware file to write
options:
-h, --help show this help message and exit
--url URL Device URL starting with ftdi://
--verify Verify firmware after writing
--startmsg STARTMSG Prefix for startup message to check
--retry RETRY Retry count in case of firmware writing failure
url
:FTDIデバイスを指定するためのURLを指定できます- 未指定では、接続されたFTDIデバイスが一点なら自動選択、複数なら選択を促します
verify
:指定すると、書き込み後にベリファイを行いますstartmsg
:完了後、指定したテキスト以降の起動メッセージを捕捉して表示します- デフォルトは
!INF MONO WIRELESS
としています
- デフォルトは
retry
:数を指定すると、書き込みに失敗した際にその数だけリトライします。- 未指定では、2回までリトライを行います
スクリプトから
Twelite
クラスのインスタンスを利用してください。
from pathlib import Path
from tweliter import Tweliter
file = Path('dir/SomeApp_BLUE.bin')
try:
with Tweliter(url="ftdi://:ft-x:/1") as liter:
# Get serial interface
ser = liter.get_serial_instance()
# Write firmware
liter.write(ser, file, verify=True)
# Show startup message
print(liter.get_startup_message_after(ser, "!INF MONO WIRELESS"))
except IOError as e:
print(f"Cannot connect {e}")
except RuntimeError as e:
print(f"Failed to write {e}")