Использование readline() в библиотеке pyserial

Подскажите как использовать readline() для приёма данных по uart интерфейсу. Насколько я понял из документации readline() принимает все последовательные данные с ком порта пока не придёт EOL - \n. Собственно вопрос что такое \n? Это буква n в unicode? То есть у меня будут читаться и будут возвращены все данные, когда по последовательному интерфейсу не придёт последовательность бит 01101110? Данные я посылаю с ПЛИС. И не могу понять что мне нужно сформировать чтобы пакет правильно принимался.


Ответы (1 шт):

Автор решения: Alex

Мб кто-нибудь наткнётся через Гугл на эту тему. Поэтому напишу результаты моих изысканий. Проверил с ПЛИС. Для того чтобы readline() работал адекватно. В конце каждой посылки нужно формировать следующую последовательность бит - 00001010. Пайтоном это воспринимается как b'\n'. Но принятые данные печатаются с \n в конце. Например - b'\xea\x8f\x1f\n'. Для того чтобы избавиться от \n в конце использовал следующее:

def read_com_port(port_name, baud_rate):
ser = serial.Serial(port_name, bauderate=baude_rate)
    while True:
        buf = ser.readline()
        if len(buf) != 4:
            continue
        in = (int.from_bytes(buf, byteorder="big") - 0xa) / 256

byteorder зависит от того какой байт вы посылаете первый. У меня первое восьмибитное слово данных - это старшие разряды кода угла. Поэтому указанно big. Если у вас первым посылается младший байт то указывайте little. - 0xa это отнимается то самое \n. 0xa = 0b1010. И деление на 256 нужно для того чтобы избавиться от нулей на конце , сдвигом числа вправо 8 раз (2**8), которые получились в результате формирования на ПЛИС 00001010 и вычитания 0xa. Upd. Добавил в код проверку длинны посылки.

→ Ссылка