これまでMicroPythonとPC間のファイル転送にampyを好んで使っていたのだが、シリアル接続だけでなくWiFiやBluetooth経由でも使えるuPyDevというツールを見つけた。
一方ampyのGitHubページを確認すると長い間更新されておらず(別プロジェクトに移行したとの記述もある)、メンテされていないツールを使い続けるのも少々不安。そんなわけでuPyDevへの乗り換えも視野に入れ使い方をまとめてみた。
uPyDevのインストール方法とオンラインドキュメント
uPyDevのGitHubページは以下。LinuxとMacで動作する(Windowsは未対応)
CPythonで書かれたツールで、インストールはpipでOK。
pip install upydev
ドキュメントはRead The Docsに整備されている。
uPyDevは機能がてんこ盛りで沢山のコマンドの集合体という感じなのだが、上記ドキュメントには個々のコマンドのオプションについて解説が無いなど肝心な事が書かれてない場合があり、別サイトにまとめられた下記のドキュメントの方がコマンドに関する情報量は多い気がする(が、あまり整理されておらず見づらい…)
uPyDevの初期設定
uPyDevはシリアル通信の他BluetoothとWiFiに対応しており、まず最初に接続先に関する情報が書かれた設定ファイルをカレントディレクトリに作成してから使うというポリシーになっている。
設定ファイルの作成についてのドキュメントは以下。
uPyDevとしての設定自体は”upydev config -t”に続けて接続先の情報を与えるだけだが、
BLEとWiFiはそれぞれ通信に関する事前準備が必要。以下、接続方法別に簡単に初期設定方法をまとめておく。
シリアル(UART)
シリアル接続の場合は-tオプションにUSBシリアルデバイスを指定してconfigを実行するだけ。他の事前準備は不要。
upydev config -t /dev/ttyUSB0
BLE(Bluetooth Low Energy)
BLE接続の場合は-tオプションにMicroPython側のMACアドレスを指定する。
upydev config -t 9C:9C:1F:C5:CB:92
周囲のBLEデバイスは”upydev scan -bl”で検索可能。
BLEデバイスとしてPCから検索出来るようにするためにはMicroPython上で初期化コードを動かしておく必要があり、詳細は別途記事にまとめてある。作業としては幾つかの.pyファイルを予めMicroPython側に転送しておき、事前に以下の初期化コードをMicroPython上で実行しておけばOK(boot.pyに書いておくと良い)
import ble_uart_repl
ble_uart_repl.start()
WiFi
WiFi接続の場合は-tオプションにIPアドレスと-pオプションにWebREPLのパスワードを指定する。
upydev config -t 192.168.1.11 -p passwd
WiFiの場合に必要なのは以下の2つ。
- WiFi接続の設定
- WebREPLの初期設定(パスワードの設定など)
特にWiFi接続はDHCPでIPアドレスが毎回変わるようだと具合が悪いので、この記事の方法などにより固定IPアドレスでLAN接続されるようにしておく方が良いだろう。
WebREPLの初期設定はシリアル接続のMicroPython上で以下を一回実行するだけだ。
import webrepl_setup
上記を実行すると、MicroPython側にwebrepl_cfg.pyというファイル(この中にパスワードが保存されている)が作られ、boot.pyにWebREPLの初期化コードが追加される。
uPyDevによるファイル操作の方法
upydevには非常に沢山の機能があるが、ごく最低限のファイル操作を行うための方法を中心に以下にまとめておく。基本的には通信手段(シリアル、BLE、WiFi)の違いを意識せずに使えるように作られているようだが、特にBLEは動作が不安定で完成度はあまり高くない印象。
とはいえMicroPython開発の選択肢としてシリアル接続だけでなくBLEやWiFiが加わり、ワイヤレス開発が可能になるのは嬉しい。
upysh(シェルコマンド)
事前にPC側から以下を実行すると、MicroPythonのlib/ディレクトリにupyshがインストールされる。
upydev install -f upysh
そして、MicroPythonで
from upysh import *
を実行しておくと、PCのコマンドラインで、
upydev ls
を実行することによりMicroPythonのファイル一覧を表示出来るようになる。ファイルサイズなどが表示されるので、ampyのlsコマンドよりも便利そう。
またupyshにはlsの他にも、mkdir, cd, catなどが使える。但し、引数無しのls以外は少々面倒で、
upydev "cat('boot.py')"
みたいな書き方をする必要がある。このあたりの詳細は”upysh man”を実行すると表示される。
これらをMicroPython起動直後から使えるようにするには、上記MicroPythonで事前実行するべきコード”from upysh import *”をmain.py(boot.pyではダメ)に書いておけばOK。
fio(ファイルの転送)
upydev putやupydev getを使うと、ほぼampyと同じ感じでMicroPython側とPC側のファイルのやりとりが出来る。MicroPythonからfoo.pyをPCへ転送するには以下を実行する。
upydev get foo.py
但し、PCからbar.pyをMicroPythonに転送する場合、
upydev put bar.py
のような書き方をするとbar.pyを転送後にMicroPythonがリセットされてしまう。リセット無しで単にファイル転送した時は、以下のように-rstオプションを付ける必要がある。
upydev put -rst f -f bar.py
またputコマンドは-dirオプションでMicroPython側の転送先ディレクトリが指定出来たりする。
この他にもディレクトリを再帰的に転送出来るdsyncなどが使えるようだ(但しMicroPython側にライブラリsync_tool.pyの転送が必要)。その他詳細については”upydev fio”を実行するとヘルプが表示される。
REPL(対話型インタフェース)
MicroPythonのREPL(対話型インタフェース)はWebREPLとしてブラウザから使う事も出来るけど、コマンドラインから使う手段は通常シリアル接続のみ。対してuPyDevならBLEやWiFi接続を介してコマンドラインからREPLを使えるようになる。実行方法は以下の通り。
upydev repl
自分としてはコマンドラインからREPLを使うのが好みなので、この機能はとても有難い。(が、CTRL-eの貼り付けモードが正常動作しなかったり、端末制御が時々おかしくなる等、完成度があまり高くないのが残念…)
またuPyDevでは通常のREPLだけではなく、CTRL-sキーの入力でシェルっぽいモードに遷移出来るSHELL-REPLという機能も提供されている。実行方法は以下。
upydev shell
ただWiFi接続でSHELL-REPLを実行するのに何故かSSL接続がデフォルトとなっており、SSL接続のための初期設定が別途必要となって少々面倒。WiFi接続でSSL無しでSHELL-REPLを使うためには-nemオプションを付ければOK。
upydev shell -nem
まとめ
uPyDevをインストールし、MicroPythonとのファイルのやりとり、そしてREPLやシェルツールを使ってみた。uPyDevにはこれ以外にも色々な機能があるようだが、個人的にはシンプル機能のampyで必要十分と思っていることもあり、機能拡張よりも動作の安定性や完成度が改善されると有難いかなぁと思う。
とはいえワイヤレスで使えるMicroPythonのコマンドライン開発ツールは他に無いため、個人的には重宝しそうな感触。今後の改良に期待したいと思う。
コメント
thonnyでもWebREPLが使えます。
簡易ファイラーで転送も可能です。
コメント有難うございます。thonny知りませんでしたが、人気みたいですね。個人的にはコマンドラインツールがもっと色々出てくると嬉しいなと思ってます。