Я хочу отправить несколько байтов через pySerial.Я создал виртуальные последовательные порты с socat для тестирования:
socat PTY,link=./ptyp1,b9600 PTY,link=./ptyp2,b9600
Вот код Python:
ser = serial.Serial('./ptyp1')
x = struct.pack('B',2)
print binascii.hexlify(x) # 02
ser.write(x)
y = ser.read(2)
print binascii.hexlify(y) # 5e42
Выходной сигнал, который я получаю:
02 # x
5e42 # y
ВыходЯ ожидаю:
02 # x
02 # y
Что я здесь не так делаю?Это сокат или питон?
Редактировать:
Я только что заметил другое странное поведение для разных значений х.Вот результат:
x = 12 => y = 5E 52 0D 0A 5E 50
x = 100 => y = 100 # why does it work here?
Решение:
Проблема заключалась в том, что я читал на том же порту, на который писал.Если я правильно понял, socat «соединяет» два порта как «in» и «out».Поэтому я должен читать ./ptyp2, если я пишу ./ptyp1.После этого все хорошо.