低功耗 LoRa 无线传感节点与网关:嵌入式固件 + 通信协议 + Python 网络仿真 + 硬件/PCB 设计。
这是一个毕业设计项目,面向微电子、通信工程、嵌入式三个方向: 模拟真实 LoRa 链路的 PDR/RSSI/SNR/时延/功耗,提供 ESP32 + E32 模块的固件骨架,以及传感器前端/电源/PCB 的设计文档。
现在的状态:网络仿真可运行;19 个测试;节点/网关固件可编译(CI 通过);硬件未实测;论文未写。
在电池供电、远距离、低数据率的场景(林业/农业/环境监测)里,如何用 LoRa 把传感器数据可靠地送到网关,并在丢包、重传、碰撞、功耗之间做取舍?
项目用可复现的仿真回答:
- 不同距离/扩频因子下的 RSSI、SNR、PDR。
- 重传与碰撞对时延和投递率的影响。
- 占空比、平均电流、理论电池寿命。
- 与硬件固件一致的二进制帧协议和 CRC。
flowchart LR
S[Sensor + analog front-end] --> M[MCU / ESP32]
M --> R[E32 LoRa UART module]
R -. LoRa .-> G[Gateway E32 + ESP32]
G --> U[USB serial / PC]
U --> P[Python gateway/plots]
节点周期采样 → 打包 → LoRa 发送 → 网关校验 CRC → ACK → 重传;节点大部分时间深睡。
py -3.12 -m venv .venv
.venv\Scripts\python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -e ".[dev]"
# 10 个节点、24 小时、60 秒上报
.venv\Scripts\python -m lora_sim simulate --nodes 10 --hours 24 --interval 60 --distance 1000 --sf 7 --out output/sim.csv --summary output/sim.json
# SF × 距离扫描
.venv\Scripts\python -m lora_sim sweep --nodes 5 --hours 6 --sf 7 9 12 --distances 1000 5000 10000 --out output/sweep.csv --summary output/sweep.json
# 测试
.venv\Scripts\python -m pytest -q.venv\Scripts\python -m lora_sim link-budget --distance 1000 --sweep-sf确定性估算:FSPL + 对数距离损耗,输出 RSSI、SNR、灵敏度、链路余量、最大距离、空中时间和占空比;--json 输出机器可读结果。
10 节点、24 小时、60 秒上报、2 次重传、2000mAh 电池:
| 场景 | PDR | 平均时延 | 平均 RSSI | 电池寿命 | 占空比 |
|---|---|---|---|---|---|
| SF7 / 1 km | 1.000 | 0.00s | -98.3 dBm | 636d | 0.077% |
| SF12 / 1 km | 1.000 | 0.00s | -98.3 dBm | 78d | 0.853% |
| SF7 / 10 km | 0.662 | 1.59s | -125.2 dBm | 329d | 0.164% |
| SF12 / 10 km | 1.000 | 0.08s | -125.3 dBm | 76d | 0.885% |
解释:
- 1 km:SF7/SF12 都能全收;SF7 电池寿命高一个数量级。
- 10 km:SF7 重传 2 次仍只有 0.662 PDR;SF12 靠更高灵敏度做到 1.000,但占空比/功耗显著上升。
- 取舍:近距离优先 SF7;远距离优先 SF12 或中继;没有“全都好”的参数。
这是仿真结果,不是实测;实物需要复测 RSSI/SNR/PDR/功耗。
5 节点、6 小时、60 秒上报、2 次重传:
| SF | 1 km PDR | 5 km PDR | 10 km PDR | 10 km 时延 | 10 km 电池 |
|---|---|---|---|---|---|
| SF7 | 1.000 | 0.998 | 0.672 | 1.60s | 331d |
| SF9 | 1.000 | 1.000 | 0.970 | 0.70s | 255d |
| SF12 | 1.000 | 1.000 | 1.000 | 0.04s | 77d |
- SF7 在 10 km 靠重传也只能到 0.672;SF9 是折中;SF12 最稳但电池寿命掉到 ~77 天。
- 扫描窗口/节点数与 24h 结果不同,PDR 会有小幅差异;用同一配置复现。
firmware/node:ESP32 + E32 UART,ADC 采样、二进制帧、CRC16、ACK 等待、重传、深睡。firmware/gateway:ESP32 + E32 UART,收帧、CRC 校验、ACK、USB JSON 输出。- 编译:
pio run -d firmware/node
pio run -d firmware/gatewayP0 用现成 E32 模块降低射频门槛;下一版可换 SX1276/RadioLib 或自制 RF 前端。
- 传感器前端:土壤湿度/温湿度、运放缓冲与 RC 滤波、ADC。
- 电源:18650 + 充电/保护 + LDO/Buck + MOSFET 给 LoRa 模块断电。
- PCB:2 层、地平面、50Ω 天线走线、模块净空、ESD/去耦、测试点。
- 详见
docs/hardware.md、docs/bom.md、docs/bringup.md。
| 路径 | 内容 |
|---|---|
src/lora_sim/ |
协议、信道、节点、网关、仿真、链路预算、扫描、CLI |
firmware/node/ |
节点固件(ESP32 + E32) |
firmware/gateway/ |
网关固件(ESP32 + E32 + USB) |
tests/ |
协议/信道/网关/仿真/链路预算/扫描测试 |
docs/ |
架构、协议、硬件、BOM、bring-up、评估、论文提纲、里程碑、安全 |
- 通信:LoRa 参数、路径损耗、RSSI/SNR、PDR、重传、碰撞、占空比。
- 嵌入式:ADC/UART/CRC/状态机/深睡/重传。
- 微电子:传感器模拟前端、电源树、PCB/射频布局、功耗预算。
- 论文可以写“系统设计 + 仿真 + 实物验证 + 功耗/距离实验”。
- 2027:仿真/协议/固件骨架;画 PCB;买 E32/传感器。
- 2028:实物节点 + 网关;距离/功耗实验;用户/场景测试。
- 2029:论文/答辩;扩展多跳/太阳能/边缘计算。
MIT