Как прочитать строку целых чисел, полученных на Python из последовательного Arduino

Я посылаю список значений (например, 80,539,345,677) из Arduino в приложение Python, запущенное на моем RPi. Мне не удалось извлечь значения и назначить их для соответствующих переменных или объектов в приложении.

Вот мой код:

def read_values():
  #if DEBUG:
  print "reading arduino data"
  ser = serial.Serial('/dev/ttyUSB0', 9600)
  print "receiving arduino data"
  ser_line = ser.readline()
  print ser_line
  ser.close()
  ser_list = [int(x) for x in ser_line.split(',')]

  ambientLight = ser_list[1]

  print ambientLight

  return ambientLight

Что я получаю от Python:

reading arduino data
receiving arduino data
80,477,82,2

Traceback (most recent call last):
  File "serialXivelyTest4c.py", line 77, in <module>
run()

File "serialXivelyTest4c.py", line 63, in run
ambientLight = read_values()
  File "serialXivelyTest4c.py", line 27, in read_values
ser_list = [int(x) for x in ser_line.split(',')]
ValueError: invalid literal for int() with base 10: '8254\r80'

Вы можете видеть, что я получаю значения, но они усекаются. Может кто-нибудь, пожалуйста, скажите мне, где я иду не так здесь. Спасибо.

1 ответ

Я никогда не использовал Arduino, но вот как я читаю из сериала с другой платой. Я использовал серийный.

import streamUtils as su  # see below

ser = su.connectPort("/dev/tty.SLAB_USBtoUART")  # make sure you have the right port name


data = ""
while True:
    try:
        data = data + ser.read(1)       # read one, blocking
        time.sleep(1)                   # give it time to put more in waiting
        n = ser.inWaiting()             # look if there is more
        if n:
            data = data + ser.read(n)   # get as much as possible
            # I needed to save the data until I had complete
            # output.  

            if data:
                # make sure you have the whole line and format
        else:
            break
    except serial.SerialException:
        sys.stderr.write("Waiting for %s to be available" % (ser.name))
        sys.exit(1)

sys.stderr.write("Closing port\n")
ser.close()

Вот streamUtils.connectPort():

import serial

def connectPort(portname):
    # connect to serial port
    ser = serial.Serial()
    ser.port = portname
    ser.baudrate = 9600
    ser.parity = serial.PARITY_NONE
    ser.stopbits = serial.STOPBITS_ONE
    ser.bytesize = serial.EIGHTBITS
    ser.timeout = 15            # need some value for timeout so the read will end

    try:
        ser.open()
    except serial.SerialException:
        sys.stderr.write("Could not open serial port %s\n" % (ser.name))
        sys.exit(1)

    return (ser)
Другие вопросы по тегам