Как последовательно печатать данные из serial в python
Я пытаюсь распечатать данные, которые поступают через последовательный порт от Arduino, но я не могу этого сделать. Моя попытка кода такова:
import serial
import time
s = serial.Serial('/dev/tty.usbmodemfd141',9600)
while 1:
if s.inWaiting():
val = s.readline(s.inWaiting())
print val
Однако после того, как примерно 30 строк или около того выплюнуты, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "py_test.py", line 7, in <module>
val = s.readline(s.inWaiting())
File "build/bdist.macosx-10.8-intel/egg/serial/serialposix.py", line 460, in read
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
Я думаю, что неправильно использую inWaiting, но я не вижу, как использовать его по-другому.
3 ответов:
Вы пробовали обернуть строку чтения в блок try/except SerialException? Затем вы можете просто передать исключение SerialException. Это может быть проблема с последовательным драйвером, сообщающим данные в буфере приема, когда их нет, и в этом случае ваш код будет просто продолжать работать. Не очень хорошее решение, но оно может привести вас к правильному решению.
try: s.read(s.inWaiting()) except serial.serialutil.SerialException: pass # or maybe print s.inWaiting() to identify out how many chars the driver thinks there is
Я полагаю, что вы хотите использовать функцию read (), а не readline (). Вы получаете количество символов в буфере, они не обязательно заканчиваются новой строкой
Ваш цикл становится:
while 1: if s.inWaiting(): val = s.read(s.inWaiting()) print val
Если вы хотите просто распечатать данные, поступающие из последовательно подключенного устройства.вы можете просто сделайте это с помощью readline(). сначала откройте порт с помощью open () , Затем вам нужно использовать readline().
Примечание: /dev / ttyUSB0 - номер порта для linux, а com0-windows
Вот код
import serial BAUDRATE = 115200 device_name = "ttyUSB0" tty = device_name s = serial.Serial("/dev/" + tty, baudrate=BAUDRATE) s.open() print s try: while True: line = s.readline() //after this you can give the sleep time also as time.sleep(1) before that import time module. print line finally: s.close()
Comments