我有一个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']