2025-10-17 15:36:54 +08:00
2025-09-07 12:43:50 +08:00
2025-10-17 15:36:54 +08:00
2025-09-07 15:00:30 +08:00
2025-10-17 10:32:52 +08:00
2025-10-08 15:46:41 +08:00
md
2025-10-13 16:12:23 +08:00

pig-house-controller

LoRa通信协议约定

本项目中的LoRa通信采用自定义的帧格式以支持精确寻址和大数据包的自动分片与重组。所有数据包均由主控节点主动发起。

1. 物理帧结构

每个通过LoRa UART模块发送的物理数据包都遵循以下结构

字段 长度 (字节) 值 (Hex) 描述
帧头 (Header) 1 0xED 固定值,表示一个数据包的开始。
数据长度 (Length) 1 0x00-0xFF 总包数字段到数据块末尾的总字节数,不包含源地址。
目标地址 (DestAddr) 2 0x0000-0xFFFF 接收该数据包的设备地址。
总包数 (TotalChunks) 1 0x01-0xFF 表示当前消息被分成了几个包。0x01代表这是唯一的包。
当前包序号 (CurrentChunk) 1 0x00-0xFE 当前是第几个数据包从0开始计数
数据块 (ChunkData) N - 实际传输的数据片段。
源地址 (SourceAddr) 2 0x0000-0xFFFF 发送该数据包的设备地址,由硬件自动拼接。

示例:

发送一个数据为 [0x01, 0x02, 0x03] 的单包消息到地址 0x1234,发送方地址为 0x5678 ED 05 12 34 01 00 01 02 03 56 78

  • ED: 帧头
  • 05: 后续长度 (1+1+3 = 5)
  • 12 34: 目标地址
  • 01: 总包数 (共1包)
  • 00: 当前包序号 (第0包)
  • 01 02 03: 数据块
  • 56 78: 源地址

2. 数据分片 (Fragmentation)

  • LoRa模块的物理层限制单次发送的数据部分最大为240字节
  • 根据项目约定为自定义协议头总包数、当前包序号预留2字节地址由模块处理。
  • 因此,每个物理包中 数据块 (ChunkData) 的最大长度为 238 字节
  • send_packet 方法会自动处理分片逻辑。

3. 数据重组 (Reassembly)

  • receive_packet 方法会缓存收到的分片。
  • 当一个设备的所有分片都接收完毕后,receive_packet 会将它们自动重组成一个完整的消息,并向上层返回。
  • 由于通信是单向的(仅主控发送),接收端无需管理多个源地址的重组缓冲区。
Description
猪舍主控节点,根据上位机的指令控制当前猪舍内所有设备(传感器,阀门,电机等),并汇聚当前猪舍传感器数据统一上报
Readme 176 KiB
Languages
Python 100%