与微控制器发送和接收字节

-1 投票
1 回答
513 浏览
提问于 2025-04-18 18:30

我正在使用Python 3向一个微控制器发送字节数据,然后再接收这些数据(并在我的Python监视器中打印出来)。这些数据经过微控制器时,似乎在这个过程中发生了一些奇怪的行为。例如,当我执行:

a = b'\7'
op(board).send(a) #This is syntax specific to the program that runs Python

print(received) 

它会如预期那样打印出 b'7'。但是,当我尝试相同的代码,但将 a = b'8' 时,它却打印出:b'9265',我完全不知道这之间有什么区别。

同样,对于任何有使用Arduino和Python经验的人,有没有什么解释可以让我更容易地将串行数据发送到/从Arduino?似乎我只能发送 bytes 对象,但我不确定这些在Arduino中是如何被解释的。看起来字节值被转换成它的 utf-8 “符号”值(也就是作为字符串)然后发送到Arduino,而Arduino将其作为二进制值读取。

然而,当我将这个读取的值发送回Python时,它会发送一个带有十进制值的 byte 对象。既然是这样,我可能会接收到一串值(例如来自模拟引脚),那么将这些字节值快速解码为十进制的最佳方法是什么呢?

换句话说,这样做是可以的,只是我必须对每个值调用 chr(val)。如果我传入值 b'151'(意味着我想要十进制值 151),Arduino回显 b'495349',而使用 int(chr(val)) 是不行的。

1 个回答

0

看起来你在使用字节字面量的时候搞错了。可以去看看这个文档。下面是一些例子:

>>> list(b'\7')
[7]
>>> list(b'7')
[55]              # character '7'
>>> list(b'8')
[56]              # character '8'
>>> list(b'\8')
[92, 56]          # characters '\\' and '8' because \8 can't be parsed as octal number
>>> list(b'151')
[49, 53, 49]      # characters '1', '5', '1'

撰写回答