我想在Python中使用与Arduino的串行通信,以使电机根据指定的颜色移动。我在与 Arduino
pyserial
同步时遇到问题。
这是我的Python代码:
import serial
# Serial object for communication with Arduino
ser = serial.Serial(port='COM8', baudrate=9600, timeout=.1)
# write distance and radius to Arduino through Serial Communication
ser.write(str(length))
ser.write(bytes('#', "UTF-8"))
ser.write(bytes(radius))
ser.write(bytes('/', "UTF-8"))
这是我的 Arduino 代码:
void loop() {
while(Serial.available())
{
inChar = Serial.read();
if(inChar == '#'){
while(Serial.available()){
inChar = Serial.read();
if(inChar == '/'){
break;
}
inputStringR += inChar;
}break;
}
inputStringL += inChar;
}
这是我的错误:
Traceback (most recent call last):
File "d:\project gdevelop\belajar web1\clor.py", line 69, in <module>
ser.write(str(length))
File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python311\Lib\site-packages\serial\serialwin32.py", line 310, in write
data = to_bytes(data)
^^^^^^^^^^^^^^
File "C:\Users\LENOVO\AppData\Local\Programs\Python\Python311\Lib\site-packages\serial\serialutil.py", line 65, in to_bytes
raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: '267'
有人熟悉这个问题吗?
您需要对尝试通过串行发送的字符串进行编码。 根据Serial.py文档serial.write通过端口发送字节数据。
使用编码会将字符串数据转换为字节。
import serial
length = 5
radius = 2
encode_data= ""
# Serial object for communication with Arduino
ser = serial.Serial(port='COM8', baudrate=9600, timeout=.1)
# write distance and radius to Arduino through Serial Communication
ser.write(str(length).encode())
encode_data = "#"
ser.write(encode_data.encode())
ser.write(str(radius).encode())
encode_data = "/"
ser.write(encode_data.encode())