GNU/Linux - Python3 - PySerial:如何通过USB连接发送数据?
问题描述:
我有2个关于Python3和PySerial(串行模块)的问题。GNU/Linux - Python3 - PySerial:如何通过USB连接发送数据?
我必须通过USB端口将数据发送到我的IC的独立ATMega32。一个可能的代码片段:
import serial
data=serial.Serial(port, speed)
first_data=99.7 # Float point data.
second_data=100 # Only int data like 10, 345, 2341 and so on.
third_data=56.7 # Float data
ValueToWrite=????? # How to convert it?
send=data.write(ValueToWrite)
现在,如果我尝试发送 “first_data” 与 “ValueToWrite = firts_data” 我有这样的错误:
TypeError: 'float' object is not iterable
嘛。阅读文档中关于方法写(类serial.Serial - http://pyserial.readthedocs.io/en/latest/pyserial_api.html)我看到:
Write the bytes data to the port. This should be of type bytes (or compatible such as bytearray or memoryview). Unicode strings must be encoded (e.g. 'hello'.encode('utf-8').
- 我的第一个问题:我不知道如何把我的浮动和int数据。如何将它们转换为字符串?
-
我的第二个问题:我想发送的数据都在一起,这样一个独特的价值:
99.7F100S56.7T
在这种情况下,使用ATMEGA的固件,我可以拆分并且当遇到第一数据的“F”字符,第二数据的“S”字符等等时,更新相应变量中的数据。
如何在Python3中使用pyserial做到这一点?
答
- 通过使用string function(例如,)将float,int或大多数其他非字符串转换为字符串。你的情况
str(first_data)
将输出'99 0.7' (一个字符串)。
- 通过使用string format method,例如,
'{0}F{1}S{2}T'.format(first_data, second_data, third_data)
将输出99 .7F100S56.7T”
这些字符串可以作为参数使用serial.send
你大概可以简单地发送'data.write(“99.7F100S56 .7T“)' – njzk2
Thanks @ njzk2:抱歉我的糟糕解释,但变量在”准实时“变化,每0.5秒钟一次。我的代码片段只是一个非常简单的例子 – mikilinux