我有这个代码从Arduino串行获取数据。我希望能够对即将发布的数据执行数学运算,然后将数据发送到服务器,但是将数据更改为TypeError中的数据。我试图使这个代码主要在Python3.6中工作。
import socket
import serial
from time import sleep
IP = "192.168.1.1"
PORT = 3553
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
print(ser.name)
while True:
data = str(str(ser.read(7))[2:9].replace("r","").replace("n","").replace("\\","")).split(",")
# data = str(ser.read(7))
line = ser.readline()
clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
clientSock.sendto(data[0], (IP, PORT))
这是错误。
$ sudo python3.6 udp_client.py
/dev/ttyUSB0
Traceback (most recent call last):
File "udp_client.py", line 18, in <module>
clientSock.sendto(data[0], (IP, PORT))
TypeError: a bytes-like object is required, not 'str'
有人说这可能是this link的副本,但投票最多的答案只适用于Python2,之前我已经看过这个问题,而且它的答案都没有解决我的问题。
答案 0 :(得分:0)
socket
只能发送bytes-like
个对象。您的数据为str
,因此您应该通过某种方式将其编码为bytes
尝试替换此行中的第一个str
:
data = str(str(ser.read(7))...
进入bytes
再次运行。
data = bytes(str(ser.read(7))...
这使用UTF-8
作为默认编码类型。