树莓派Pico + Lora模块对等发送消息问题



我有一个2树莓派Picos与SX126X LoRa模块连接。我发现了一个很棒的库,并有乒乓球的例子工作没有问题。

我想发送一个json字符串从一个模块到另一个。sx.send(b'Ping')发送字符串b' ping '到远程设备。是的,包括b和单引号。如果我去掉b,它就失败了。

我想做的是保存一个json字符串到一个变量,然后在sx.send()命令中发送变量。这似乎是"b"是必需的,但我不知道如何将文字'Ping'与变量交换。

我尝试了一下,但是Micropython还不是我真正喜欢的东西。如果有人有什么主意,我可以试试。

如果您需要更多的细节,请告诉我。

谢谢大卫。

下面是main.py

的摘录
while True:
sx.send(b'Ping')
time.sleep(10)

SX1262.py

def send(self, data):
if not self.blocking:
return self._startTransmit(data)
else:
return self._transmit(data)

def _startTransmit(self, data):
if isinstance(data, bytes) or isinstance(data, bytearray):
pass
else:
return 0, ERR_INVALID_PACKET_TYPE

sx.send(b'Ping')中的b表示您正在发送文字字节,而不是字符串。这个符号是Python内部的。实际发送的是Ping。当其他设备接收到它时,它被存储为字节,当显示时:

>>>> packet = b'Ping'
>>>> packet
b'Ping'
>>>> len(packet)
4

您可以看到packet中只有4个字节。

发送一个JSON字符串,你可以这样做:

>>>> import json
>>>> p = '{"name": "Bob", "languages": ["Python", "Java"]}'
>>>> j = json.loads(p)
>>>> sx.send(bytes(json.dumps(j).encode()))

json.dumps(j)接受JSON对象j并将其转换为dumps()的字符串,在确保它具有编码(encode())之后,并将该字符串转换为字节。你可以发送。

另一方面,在设备2上,您可以只json.loads()字节使其成为JSON对象。

将值返回给变量很容易:

>>>> j['name']
'Bob'
>>>> j['languages']
['Python', 'Java']

最新更新