Armadilloフォーラム

シリアル通信書き込み 2バイト目以降が文字化け

kdhiro

2021年1月15日 15時03分

Python3で、PC間でのシリアル通信を試みているのですが、
下記プログラムで送信した先の受信データが1バイト目以降が
文字化けしてしまいます。16進数データだと「68 59 8b 3f 3f bd」、
テキストデータだと「hY・?ス」になります。Python3自体、詳しく
なく、ネットで調べたのですが、原因が全く分かりません・・・。

import serial

ser = serial.Serial('/dev/ttymxc2', 115200)
data = "hello"
ser.write(bytes(data, 'UTF-8'))
ser.close()

コメント

kdhiro

2021年1月15日 15時20分

すみません。
文字化けしているときは、送信側Linuxで受信側Windowsのシリアル通信でした。
受信側もLinuxにしたら、文字化けはなくなりました。OSの違いでこのような
現象が起きるのですかね?

at_ohsawa

2021年1月18日 19時01分

自分はそういう挙動は見たことが無いのですが、
Windows側でTeraTerm等から見ても化けているのでしょうか?

kdhiro

2021年1月25日 11時36分

> 自分はそういう挙動は見たことが無いのですが、
> Windows側でTeraTerm等から見ても化けているのでしょうか?

Windows側でTeraTermを用いて受信したときに文字化けしていました。
双方のPCをLinuxに揃えたので、今は問題ありません。勉強になりました。

richard84

2021年2月2日 22時50分

周回遅れですが、横から失礼します。
参考までに、私の経験談です。

10年以上前XP時代でしたが、取引先からVBで作成したシリアルポートでデータを送信ソフトを提供してもらったところ、条件をそろえているのに通信できなかったことがあります(受信側はマイコンボード)。
オシロで波形をみたら、設定した速度に対し間延びした波形が観測されました。
その時は、VCで直接シリアルポートを触るソフトに作り直してもらいました。

送信と受信の違いはありますが、ライブラリによってはそのような現象があり得ると思います(WindowsのpySerialが原因とも言い切れないですが)。

現在は問題がない様ですから、そこまでする必要はないでしょうが、どうしても切り分けが必要な場合はオシロでシリアル波形の確認で一発です。
(当たり前のことでスミマセン)

以上、よろしくお願いします。