1. 项目概述:当气象监测遇上物联网
风速监测在农业、风电、建筑等领域都是刚需,但传统方案要么布线麻烦,要么数据传输距离受限。这个开源项目用4G+Lora的组合拳解决了这个痛点——Lora负责本地组网采集传感器数据,4G模块负责把数据上传到云端,实现远程监控。
我去年给一个农场部署过类似系统,他们需要在5平方公里范围内监测十几个点的风速,有线方案光布线就得花十几万。改用Lora+4G方案后,硬件成本直接降到原来的1/3,关键是部署灵活,传感器位置随时可调。
2. 硬件选型与核心组件解析
2.1 4G模块的选型要点
市面上的4G模块主要分两类:
- Cat1模块(如EC20):适合中等数据量,功耗相对低
- NB-IoT模块(如BC35):超低功耗但传输速率慢
经过实测对比,风速监测这种小数据包(每秒1-2条数据)的场景,NB-IoT的功耗优势更明显。以BC35-G为例,在PSM模式下平均电流只有0.5mA,一节18650电池能撑半年。
关键提示:购买4G模块时一定要确认支持频段。国内移动主要用Band3/8,联通Band1/3,电信Band5。我踩过的坑是买了欧洲版的EC20,结果Band20在国内根本用不了。
2.2 Lora组网方案设计
项目采用SX1278芯片的方案,实测传输距离:
- 城市环境:1-2km(有建筑物遮挡)
- 开阔地带:5km+
组网拓扑建议用星型结构,1个网关带多个节点。网关用ESP32+SX1278的组合性价比最高,一个网关成本约200元,能带30个节点。
3. 4G接入MQTT的完整实现流程
3.1 云服务选型对比
测试过三大主流平台:
- 阿里云IoT:功能全但配置复杂
- 腾讯云IoT:文档友好但价格略高
- 自建EMQX:最灵活但需要公网服务器
最终选择阿里云主要是考虑:
- 设备管理界面完善
- 支持物模型解析
- 提供免费额度(每月100万条消息)
3.2 AT指令实战示例
以EC20模块连接阿里云为例,关键AT指令序列:
AT+QMTCFG="aliauth",0,"设备三元组" AT+QMTOPEN=0,"iot-as-mqtt.cn-shanghai.aliyuncs.com",1883 AT+QMTCONN=0,"client123"常见坑点:
- 三元组中的ProductKey要注意大小写
- 连接超时建议设30秒以上(AT+QMTTIMEOUT=30)
- 心跳间隔建议120秒(AT+QMTCFG="keepalive",0,120)
3.3 数据上传格式优化
原始风速数据建议转成JSON格式:
{ "id": "NODE01", "wind_speed": 3.2, "unit": "m/s", "timestamp": 1659347200 }通过物模型功能可以自动解析为:
AT+QMTPUB=0,0,0,0,"/sys/a1b2c3d4e5/device1/thing/event/property/post",'{ "params": { "wind_speed": 3.2 } }'4. 低功耗设计实战技巧
4.1 硬件级省电方案
实测数据(风速采样间隔10秒):
- 持续工作模式:12mA平均电流
- 定时唤醒模式:0.8mA平均电流
关键配置:
- MCU进入STOP模式
- 4G模块启用PSM模式
- Lora模块用休眠引脚控制
4.2 软件优化策略
- 数据缓存:本地存储100条数据,网络恢复后批量上传
- 动态心跳:根据信号质量调整心跳间隔(弱信号时延长)
- 差分上传:仅当风速变化超过0.5m/s时才上传
5. 常见问题排查手册
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 模块无法注册网络 | SIM卡未激活/APN错误 | AT+CGDCONT=1,"IP","cmnet" |
| MQTT频繁断开 | 心跳间隔太短 | AT+QMTCFG="keepalive",0,120 |
| 数据上传失败 | Topic格式错误 | 检查物模型Topic格式 |
| Lora通信中断 | 频点冲突 | 修改AT+CFREQ=470000000 |
我在部署时遇到过最棘手的问题是模块随机掉线,后来发现是TCP缓冲区溢出导致的。解决方法是在发送数据后添加500ms延时:
AT+QMTPSEND=0,10 delay(500)6. 项目进阶方向
- 数据可视化:用Node-RED搭建风速热力图
- 预警功能:设置风速阈值触发短信报警
- 边缘计算:在网关节点头做数据滤波(去除异常值)
有个实用的技巧是在ESP32网关上加个SD卡模块,这样即使网络中断也能本地存储数据。我测试过32GB的卡可以存储超过1年的风速数据(按1分钟一条计算)。