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

时间:2016-08-12 14:52:51

标签: python linux python-3.x pyserial

我有2个关于Python3和PySerial(串行模块)的问题。

我必须通过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)

现在,如果我尝试使用“ValueToWrite = firts_data”发送“first_data”,则会出现此错误:

TypeError: 'float' object is not iterable

好。阅读有关方法(类 serial.Serial - http://pyserial.readthedocs.io/en/latest/pyserial_api.html)的文档,我看到了:

  

将字节数据写入端口。这应该是字节类型(或兼容,如bytearray或memoryview)。必须对Unicode字符串进行编码(例如'hello'.encode('utf-8')。

  1. 我的第一个问题:我不明白如何发送我的float和int数据。如何将它们转换为字符串?
  2. 我的第二个问题:我想一起发送数据,这是一个独特的价值:

    99.7F100S56.7T

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

    如何使用pyserial在Python3中执行此操作?

1 个答案:

答案 0 :(得分:1)

  1. 使用string function将float,int或大多数其他非字符串转换为字符串,例如在你的情况下
  2. str(first_data)

    会输出'99 .7'(字符串)。

    1. 使用string format method,例如
    2. '{0}F{1}S{2}T'.format(first_data, second_data, third_data)

      会输出'99 .7F100S56.7T'

      您可以将这些字符串用作serial.send的参数

相关问题