更改 PySerial 或其他模块

Change PySerial or other module

我想知道 python 中是否存在任何其他模块可以通过串行通信而不是 PySerial。

我想知道这个是因为,PySerial 只与 "string" 通信,而且我有一个微控制器可以从 BeagleBone Black 接收数据,我不应该在这个微控制器上做一个算法来将字符串更改为 int或者bytes,因为会花很多的处理,一个string上的每个字符占用一个byte,在这个micro上会占用很多。

说到这里,我想从 BeagleBone 端以 int/hex 或二进制格式而不是字符串发送数据,其他解决方案可以更改 PySerial 模块来执行此操作。

我们将不胜感激任何帮助。

此致, 大卫

您使用的是什么版本的 PySerial 和 Python?您可能只需要升级。

根据PySerial documentation,当前版本本地写入字节:

write(data)

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

我用 Python 3.4.2 检查了 PySerial 3.2.1,我可以确认它按要求正确写入字节。

Struct Lib 解决了我的问题。

示例(只发送一个字节中的十进制 170):

十进制: ser.write(170) 不工作

十六进制: ser.write(AA) 或 ser.write(0xAA) 不起作用

字符串: ser.write("170") 有 3 个字节

String: ser.write('AA') 有 2 个字节,ser.write('0xAA') 有 4 个字节

struct.pack('B',170) => '\xAA' (See struct lib documentation)

16进制字符串 ser.write('\xAA')只有1个字节

在接收端使用:

data_output = ser.read(1)
struct.unpack('B', data_output)

输出: 170