I'm trying to print the data that comes across the serial from an Arduino but I am unable to do so. My attempted code is this:
import serial import time s = serial.Serial('/dev/tty.usbmodemfd141',9600) while 1: if s.inWaiting(): val = s.readline(s.inWaiting()) print val
Yet after about 30 lines or so are spit out I get the following error message:
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?)
I imagine I am using inWaiting incorrectly, but I do not see how to use it any other way.
Have you tried wrapping the readline in a try/except SerialException block? You could then just pass on the SerialException. It could be an issue with the serial driver reporting data in the receive buffer when there is not any, in which case your code will just keep running. Not a great fix, but it may lead you to the correct solution.
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
if you want to simply print the data coming out of the serially connected device.you can simply do it by using readline(). first open the port by using open() then you need to use the readline().
note:/dev/ttyUSB0 is a port number for linux and com0 is windows
here is the code
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()