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

Posted

技术标签:

【中文标题】GNU/Linux - Python3 - PySerial:如何通过 USB 连接发送数据?【英文标题】:GNU/Linux - Python3 - PySerial: How to send data over USB connection? 【发布时间】:2016-08-12 14:52:51 【问题描述】:

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

我必须通过 USB 端口向我的 IC 的独立 ATMega32 发送数据。一个可能的 sn-p 代码:

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

嗯。阅读有关方法 write 的文档(类 serial.Serial - http://pyserial.readthedocs.io/en/latest/pyserial_api.html)我明白了:

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

    我的第一个问题:我不明白如何发送我的 float 和 int 数据。如何将它们转换成字符串?

    我的第二个问题:我想一起发送数据,像这样的唯一值:

    99.7F100S56.7T

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

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

【问题讨论】:

你可以简单地发送data.write("99.7F100S56.7T") 感谢@njzk2:对不起,我的解释很糟糕,但变量“准实时”每 0.5 秒变化一次。我的 sn-p 代码只是一个非常简单的例子 【参考方案1】:
    使用string function 将float、int 或大多数其他非字符串转换为字符串,例如在你的情况下

str(first_data)

将输出“99.7”(字符串)。

    使用string format method,例如

'0F1S2T'.format(first_data, second_data, third_data)

将输出“99.7F100S56.7T”

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

【讨论】:

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

以上是关于GNU/Linux - Python3 - PySerial:如何通过 USB 连接发送数据?的主要内容,如果未能解决你的问题,请参考以下文章

简述gnu与linux的关系

linux---第一周

Waydroid安装问题(依赖: python3-gbinder 但是它将不会被安装)

Waydroid安装问题(依赖: python3-gbinder 但是它将不会被安装)

GNULinux和GNU/Linux之间的关系

GNU是啥?跟LINUX有啥关系?