ブログ

TIPS:シリアル通信で制御コードを含むデータの送信/受信する簡易的な方法(pyserialを使用)

at_kazutaka.bito
2022年4月11日 9時41分

シリアル通信で制御コードを含むデータの送信/受信する簡易的な方法です。
ここでは、pyserialを使用します。

以下は、Armadillo-640を使って、RS232Cインタフェースで通信する例で説明します。

1. pythonとpyserialのインストール

Armadillo-640をインターネットに接続可能なネットワークに接続して、下記コマンドでpythonとpyserialをインストールします。

root@armadillo:~# apt-get update
root@armadillo:~# apt-get install python3
root@armadillo:~# apt-get install python3-pip
root@armadillo:~# python3 -m pip install pyserial


2. 制御コードを含むデータ送信の方法

例として、下記のようなpythonスクリプトファイル(seri_out.py)を作成します。
 Armadillo-640のRS232Cインタフェースのデバイスファイル名:/dev/ttymxc2
 ボーレート:38400
 送信データ:"Hello"というテキストをSTX(制御コード:0x02)、ETX(制御コード:0x03)で囲ったデータ

seri_out.py

import serial
 
ser = serial.Serial('/dev/ttymxc2', 38400)
 
cmd = bytearray([0x02,0x48,0x65,0x6c,0x6c,0x6f,0x03])
 
ser.write(cmd)

補足)cmd = bytearray([0x02,0x48,0x65,0x6c,0x6c,0x6f,0x03])の行について
bytearray内の16進数は、下記に対応しています。
0x02:STX(制御コード)
0x48:H(0x48)
0x65:e(0x65)
0x6c:l(0x6c)
0x6c:l(0x6c)
0x6f:o(0x6f)
0x03:ETX(制御コード)

下記のようにコマンドを実行すると、"Hello"というテキストをSTX(制御コード:0x02)、ETX(制御コード:0x03)で囲ったデータが送信されます。

root@armadillo:~# python3 seri_out.py


3. 制御コードを含むデータ送信の方法

例として、下記のようなpythonスクリプトファイル(seri_in.py)を作成します。
 Armadillo-640のRS232Cインタフェースのデバイスファイル名:/dev/ttymxc2
 ボーレート:38400
 受信データ:7Byte受信すると表示する

seri_in.py

import serial
 
ser = serial.Serial('/dev/ttymxc2', 38400)
 
res = ser.read(7)
 
print(res)

下記のようにコマンドを実行後、7Byte受信すると受信データを表示します。

root@armadillo:~# python3 seri_in.py

上述のseri_out.pyで、"Hello"というテキストをSTX(制御コード:0x02)、ETX(制御コード:0x03)で囲ったデータ(7Byte)を受信すると、下記のように表示されます。

b'\x02Hello\x03'