Raspberry Pi とマイコンをシリアル通信(RS232C)でつなげたい
解決したいこと
ラズパイとマイコンのシリアル通信を可能にしたい
前提
ラズパイとマイコンのシリアル通信にトライしているが、規定のコマンドを送信しても返信がない
ラズパイとマイコンはRS232CとUSBの変換コードを介している
マイコン指定の伝送コードはASCIIで、
フォーマットは {STX}{コマンド}{CR}{チェックサム}{ETX}
「チェックサムが’0000’の場合は誤り検出を行わずに実行します。」との記述があったのでチェックサムは'0000'に固定している
マイコン付属の通信確認ソフトをPCにインストールし確認してみたが、問題なく応答したので配線等の問題ではないと思う
baudrateが9600なのは確認済み
普段はvb.netを使っているのでコードを書いてみたが、こちらでは返信があった
しかし、いざラズパイのpythonで実装しようとしたがうまくいかない
該当のソースコード
import serial
writeSer = serial.Serial('/dev/ttyUSB0',9600,timeout=1)
dat = send_data('ABC123') #送りたいコマンド
def send_data(s):
s='\2'+s+'\15'+'0000'+'\3' #{STX} + コマンド + {CR} + チェックサム + {ETX}
return s.encode('ascii')
for b in dat:
print(hex(b).encode('ascii'))
writeSer.write(hex(b).encode('ascii'))
writeSer.close()
readSer = serial.Serial('/dev/ttyUSB0',9600,timeout=1)
line = readSer.readline()
print("Read serial:"+line.decode('ascii')) #返信表示
readSer.close()
試したこと
https://qiita.com/umi_mori/items/757834e0ef75f38cea19
https://teratail.com/questions/sgqssronc4bzcn
上記を参考に作成した
以下はちゃんと返信があったvb.netのコード
SerialPort1.Write(Chr(&H2)) '{STX}
text = "ABC123" '{コマンド}
For i = 1 To Len(text)
SerialPort1.Write(Mid(text, i, 1))
Next
SerialPort1.Write(Chr(&HD)) '{CR}
text = "0000" '{チェックサム}
For i = 1 To Len(text)
SerialPort1.Write(Mid(text, i, 1))
Next
SerialPort1.Write(Chr(&H3)) '{ETX}
それとpythonの{CR}のところがasciiコード表だと13となっているが、\13にしてみると0x0bとなってしまう。
0x0dだと思っていたのだがこの違いは何なのか?