pySerial をコマンドラインで使う

Posted on Mon 11 March 2019 in misc

Keyboard

Raspberry Pi を操作するためにシリアル通信を使いたいと思います。たいした理由はありません。HDMI 接続のディスプレイをもっていないからです。

せっかく Python を使うので、 pySerial を使ってみたいと思います。

まず、 venv で仮想環境をつくって有効にしておきます。

その上で、 ドキュメントどおりに

pip install pyserial

これでインストールはされました。

とりあえずループバックで試したいので、USB シリアル変換アダプタを PC の USB ポートにつないで、TX と RX をつなぎます。

そうしておいて、 miniterm.py を起動します。

miniterm.py /dev/ttyUSB0 115200

するとエラーです。

could not open port '/dev/ttyUSB0': [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'

sudo を付けてみます。

sudo miniterm.py /dev/ttyUSB0 115200

エラーです。

sudo: miniterm.py: command not found

次のようにも起動できるので試します。

sudo python -m serial.tools.miniterm /dev/ttyUSB0 115200

エラーです。

/usr/bin/python: No module named serial.tools

デバイスファイルのパーミッションを変更すれば使えるかもしれませんが、めんどくさそうなのでやりません。そうすると、venv の上では動かないように思います。

venv なしで pySerial をインストールして動かしてみます。Ubuntu 18.04 では Python3 用の pip はインストールされていません。 python3-pip をインストールしておきます。

Ubuntu の場合は インストールに pip3 を使います。

pip3 install pyserial

デバイスファイルのパーミッションがないのは、さっきと同じなので sudo を付けてみます。

sudo miniterm.py /dev/ttyUSB0 115200

エラーです。

sudo: miniterm.py: command not found

これではどうか。

sudo python3 -m serial.tools.miniterm /dev/ttyUSB0 115200

起動しました。

--- Miniterm on /dev/ttyUSB0  15200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

キーボードを叩くとターミナルに文字が表示されます。RX と TX をつないであるのでループバックします。つながっていないと何も表示されません。

動きはしましたが、Linux ではシステムが Python を使っていたりするので、仮想環境無しでパッケージをインストールするのはちょっといやな感じがします。目的は Raspberry Pi を操作することではあるので、他のソフトウェア、例えば minicom とかを使ってみようと思います。