rshellをMicroPython開発に使う

少し前にuPyDevというMicroPython開発ツールについて記事をまとめたが、完成度がイマイチで常用する気にならず。そんな中、rshellという良さ気なコマンドラインツールを見つけた。rshellのGitHubページは以下。

GitHub - dhylands/rshell: Remote Shell for MicroPython
RemoteShellforMicroPython.Contributetodhylands/rshelldevelopmentbycreatinganaccountonGitHub.

rshellはampyよりは高機能だがuPyDevほどではない、といったところ。実際にrshellを試してみたので記事にまとめる。

スポンサーリンク

rshellで出来ること

rshellの特長は、

  • ファイルのコピーや削除は勿論、閲覧や編集などファイル操作のための内部コマンドが用意されている
  • MicroPython側のファイルシステムが仮想マウントされファイル操作が簡単に出来る
  • rshellの中でREPL(MicroPythonの対話型インタプリタ)が実行出来る

ファイルシステムの仮想マウントのお陰で、MicroPythonがリモートにある事を意識せずに作業出来る。CircuitPythonならUSBマスストレージ前提だから分かるけど、シリアル接続だけのMicroPythonでこの使い勝手が得られるのは有難い。

下の表にrshellの主なコマンドをまとめておく。(詳細はGitHubページを参照)

コマンド名機能
catファイルの内容を表示
cdカレントディレクトリの変更
cpファイルのコピー
editファイルを指定エディタ(環境変数などで指定する)で開く
lsディレクトリの内容を表示
mkdirディレクトリの作成
rmファイルやディレクトリの削除
replMicroPythonのREPL(対話型インタプリタ)に入る
shell(!)PC側のコマンドを実行

rshellのインストール

rshellのGitHubページはここrshellはPyPIに登録されており、pipでインストール可能。

pip install rshell

rshellの起動

コマンドラインからCOMポートを指定して起動する。

rshell -p <COMポート名>

COMポート名は、Windowsの場合は”COM5″など、Linuxの場合は”/dev/ttyUSB0″などだ。

rshellの内部コマンド

rshellを起動するとカレントディレクトリがプロンプトとして表示され、rshellの内部コマンドが使えるようになる。rshellを終了したい時はCtrl-Dを入力すればOK。以下、いくつか内部コマンドの使い方の例を紹介。

ファイルの一覧を表示

MicroPythonのファイルシステムはデフォルトでは/pyboardの下に見えているので、

ls /pyboard

を実行するとMicroPython側のファイル一覧を表示出来る。/pyboard以外のディレクトリを指定すると、ローカルのファイル一覧が表示される。

ファイルのコピー

PCとMicroPythonの間のファイルのやりとりも簡単だ。

  • PC→MicroPythonのコピー
cp foo.py /pyboard
  • MicroPython→PCのコピー
cp /pyboard/bar.py .

ファイルの内容確認

MicroPython側にあるファイルの内容も簡単に確認出来る。

cat /pyboard/bar.py

ファイルの編集

MicroPython側にあるファイルを指定してエディタを起動し直接編集出来てしまう(エディタはEDITOR環境変数などで指定)。これは便利!

edit /pyboard/bar.py

REPLに入る

REPLに入るには”repl”と入力するだけ。REPLを終了させたい時はCTRL-Xを入力する。

repl

セッションの例

ラズパイPicoにインストールしたMicroPythonにrshellで接続した時のセッション例を貼っておく。

$ rshell -p /dev/ttyACM0 
Using buffer-size of 32
Connecting to /dev/ttyACM0 (buffer-size 32)...
Trying to connect to REPL  connected
Retrieving sysname ... rp2
Testing if ubinascii.unhexlify exists ... Y
Retrieving root directories ... 
Setting time ... Apr 17, 2022 11:32:48
Evaluating board_name ... pyboard
Retrieving time epoch ... Jan 01, 1970
Welcome to rshell. Use Control-D (or the exit command) to exit rshell.
/home/common/work/EleDIY/MicroPython> ls /pyboard
/home/common/work/EleDIY/MicroPython> edit /pyboard/main.py
Retrieving /pyboard/main.py ...
Updating /pyboard/main.py ...
/home/common/work/EleDIY/MicroPython> ls /pyboard
main.py
/home/common/work/EleDIY/MicroPython> cat /pyboard/main.py
import os

print(os.listdir())
/home/common/work/EleDIY/MicroPython> repl
Entering REPL. Use Control-X to exit.
>
MicroPython v1.18 on 2022-01-17; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> 
>>> print('Hello world!')
Hello world!
>>> 
MPY: soft reboot
['main.py']
MicroPython v1.18 on 2022-01-17; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>>  
/home/common/work/EleDIY/MicroPython> 

ここで実行しているのは、以下のような内容。

  1. MicroPythonのファイルシステムをls(ファイルが何も無いことを確認)
  2. MicroPythonのmain.pyをエディタで開いてプログラム作成
  3. MicroPythonのファイルシステムをls(main.pyが作成されている)
  4. MicroPythonのmain.pyの中身をcatで表示
  5. REPLに入り、MicroPythonでprint文を実行→’Hello world!’が表示される
  6. Ctrl-DでMicroPythonを再起動→先ほど作成したmain.pyが自動実行される
  7. Ctrl-XでREPLを抜ける

まとめ

MicroPython開発の便利ツールrshellを試し、使い方をまとめた。MicroPythonのファイルシステムがPC側に仮想マウントされる仕組みは本当に素晴らしい。コマンドライン好きの自分としてはampyからの乗り換え第一候補かな。そもそもrshell自体は歴史が古く、かなり前から存在していたようだ。もっと早くから使いたかった!

この機能がWiFi経由で使えたら文句なし、と思う。

コメント