MicroPython のリモート制御: mpremote¶
mpremote
コマンドラインツールは、シリアル接続を介して MicroPython デバイスをリモートで操作したり、自動化したりするための統合されたユーティリティセットを提供します。
mpremote を使えるようにするには pip
でインストールします:
$ pip install mpremote
このツールを使う最も簡単な方法は、引数なしで起動することです:
mpremote
このコマンドは、最初に利用可能なシリアルデバイスを自動的に検出して接続し、対話モードの REPL が使える状態にします。シリアルポートはエクスクルーシブモードで開かれるので、 mpremote
の 2 番目(さらに3番目など)のインスタンスを実行すると、利用可能なシリアルデバイスがあれば、後続のシリアルデバイスに接続します。
コマンド¶
REPL にアクセスするには、たいていは引数なしで mpremote
を実行するだけで十分です。 mpremote
はまた、コマンドラインに与えられる一連のコマンドをサポートしていて、これによりリモートの MicroPython デバイスに対して様々なアクションを実行します。
サポートされているコマンドの全リストは以下の通りです:
デバイス名ショートカットで指定したデバイスに接続:
$ mpremote <device-shortcut>
名前で指定したデバイスに接続:
$ mpremote connect <device>
<device>
は以下のいずれかです:list
: 利用可能なデバイスのリスauto
: 利用可能な最初のデバイスに接id:<serial>
: USB シリアル番号<serial>
(connect list
コマンドで出力される2番目の項目)を持つデバイスに接続port:<path>
: 指定したパスを持つデバイスに接続- 任意の有効なデバイス名/パスを指定して、そのデバイスに接続
現在のデバイスを切断:
$ mpremote disconnect
切断後、自動ソフトリセットが有効化されます。
以前の
mpremote
セッションを再開:$ mpremote resume
これは自動ソフトリセットを無効化します。
デバイスのソフトリセットを実行:
$ mpremote soft-reset
これにより、Python のヒープがクリアされ、インタープリターが再起動します。また、自動ソフトリセットを無効にします。
接続したデバイスの REPL に入る:
$ mpremote repl [options]
オプションは次のとおり:
--capture <file>
: REPL セッションの出力を指定したファイルにキャプチャーします--inject-code <string>
: REPL で Ctrl-J が押されたときに注入する文字を指定します--inject-file <file>
: Ctrl-K が押されたときに REPL に注入するファイルを指定します
Python の式を評価して結果を表示:
$ mpremote eval <string>
指定した Python のコードを実行:
$ mpremote exec <string>
ローカルファイルシステムにあるスクリプトを実行:
$ mpremote run <file>
デバイスに対してファイルシステムコマンドを実行:
$ mpremote fs <command>
<command>
は次のとおり:cat <file..>
: デバイスにあるファイルの内容を表示ls
: カレントディレクトリを一覧表示ls <dirs...>
: 指定のディレクトリを一覧表示cp [-r] <src...> <dest>
: ファイルをコピー。接頭辞として ":" があると、デバイス上のファイルを指定したことになるrm <src...>
: デバイス上のファイルを削除mkdir <dirs...>
: デバイスにディレクトリを作成rmdir <dirs...>
: デバイス上のディレクトリを削除
リモートデバイス上にローカルディレクトリをマウント:
$ mpremote mount [options] <local-dir>
使用中に Ctrl-D を入力すると、ソフトリブートを行い、通常は自動的にマウントを再接続します。しかし、起動時に main.py が実行されている場合、再マウントは行われません。この場合、raw モードのソフトリブートを使えます。Ctrl-A Ctrl-D でリブート、Ctrl-B で通常のリプレイに戻り、マウントの準備ができます。
オプションは次のとおり:
-l
,--unsafe-links
: デフォルトではデバイスがマウントされているローカルディレクトリの外側(1つ以上のディレクトリレベル)にあるファイルやディレクトリにアクセスすると、エラーが発生します。このオプションは、シンボリックリンクのチェックを無効にし、デバイスがローカルディレクトリの外側のシンボリックリンクをたどることを可能にします。
リモートデバイスからローカルディレクトリをアンマウント:
$ mpremote umount
Multiple commands can be specified and they will be run sequentially.
自動接続とソフトリセット¶
接続と切断は、コマンドに明示的に指定されていなければ、ツールの実行開始時と終了時に自動的に行われます。自動接続では、最初に利用可能なシリアルデバイスを検索します。アクションが指定されていない場合は REPL が起動します。
デバイスに接続すると、 mpremote
は必要に応じてデバイスを自動的にソフトリセットします。これは Python のヒープをクリアしてインタプリタを再起動し、その後の Python コードが新鮮な環境で実行されるようにします。自動ソフトリセットは、以下のコマンドのいずれかが初めて実行されたときに行われます: mount``, eval
, exec
, run
, fs
。ソフトリセットを初めて行った後、 disconnect
コマンドを発行するまで、自動的にソフトリセットを行うことはありません。
自動的なソフトリセットの動作は、 resume
コマンドで制御することができます。また、 soft-reset
コマンドを使用すると、明示的なソフトリセットを行えます。
ショートカット¶
ショートカットはマクロシステムを使って定義できます。内蔵のショートカットには次のものがあります:
- ``devs``: 利用可能なデバイスを一覧表示
a0
,a1
,a2
,a3
: /dev/ttyACM? に接続u0
,u1
,u2
,u3
: /dev/ttyUSB? に接続c0
,c1
,c2
,c3
: COM? に接続cat
,ls
,cp
,rm
,mkdir
,rmdir
,df
: ファイルシステムコマンドreset
: デバイスをリセットbootloader
: デバイスのブートローダを起動
ユーザー設定は、ユーザー定義のショートカットも含めて、ファイル .config/mpremote/config.py
に入れることができます。たとえば、以下のようになります:
commands = {
"c33": "connect id:334D335C3138",
"bl": "bootloader",
"double x=4": "eval x*2", # x is an argument, with default 4
"wl_scan": ["exec", """
import network
wl = network.WLAN()
wl.active(1)
for ap in wl.scan():
print(ap)
""",],
"test": ["mount", ".", "exec", "import test"],
}
利用例¶
mpremote
mpremote a1
mpremote connect /dev/ttyUSB0 repl
mpremote ls
mpremote a1 ls
mpremote exec "import micropython; micropython.mem_info()"
mpremote eval 1/2 eval 3/4
mpremote mount .
mpremote mount . exec "import local_script"
mpremote ls
mpremote cat boot.py
mpremote cp :main.py .
mpremote cp main.py :
mpremote cp -r dir/ :