更改 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
我想知道 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