如何将字节字面量转为字符串变量适配LoRa模块的send()方法?
解决SX126X LoRa模块发送JSON字符串的问题
核心原因
从你提供的SX1262.py代码可以看到,_startTransmit方法要求传入的data必须是bytes或bytearray类型,直接传普通字符串会触发ERR_INVALID_PACKET_TYPE错误,这就是去掉b前缀后发送失败的根本原因。
发送端实现
要发送JSON字符串,只需完成JSON序列化+字节编码两步:
- 将Python字典(或其他可序列化数据)用
json.dumps()转换为JSON格式的字符串; - 调用字符串的
encode()方法(默认UTF-8编码),将其转为bytes类型后传入sx.send()。
修改后的main.py示例:
import json import time # 定义要发送的JSON数据(以字典为例) sensor_data = { "device_id": "Pico_TX", "temperature": 25.6, "status": "active" } while True: # 序列化并编码为字节 payload = json.dumps(sensor_data).encode('utf-8') sx.send(payload) time.sleep(10)
接收端解析
接收LoRa数据时会得到bytes类型,需要反向操作解析为JSON:
- 用
decode()将字节转为字符串; - 用
json.loads()将字符串解析为Python字典。
接收端示例代码:
import json # 假设接收逻辑(根据库的实际接收方法调整) while True: received_bytes = sx.receive() # 调用库的接收方法获取字节数据 if received_bytes: # 解析为JSON json_str = received_bytes.decode('utf-8') parsed_data = json.loads(json_str) print("Received data:", parsed_data)
内容的提问来源于stack exchange,提问作者David P
相关产品推荐
相关产品推荐

