仮想シリアルポートを作成して動作確認する方法
はじめに
環境
bash
cat /etc/system-release
Amazon Linux release 2 (Karoo)
プログラムはpython
bash
bash-4.2# python3 --version
Python 3.7.10
port:9600を使用して通信します
仮想シリアルポート作成
socatという便利コマンド
socatとは
2つの双方向バイトストリームを確立し、それらの間でデータを転送するコマンドラインベースのユーティリティです。
socat install
yum install -y socat
コマンド
socat -d -d pty,raw,echo=0 pty,raw,echo=0
構文
socat [options] <address> <address>
オプション
[options]: -d -d: fatal/error/warning/info のメッセージを表示
<address>: pty,raw,echo=0: ptyの入力値をそのまま出力します
<address>: pty,raw,echo=0: ptyの入力値をそのまま出力します
ptyとは
擬似端末セッションの役割をソフトウェア(プロセス)が代用する
sshした際などに生成され、各コマンドプロンプトがこちらに該当します
- ssh セッション1
bash-4.2# ps -a
PID TTY TIME CMD
225 pts/1 00:00:00 ps
- ssh セッション2
bash-4.2# ps -a
PID TTY TIME CMD
225 pts/2 00:00:00 ps
TTYのところが異なっています
実行結果
bash-4.2# socat -d -d pty,raw,echo=0 pty,raw,echo=0
2022/04/12 10:52:53 socat[226] N PTY is /dev/pts/2
2022/04/12 10:52:53 socat[226] N PTY is /dev/pts/3
2022/04/12 10:52:53 socat[226] N starting data transfer loop with FDs [5,5] and [7,7]
※各環境にて/dev/pts/2
・/dev/pts/3
の内容は異なります
※コマンドを終了するとバイトストリームも閉じられます
スクリプト
送受信ともにpyserial
を利用します
pyserial install
pip3 install pyserial
送信スクリプト
Sender/main.py
import serial
if __name__ == "__main__":
# /dev/pts/2 はsocatの実行結果に合わせて書き換える
ser = serial.Serial('/dev/pts/2', 9600, timeout = None)
message = 'test\n'
ser.write(message.encode('ascii'))
ser.close()
受信スクリプト
Reciver/main.py
import serial
if __name__ == "__main__":
# /dev/pts/3 はsocatの実行結果に合わせて書き換える
ser = serial.Serial('/dev/pts/3', 9600, timeout = None)
while 1:
line = ser.readline()
print(line.decode('utf-8'), end='')
実行結果
送信スクリプト
bash-4.2# python3 Sender/main.py
受信スクリプト
bash-4.2# python3 Reciver/main.py
test
test
test
test
test
test
test
test
test
test
送信した内容が受信されてプロンプトに表示されています
さいごに
割と簡単に仮想シリアルポートの作成・動作確認が実施できました