Серийный читать хорошо в Putty, но не в оболочке Python - PullRequest
0 голосов
/ 20 ноября 2018

Код, который я посылаю команде на последовательное устройство и возвращает строку <LF>Mycode<CR> или в Python \nMYCODE\r - это формат, в котором я посылаю команду, я могу видеть входящие данные в putty, но не в Python?Поступающие данные также начинаются с <LF> и заканчиваются <CR>.Как мне передать эти данные в Python?

Мой код:

import time
import serial
import I2C_LCD_driver

mylcd = I2C_LCD_driver.lcd()

print ("Starting Program")
ser = serial.Serial("/dev/ttyUSB0", baudrate=9600,
                    parity=serial.PARITY_NONE,
                    stopbits=serial.STOPBITS_ONE,
                    bytesize=serial.EIGHTBITS
                    )
time.sleep(1)
try:
    ser.write("\nW\r".encode('utf-8'))
    print ("data echo mode enabled")
    while True:
        if ser.inWaiting() > 0:
            data = ser.readline()
            print ("Weight", data.decode(), "kg")
            mylcd.lcd_display_string("Weight" + data.decode(), 1)




except KeyboardInterrupt:
    print ("Exiting Program")

except:
    print ("Error Occurs, Exiting Program")

finally:
    ser.close()
    pass

1 Ответ

0 голосов
/ 20 ноября 2018

Похоже, проблема в вашем звонке на ser.readline(). pyserial API утверждает, что он использует io.IOBase.readline, который читает символов до символа новой строки (\n) .Поскольку ваши данные начинаются с \n, перед ним нет символов, и, следовательно, вызов readline будет читать нулевые байты из буфера и возвращать пустую строку.

Вы должны либо переместить \nдо конца каждого сообщения или используйте вызов read(n) напрямую, чтобы прочитать n байт из соединения.

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