0 голосов
спросил от в категории Python
См. #Short introduction ? pySerial 3.4 documentation # [#^ #] и #pySerial API ? pySerial 3.4 documentation # [#^ #].

Serial.read (size=1) считывает указанное количество байтов по умолчанию. Вот почему вы получаете только один символ.

readline () читает до получения нового символа линии. Эта функция не может использоваться, если другая сторона не отвечает новыми ответами на завершение строки. Он также требует указать тайм-аут при открытии порта.

readlines () вызывает readline () до тех пор, пока < код> EOF . Но такого никогда не происходит с последовательными портами, так что функция прекращается, когда истекает время ожидания.

Это общая проблема последовательной связи для обнаружения конца «пакета», если у них нет фиксированного размера.

Общим методом при использовании строк является использование нового символа строки или символа, который не встречается в строках, таких как нулевой байт, в качестве индикатора конца пакета.

Двоичные данные могут иметь префикс заголовка фиксированного размера, содержащего длину данных. Таким образом, получатель знает, сколько байтов данных он должен ожидать. Получатель читает сначала байты заголовка, а потом остальные байты полезной нагрузки.

Вывод:
Вы должны знать используемый формат данных (называемый protocol ) или определить его при реализации обеих сторон связи.

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Немного возиться, и это делает в значительной степени то, что я хочу (вытащил меня из отверстия, в котором я был):
#Will send and read from Com1 13/08/2018   import serial import time #Set up Serial Port 1 to send and print out com port  ser = serial.Serial(0) ser.baudrate = 9600 ser.parity = serial.PARITY_NONE ser.BYTESIZES = serial.EIGHTBITS ser.stopbits = serial.STOPBITS_ONE print(ser.portstr) ser.close() def Send():     ser.open()     #write text hello world to serial port     print('Type a string:')     text = input()     ser.write(text.encode())     ser.close() def Receive():     #open serial port and read characters from it     ser.open()     print('Receiving')     res =ser.readline()     res = res[:-2]     print(res)     ser.close() while True:     usrInput = input("Choose A: to receive, B: to Send")     if usrInput == "A":             Receive()     if usrInput == "B":              Send()

С благодарностью Бен Баркер!

Категории

Добро пожаловать на сайт DraftingCode Q&A, где вы можете задавать вопросы и получать ответы от других членов сообщества.

Связанных вопросов не найдено

...