Azure IoT智能游泳池监控系统:温度感知与远程控制
核心硬件清单
| 组件 | 数量 | 关键参数/备注 |
|---|---|---|
| DS18B20防水温度传感器 | 2 | 红线接3-5V,蓝/黑接地,黄/白为数据线 |
| IoT智能电源继电器 | 1 | 控制水泵与盐水系统(110V),3.3V逻辑触发 |
| 4.75kΩ电阻 | 2 | 1/4W,5%,DS18B20上拉 |
| Raspberry Pi 2 Model B | 1 | 运行Windows 10 IoT Core,边缘网关 |
| Arduino UNO R3 | 1 | 采集双路温度,通过I2C传给Pi |
软件与云服务
- Microsoft Azure:IoT Hub、Stream Analytics、SQL Database、API App、Web App
- Windows 10 IoT Core:Pi端操作系统
- Arduino IDE / Visual Studio 2015:开发环境
- Azure IoT Hub Device Explorer:设备注册与调试
- Fritzing:电路原理图绘制
- Power BI:实时仪表盘可视化
项目概述
目标:远程监控并控制一座Intex 15'×48"圆形游泳池(约19,000升水量),配套砂缸过滤泵、11kW加热器、盐水氯化系统。核心需求:实时掌握池水温度与环境温度,智能控制水泵/加热器/盐水系统运行时长,确保水温适宜且避免设备过度运行。
温度采集子系统
两只DS18B20分别测量池水温度(传感器浸入池中,用门铃线延长)与环境温度(贴于箱体外壁)。Arduino使用DallasTemperature与OneWire库读取,每秒通过I2C向Pi发送格式化字符串:
temperatureData = padRight(String(poolSensor.getTempCByIndex(0)) + "|" + String(outsideSensor.getTempCByIndex(0)), I2C_BUFFER_LEN);
执行器控制
未来计划:接入电量监测模块,分别统计110V与220V回路功耗。
Raspberry Pi边缘网关
运行IoTPoolRaspiBackgroundApp(C#无头后台应用,VS2015模板),功能:
- 通过USB为Arduino供电(5V)
- I2C接收双路温度(℃)
- GPIO控制IoT Power Relay
- 每分钟向Azure IoT Hub发送JSON(AMQP,可改HTTPS/MQTT)
{
"PoolName": "iotpool",
"PoolWaterTempC": 30,
"OutsideAirTempC": 27,
"IsPoolPowerOn": false,
"SampleDateTime": "2016-07-05T23:35:58.0882185Z"
}
设备在IoT Hub注册,连接字符串写入StartupTask.cs:
static string iotPoolConnString = "HostName=.azure-devices.net;DeviceId=iotpool;SharedAccessKey=";
static string deviceName = "iotpool";
Azure云端数据流
IoT Hub(免费版)
每日8000条/500B额度,本项目仅1440条/天,余量充足。用Device Explorer注册设备、获取连接串、监控D2C/C2D消息。
Stream Analytics作业
SELECT PoolName, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTime
INTO sql FROM iothub
将每分钟一条的D2C消息写入Azure SQL Database表Pools。未来可加聚合告警(如平均水温>35℃报警)。
Azure SQL Database (S0 Standard, 10 DTU)
CREATE TABLE [dbo].[Pools] (
[Id] INT IDENTITY(1,1) NOT NULL,
[PoolName] NVARCHAR(MAX) NULL,
[PoolWaterTempC] FLOAT(53) NOT NULL,
[OutsideAirTempC] FLOAT(53) NOT NULL,
[IsPoolPowerOn] INT NOT NULL,
[SampleDateTime] DATETIME NOT NULL,
CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC)
);
REST API (ASP.NET Web API)
- API Key认证(Header:
api-key: {key}),定义于PoolControllers.cs - 支持:获取最新数据、开/关电源、历史查询
- 未来可接入Azure API Management、Azure AD认证
Web App与移动端
- Azure Web App:ASP.NET Web Forms,集成Azure AD强制登录,修改
web.config中的ida:ClientId - Mobile App:Xamarin Forms(已编译WinPhone/Win10,可跨编译iOS/Android),修改
Core.cs与DataService.cs中的API地址与Key
Power BI实时大屏
代码与资源
D2C消息JSON格式
{ "PoolName": "IoTPool", "PoolWaterTempC": 30, "OutsideAirTempC": 27, "IsPoolPowerOn": false, "SampleDateTime": "2016-07-05T23:35:58.0882185Z" }
SQL建表脚本
CREATE TABLE [dbo].[Pools] ( ... ); -- 见上文完整定义
GitHub完整源码
https://github.com/khilscher/iotpool
原理图
制造工艺
- 地下与地上游泳池设计施工全攻略
- 构建 GPS 数据记录器:结合 Azure IoT Hub 实现空间分析
- 物联网 + AI 守护水生态:多参数水质监测系统
- 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
- 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- 物联网双轴太阳能跟踪器:基于 Arduino 与 Cayenne 的智能能源管理
- 基于 Arduino、Yaler 与 IFTTT 构建 Web 化 IoT 仪表盘
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- Arduino 发布 Portenta H7:CES 首秀工业级 IoT 开发板
- Azure RTOS扩展主流嵌入式平台,新增开发套件支持
- Azure对决AWS:哪个云平台更胜物联网?