Arduino Nano 33 IoT:多参数水质监测仪(EC、pH、ORP)支持 BLE 与 PWA
项目概述
本项目将构建一款可测量电导率(EC)、酸碱度(pH)、氧化还原电位(ORP)及温度的水质监测设备,适用于水池、水培系统等场景。设备通过蓝牙低功耗(BLE)与网页通信,利用 Web Bluetooth API 在浏览器中直接读取数据,并将其打包为渐进式网页应用(PWA),可像原生应用一样安装到手机或桌面。
所有传感器模块均可在 ufire.co 购买。
核心概念解析
- EC / pH / ORP / 温度:水质监测的四大核心指标。EC 用于水培营养液浓度监测,pH 反映酸碱度,ORP 评估水体自净消毒能力。
- 蓝牙低功耗 (BLE):一种低功耗无线协议,Arduino Nano 33 IoT 内置 BLE 与 Wi-Fi 双模块。
- Web Bluetooth:Chrome 与 Opera 浏览器实现的 API,允许网页直接与 BLE 设备通信,无需原生应用。
- 渐进式网页应用 (PWA):具备离线访问、可安装、原生应用体验的网页技术,Android 与 iOS 支持细节略有差异。
硬件组装
修改 I2C 地址
uFire ISE 接口板默认 I2C 地址相同,项目使用两块(一块测 pH,一块测 ORP),需修改其中一块地址为 0x3E。详细步骤请参考官方文档。
Qwiic 连接
所有模块采用 Qwiic 连接系统,只需按顺序串联。使用一根 Qwiic 转公头线连接首个模块至 Nano 33 IoT:
- 黑线 → GND
- 红线 → 3.3V 或 5V
- 蓝线 → SDA (A4)
- 黄线 → SCL (A5)
注意:温度数据默认从 EC 板读取,请务必给 EC 板连接温度探头。所有探头通过 BNC 接口连接。建议将整套电路装入防水外壳。
软件架构
固件运行在 Nano 33 IoT 上,网页端使用 Vue.js 构建,无需后端。通信流程:
- 网页通过 BLE 连接设备
- 网页发送文本命令(如
ec)请求测量或校准 - 设备执行命令,返回 JSON 格式数据(如
{"ec":1.24}) - 网页解析数据并更新界面
BLE 服务与特征值
定义一个服务(UUID: 4805d2d0-af9f-42c1-b950-eae78304c408)及两个特征值:
BLEStringCharacteristic tx_Characteristic("50fa7d80-440a-44d2-967a-ec7731ec736a", BLENotify, 20); // 设备→网页
BLEStringCharacteristic rx_Characteristic("50fa7d80-440b-44d2-967b-ec7731ec736b", BLEWrite, 20); // 网页→设备
tx_Characteristic 启用 BLENotify,数据变化时主动通知网页;rx_Characteristic 启用 BLEWrite,允许网页写入命令。通过 rx_Characteristic.setEventHandler(BLEWritten, rxCallback) 注册回调处理接收命令。
文本命令协议
采用 uFire 官方 JSON 协议,示例:
- 网页发送:
ec - 设备返回:
{"ec":1.24}
支持 EC、pH、ORP 读取与校准命令,详见官方文档。
网页端实现
前端使用 Vue.js + Bulma.css,无构建工具,直接浏览器运行。关键点:
<link rel="manifest" href="manifest.json">引入 PWA 清单ble.js封装 Web Bluetooth 连接、特征值订阅、数据收发- 连接需用户点击按钮触发(安全策略),通过
navigator.bluetooth.requestDevice筛选名为 "uFire" 的设备 - 每 5 秒自动轮询更新数据
PWA 打包步骤
- 生成
manifest.json(可用 App Manifest Generator),设置scope、start_url、display: "standalone" - 编写
service-worker.js缓存静态资源实现离线访问 - 生成多尺寸图标(可用 Favicon Generator)
- 在 Vue
mounted()注册 Service Worker - 用 Lighthouse 审计验证 PWA 合规性
代码与资源
- 固件源码:GitHub 仓库
- 网页前端:同仓库
web目录
原理图
所有模块通过 Qwiic 线串联,详见原理图。
制造工艺
- 树莓派对接HDC2010:I²C温湿度传感器完整接线与编程指南
- Windows IoT + 树莓派打造人脸识别智能门锁
- 树莓派 + PIR 传感器 + MQTT 打造 AWS IoT 运动触发按钮
- Windows 10 IoT Core 上基于 SHT15 的精准温湿度监测
- 树莓派 3 Model B+ 安装 Windows 10 IoT Core 完整步骤指南
- 将树莓派 4 打造成 Web 服务器并搭建个人网站
- 在树莓派 3 上扩展 GoPiGo v2 的 Windows 10 IoT Core 应用
- 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
- Azure IoT智能游泳池监控系统:温度感知与远程控制
- Infineon获Amazon Web Services认定为先进技术合作伙伴
- Web启用DDS:连接IoT、云与实时连接
- 物联网如何重塑 Web 应用设计与开发范式