Как отправлять и получать данные с помощью Pyserial? - PullRequest
0 голосов
/ 06 марта 2019

Я хочу отправлять и получать данные между двумя последовательными портами. Я использую набор инструментов CANtact в качестве своих последовательных устройств. Я использовал следующий код

write.py:

import serial
#init serial port and bound
# bound rate on two ports must be the same
ser = serial.Serial('/dev/ttyACM1', 9600)
print(ser.portstr)

#send data via serial port
serialcmd=("012345688902341")
ser.write(serialcmd.encode())
ser.close()

listen.py

import serial
serBarCode = serial.Serial('/dev/ttyACM0', 9600, timeout=1)

while True:

    #read data from serial port
    serBarCode = serBarCode.readline()

    #if there is smth do smth
    if len(serBarCode) >= 1:
        print(dataBarCode.decode("utf-8"))

Я получаю следующую ошибку:

hp @ HP-Notebook: ~ $ cd / home / hp / Desktop

hp @ HP-Notebook: ~ / Desktop $ python3 write.py

/ DEV / ttyACM1

hp @ HP-Notebook: ~ / Desktop $ python3 listen.py

Traceback (последний последний вызов):

Файл «listen.py», строка 7, в

serBarCode = serBarCode.readline ()

AttributeError: у объекта 'bytes' нет атрибута 'readline'

hp @ HP-Notebook: ~ / Desktop $

Ответы [ 2 ]

1 голос
/ 06 марта 2019
serBarCode = serBarCode.readline()

Вы перезаписываете свой серийный объект serBarCode данными, которые вы читаете с него. Таким образом, цикл выполняется правильно в первый раз, но на следующей итерации ваш последовательный объект был заменен байтами, которые вы читали из него ранее

Сделайте это вместо:

data = serBarCode.readline()
if len(data) >= 1:
    print(dataBarCode.decode("utf-8"))
0 голосов
/ 06 марта 2019

Вы пишете, что используете устройства CANtact.

Эти устройства не понимают "012345688902341".

Устройство говорит по определенному протоколу.Например, для отправки сообщения CAN команда начинается с t, за которым следует CAN-ID, затем DLC, затем данные и т. Д.

Другие команды начинаются с F, K и т. д.

Скорее всего, ваше сообщение CANtact просто игнорирует ваше сообщение.

Для использования устройства вам обязательно следует использовать библиотеку более высокого уровня, например pyvit.

...