我们正在尝试从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()
答案 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)。