Skip to content

Latest commit

 

History

History
64 lines (48 loc) · 2.08 KB

protocol.md

File metadata and controls

64 lines (48 loc) · 2.08 KB

协议

传输:LoRa 模块 UART 透传,9600 8N1;帧为二进制、小端序。CRC-16/CCITT-FALSE(poly 0x1021,init 0xFFFF,xorout 0)。

数据帧(18 字节)

偏移 字段 类型 说明
0–1 sync bytes AA 55
2 version u8 1
3 type u8 1 = DATA
4 node_id u8 1–255
5–6 seq u16 0–65535,16 位
7 flags u8 bit0 低电量,bit1 传感器故障
8–9 temp_c_x100 i16 23.45°C → 2345
10–11 humidity_x100 u16 55.20% → 5520
12–13 soil_x100 u16 41.30% → 4130
14–15 battery_mv u16 3600
16–17 crc16 u16 对偏移 2–15 计算

示例(node=1, seq=258, 23.45°C, 55.2%, 41.3%, 3600mV):

AA 55 01 01 01 02 01 00 29 09 90 15 22 10 10 0E 17 C0

CRC 由代码生成;不要手算。

示例 ACK(node=1, seq=258):

AA 55 01 02 01 02 01 00 D6 24

ACK 帧(10 字节)

偏移 字段 类型 说明
0–1 sync bytes AA 55
2 version u8 1
3 type u8 2 = ACK
4 node_id u8 原节点
5–6 seq u16 原序号
7 status u8 0 = OK
8–9 crc16 u16 对偏移 2–7 计算

行为

  • 节点发 DATA,等 ACK ≤600ms;失败重试 ≤2 次,然后深睡。
  • 网关校验 CRC;新 (node_id, seq) 记录并回 ACK;重复帧仍回 ACK,但不重复入库。
  • 16 位序号:60 秒上报可连续约 45 天不回绕;长期部署可加 boot/session id。
  • 掉电/复位:节点用 RTC memory 保存 seq;长期断电后序号可能重置,网关可加时间窗/会话字段。

固件实现

  • Node:buildDataFrame、crc16_ccitt、waitForAck、深睡。
  • Gateway:有缓冲的状态机按 sync/type 找帧,CRC 通过后回 ACK 并打印 JSON。
  • 两端 CRC/字段顺序必须与 protocol.py 一致;改协议同步三处(Python、node、gateway)。

示例 JSON(网关输出)

{"node":1,"seq":258,"temp_c":23.45,"humidity_pct":55.20,"soil_pct":41.30,"battery_mv":3600}