1. 项目概述与核心功能
这个开源项目实现了一套基于4G和Lora的远程水质监测系统,核心功能是通过MQTT协议将COD(化学需氧量)等水质参数实时上传至云端服务器。作为一名长期从事物联网开发的工程师,我认为这种低功耗、远距离传输的方案特别适合分散式水质监测场景,比如河流、湖泊或工业排水口的在线监测。
系统采用模块化设计,主要由三部分组成:
- 传感器端:通过485总线采集COD、温度、湿度等数据
- 传输模块:4G模组负责MQTT协议通信,Lora用于本地组网
- 云端服务:接收并处理设备上报的JSON格式数据
实测在典型配置下(10秒间隔上报),每月流量消耗约15MB,完全满足运营商NB-IoT套餐的用量要求。下面我将从硬件连接、软件配置到云端对接,详细拆解整个实现过程。
2. 硬件准备与接线规范
2.1 设备接口说明
开发板提供以下关键接口:
- 电源输入:5-24V宽电压设计,可通过DC座或端子座供电
- 485总线:A/B端子接传感器,支持Modbus-RTU协议
- 天线接口:ANT1接4G天线(必备),ANT2接GPS天线(可选)
- Type-C接口:用于代码烧录和调试
实际部署中发现,使用防水型SMA转接线可大幅降低天线接口的氧化风险,特别是在潮湿环境中。
2.2 典型接线方案
以常见的COD传感器为例:
电源接法:
- 正极接端子座"+"
- 负极接端子座"-"
- 建议并联1000μF电容应对电压波动
传感器接法:
- 485-A接传感器A端
- 485-B接传感器B端
- 线长超过3米时建议使用双绞屏蔽线
天线安装:
- 4G天线垂直安装(增益≥3dBi)
- GPS天线需无金属遮挡(如选用)
3. 软件配置详解
3.1 代码烧录流程
连接Type-C线后,电脑识别出1.6MB U盘
格式化注意事项:
- 出现0MB盘符时才需要格式化
- 必须选择FAT32格式
- 分配单元大小设为4096字节
文件拷贝:
cp ./Code/main.lua /Volumes/SHINEBLINK/实测在Windows资源管理器直接拖拽也可能导致文件损坏,建议使用命令行或保证安全弹出。
3.2 关键参数配置解析
系统工作模式(Part1)
SysMode = 1 -- 必须设为1启用MQTT模式 SysGpsUse = "NO_GPS" -- 除非使用定制硬件 SysWorkInterval = 10 -- 单位秒,建议10-300流量消耗计算公式:
单次数据包大小 ≈ 100字节 日流量 ≈ 100 * (86400/Interval)MQTT服务器配置(Part3)
天翼云典型配置:
MqttServerAddr = "mqtt.ctwing.cn" MqttClientID = "15589964DTU01" -- 产品ID+设备编号 MqttUserName = "ShineBlink" -- 实际替换为平台账号其他云服务商对比:
| 服务商 | 地址格式 | 端口 | 认证方式 |
|---|---|---|---|
| 天翼云 | mqtt.ctwing.cn | 1883 | 一型一密 |
| 阿里云 | ${ProductKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com | 1883 | 三元组 |
| EMQX | IP或域名 | 1883 | 用户名密码 |
传感器参数(Part5)
MbAddr = 0x01 -- 需与传感器拨码一致 MbBaudRate = "BAUDRATE_9600" -- 必须匹配传感器规格4. 低功耗优化方案
4.1 硬件改造
外接BatteryFriend模块可实现:
- 休眠电流:≤20μA
- 唤醒时间:约500ms
- 支持太阳能充电管理
典型接线:
VBAT → 3.7V锂电池 SOLAR → 6V太阳能板4.2 软件配置
SysSleepEn = 1 -- 启用休眠 SysWorkInterval = 300 -- 5分钟间隔实测数据:
| 模式 | 平均电流 | 2000mAh电池续航 |
|---|---|---|
| 常开模式 | 45mA | ≈44小时 |
| 低功耗模式 | 0.8mA | ≈100天 |
注意:启用休眠后,LED指示灯仅在唤醒时短暂亮起,这是正常现象。
5. 云端对接实战
5.1 天翼云配置步骤
创建产品:
- 接入协议选MQTT
- 数据格式选JSON
添加设备:
- 设备编号需与MqttClientID后段一致
- 记录特征串作为密码
定义物模型:
{ "properties": { "Temp": {"type": "float"}, "Humi": {"type": "float"}, "Cod": {"type": "float"} } }
5.2 数据验证方法
使用MQTT.fx工具订阅主题:
订阅主题: $device_recv/15589964DTU01 消息示例: {"Uid":"Test01","Temp":25.2,"Humi":76.7,"Cod":128.5}常见问题排查:
- 连接超时 → 检查APN设置(移动卡默认CMNET)
- 认证失败 → 核对ClientID/特征串
- 数据未到达 → 检查PubTopic命名规则
6. 扩展应用场景
6.1 多传感器组网
通过修改Modbus地址实现:
-- 主设备 MbAddr = 0x01 -- 新增从设备 MbAddr = 0x02 -- 需配合传感器拨码6.2 数据持久化方案
推荐InfluxDB+Telegraf架构:
[[inputs.mqtt_consumer]] servers = ["tcp://localhost:1883"] topics = ["$device_send"] data_format = "json"6.3 报警功能实现
规则引擎示例(Node-RED):
if (msg.payload.Cod > 200) { sendEmail("水质超标警报", `当前COD值:${msg.payload.Cod}`); }7. 常见问题解决方案
7.1 设备无法上线
排查步骤:
- 检查SIM卡状态(LED是否变红)
- 测量天线阻抗(正常约50Ω)
- 尝试更换基站位置
7.2 数据上传异常
典型故障:
- 数据字段缺失 → 检查JSON键名大小写
- 数值异常 → 校验Modbus寄存器映射
- 间隔不稳定 → 关闭看门狗功能
7.3 电源管理问题
异常现象与对策:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 频繁重启 | 电压跌落 | 增加储能电容 |
| 休眠后无法唤醒 | 唤醒电路故障 | 检查BatteryFriend接线 |
| 电流波动大 | 4G模组发射功率变化 | 添加稳压模块 |
在实际部署中,建议先用USB供电测试所有功能正常后再切换至电池供电。遇到信号弱的情况,可以尝试调整天线位置或改用高增益天线。对于需要长期户外工作的设备,防水防尘处理也必不可少——我通常使用704硅胶密封接口部位,再用热缩管包裹天线接头。