1. 项目背景与核心价值
去年在参与一个农业物联网项目时,客户突然提出需要实时监测鱼塘的化学需氧量(COD)指标。传统水质监测方案要么价格昂贵,要么需要复杂的开发工作,这让我开始寻找更轻量化的解决方案。经过多次尝试,最终基于ShineBlink物联网平台实现了这个远程COD监测器,整套方案从硬件组装到云端对接仅用了3天时间。
这个开源项目的核心价值在于:
- 硬件成本控制在200元以内(不含传感器)
- 采用免开发模式,无需编写云端代码
- 微信小程序直接查看数据,零学习成本
- 支持4G/NB-IoT多网络接入
- 开源全部硬件接线图和固件配置
2. 硬件系统搭建
2.1 关键器件选型
COD传感器我测试过三款主流型号,最终选择方案如下表:
| 器件 | 型号 | 关键参数 | 选型理由 |
|---|---|---|---|
| 主控 | ShineBlink Core | 支持Lua脚本 | 内置MQTT协议栈 |
| COD传感器 | 哈希DR3900 | 量程0-15000mg/L | 工业级防水 |
| 电源模块 | 18650电池组 | 3.7V/5000mAh | 支持太阳能充电 |
| 通信模块 | SIM7000C | 4G Cat-M1 | 低功耗模式 |
注意:COD传感器需要定期校准,建议每三个月用标准液校验一次。我在户外部署时给传感器加了防藻罩,有效延长了维护周期。
2.2 硬件连接示意图
[COD传感器] --(RS485)--> [ShineBlink Core] | |--(UART)--> [SIM7000C] | |--(ADC)--> [电池电压检测]实际接线时有两个易错点:
- RS485的A/B线序容易接反,会导致通信失败
- SIM7000C的PWRKEY引脚需要接100ms低电平脉冲才能开机
3. 固件开发要点
3.1 ShineBlink Lua脚本配置
-- 初始化COD传感器 cod = Lib.COD_RS485("UART1", 9600, 1) -- 设置云平台参数 cloud = { host = "mqtt.shineblink.com", port = 1883, client_id = "COD_"..Lib.GetDeviceID(), username = "user_123", password = "pass_456" } -- 定时上传数据 Lib.TimerStart("upload", 300000, function() local value = cod.read() local volt = Lib.GetBatteryVoltage() local data = string.format('{"cod":%.2f,"volt":%.2f}', value, volt) Lib.MQTT_Publish("device/COD/data", data) end)3.2 低功耗优化技巧
通过实测发现两个耗电大户:
- 传感器预热:默认每次测量前预热2分钟
- 4G信号搜索:弱网环境下耗电剧增
优化后的方案:
- 改为每小时测量一次(养殖场景足够)
- 固定使用中国移动NB-IoT网络(基站覆盖更广)
- 启用PSM省电模式(电流降至50uA)
4. 云端对接实战
4.1 免开发云配置步骤
- 登录ShineBlink开发者平台
- 创建设备模板:
- 数据点1:cod(浮点型)
- 数据点2:volt(浮点型)
- 生成设备三元组(ProductKey/DeviceName/DeviceSecret)
- 下载自动生成的小程序代码包
4.2 数据告警设置
在云平台可以设置三级预警:
- 黄色预警:COD > 30mg/L(轻度污染)
- 橙色预警:COD > 50mg/L(换水建议)
- 红色预警:COD > 80mg/L(紧急处理)
实测发现设置滞后告警很重要,避免短时波动误报。我采用的策略是:连续3次超标才触发告警。
5. 小程序开发技巧
5.1 快速移植方法
使用平台提供的demo小程序,只需修改三个文件:
app.js中的设备三元组config.js中的地图API密钥pages/index/index.wxml的UI布局
5.2 数据可视化优化
建议增加两个实用功能:
- 趋势对比图:滑动选择时间范围
- 异常数据标记:自动标红超标数据点
// 在onLoad函数中添加这段代码 wx.cloud.callFunction({ name: 'getHistory', data: {device: this.data.deviceId}, success: res => { this.processData(res.result) } }) processData(data) { data.forEach(item => { item.isWarning = item.cod > 30 // 标记超标数据 }) }6. 部署与维护经验
6.1 户外安装注意事项
在三个鱼塘部署后总结的经验:
- 天线要竖直向上(信号提升20%)
- 设备盒开防水透气阀(防冷凝)
- 使用不锈钢支架(防锈蚀)
6.2 常见故障排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 数据不上传 | SIM卡欠费 | 更换物联网卡 |
| COD值异常 | 传感器污染 | 用软毛刷清洁 |
| 设备离线 | 电池耗尽 | 检查太阳能板角度 |
这套系统已经稳定运行8个月,最远的设备部署在沿海养殖场。期间遇到的主要问题是夏季高温导致传感器漂移,后来通过加装防晒罩解决。对于需要更高精度的场景,建议增加温度补偿算法。