Python / Arduino串行通讯

时间:2019-06-18 14:41:52

标签: python serialization arduino

我们正在尝试从Python与Arduino进行通信,但是在从python写入串行端口时遇到问题

import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)

user_input = 'L'
while user_input != 'q':
    user_input = input('H = on, L = off, q = quit' )
    byte_command = user_input.encode()
    print(byte_command)
    ser.writelines(byte_command)   # This line gives us the error.
    time.sleep(0.5) # wait 0.5 seconds
print('q entered. Exiting the program')
ser.close()

以下是我们收到的错误:

返回len(数据) TypeError:“ int”类型的对象没有len()

2 个答案:

答案 0 :(得分:0)

writelines接受字符串列表,因此您不能使用它发送单个字符串。而是使用write

import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)

user_input = 'L'
while user_input != 'q':
    user_input = input('H = on, L = off, q = quit')
    byte_command = user_input.encode()
    print(byte_command)
    ser.write(byte_command)   # This line gives us the error.
    time.sleep(0.5)  # wait 0.5 seconds
print('q entered. Exiting the program')
ser.close()

答案 1 :(得分:0)

您的代码可在我的计算机上使用。我认为您尝试使用的功能(writelines不久前已添加到pyserial中,因此也许您正在使用过时的版本。

据我所知,无论如何,writelines都是从文件处理类继承的,您实际上并不需要将其用于尝试做的事情。其实我认为它甚至没有得到很好的记录

只需将其更改为:

ser.write(byte_command) 

如果愿意,可以查看您拥有和/或更新的pyserial版本。

要检查您的版本,请运行:pip3 list | grep serial

如果您没有3.4版,则可以更新为:pip3 install pyserial --upgrade

考虑writelines如何处理文件(例如,参见here),您的错误实际上可能与您拥有的核心Python有关(供参考,我正在运行Python 3.7.3)。