Как последовательно печатать данные из 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, но я не вижу, как использовать его по-другому.

633   3  

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

    Ничего не найдено.