動作環境
CentOS 6.8 (64bit)
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
pySerial pyserial-2.7-py2.6.egg-info
関連
- (未解決) pySerial 3.* + CentOS 6.8 > Python 2.6は対応しない (ValueError: zero length field name in format) | Python 2.7は対応してそう > Python 2.7と3.6ではConnection timed out
- (未解決) pySerial 3.* + Ubuntu 16.04 LTS > OSError: [Errno 5] Input/output error | RPi + Python 2.7.9 + pySerial 2.6-1.1では問題ない
pySerialの3.*ではCentOSとUbuntuにおいてまともにシリアル通信ができない。
というのが2018年1月19日現在の認識である。
Raspberry Pi(Raspbian Jessie)でpySerial 2.*ではシリアル通信ができていた実績がある。
pySerial 2.7 + CentOS 6.8
CentOS 6.8にpySerial 2.7をインストールしてみた。
https://pypi.python.org/pypi/pyserial/2.7
からtar.gzファイルを取得。
$tar xvzf pyserial-2.7.tar.gz
$cd pyserial-2.7
$sudo python2 setup.py install
code > ループバックテスト
loop_test_180119.py
import serial
import time
def main():
print("Hello")
con1=serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
con2=serial.Serial('/dev/ttyUSB1', 9600, timeout=10)
str1='from\r'
con1.write(str1);
str2=con2.readline()
print("str1=", str1)
print("str2=", str2)
con1.close()
con2.close()
if __name__ == '__main__':
main()
実行
USBシリアル変換ケーブル2本をクロス接続して、USBに挿した状態で以下を実行した。
(ケーブルのドライバはProlific)。
$ sudo python2 loop_test_180119.py
Hello
('str1=', 'from\r')
('str2=', 'from\r')
この処理を繰り返したが正常に処理されている。
(readline()の問題はあり、こちらに記載の対応は必要となりそう)。
ドライバのバージョンアップで動作しなくなるコード
Unityのシリアル通信はUnity4からUnity5になった時点で動作しなくなった経験がある。
Gitのとあるクライアントソフトはv1.からv2.になった時点でバグだらけになった例も知っている。
pySerialは v3.*で調べた範囲ではいくつかのエラーが未解決のように見られる。
5年、10年のスパンで考えた場合、ドライバのバージョンアップで動作しなくなるコードがあると認識しておく必要があるかもしれない。