GNU/Linux - Python3 - PySerial:如何通过USB连接发送数据?

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').

  1. 我的第一个问题:我不知道如何把我的浮动和int数据。如何将它们转换为字符串?
  2. 我的第二个问题:我想发送的数据都在一起,这样一个独特的价值:

    99.7F100S56.7T

在这种情况下,使用ATMEGA的固件,我可以拆分并且当遇到第一数据的“F”字符,第二数据的“S”字符等等时,更新相应变量中的数据。

如何在Python3中使用pyserial做到这一点?

+0

你大概可以简单地发送'data.write(“99.7F100S56 .7T“)' – njzk2

+0

Thanks @ njzk2:抱歉我的糟糕解释,但变量在”准实时“变化,每0.5秒钟一次。我的代码片段只是一个非常简单的例子 – mikilinux

  1. 通过使用string function(例如,)将float,int或大多数其他非字符串转换为字符串。你的情况

str(first_data)

将输出'99 0.7' (一个字符串)。

  1. 通过使用string format method,例如,

'{0}F{1}S{2}T'.format(first_data, second_data, third_data)

将输出99 .7F100S56.7T”

这些字符串可以作为参数使用serial.send

+0

Thanks @madeddie。在接下来的几个小时内,我会尝试你的建议。 – mikilinux

+0

是的,它像一种享受。 我用你的建议,然后我在固件中使用“strtok(char * str,const char delim)-like C”函数来分隔每个字段。 – mikilinux