Sensor Telemetry 2.0.1:基于 Azure IoT Hub 的高精度温度监控系统
Sensor Telemetry 2.0.1 将 MCP9808 高精度温度传感器的实时数据发送至 Microsoft Azure IoT Hub,经 Azure Stream Analytics 处理后存入 Azure SQL,再通过 Windows 通用移动应用 (UWP) 可视化历史曲线与远程控制。更新日期:2017年5月17日。
项目背景
更新:Sensor Telemetry 已重构并重命名为 2.0.1 版本。
系统概述
本项目演示如何在树莓派上读取 MCP9808 温度传感器,将遥测数据发送至 Azure IoT Hub,经 Stream Analytics 处理后持久化至 Azure SQL。UWP 移动应用展示历史数据并通过 SignalR 实现远程下发控制指令。
应用架构
两个 UWP 应用共享约 99% 代码:一端运行于树莓派(IoT 侧),另一端运行于 PC(客户端)。IoT 端应用向 IoT Hub 与 SignalR 发送传感器数据;客户端订阅 SignalR 实时接收更新,并可向设备下发命令。
代码采用 MVVM 模式,配合 Prism (Prism.Unity 依赖注入) 与 Prism.Event 事件聚合器实现松耦合。SignalR 提供跨应用实例的实时通信。
核心 MCP9808 库封装为可复用 UWP 组件。客户端采用 View-ViewModel 配对,三个仓库分别管理设置、调试日志与传感器数据。Mcp9808TemperatureRepository 仅在读数变化时发布温度变更事件。后台服务包括:遥测服务、定时器服务、报警引脚监控、LED 控制、按钮监控、通知中继、调试控制台。
核心后台服务
- 遥测服务:监听温度变化,转发消息至 Azure Service Bus Event Hub
- 定时器服务:500ms 心跳,用于 UI 时间显示与 1 秒传感器轮询
- 报警引脚监控:检测 MCP9808 ALERT 引脚 GPIO 变化并发布事件
- LED 服务:根据温度报警状态控制 LED
- 按钮监控:处理 GPIO 按钮手动复位报警
- 通知中继:将内部事件映射为 SignalR 消息,实现跨应用通信
- 调试控制台:收集并暴露调试事件供 UI 显示
硬件准备
电路需求
- 大型无焊面包板(可选 Vilros T 型扩展板)
- MCP9808 模块 (Adafruit)
- 4 颗 LED、220Ω 电阻、10kΩ 上拉电阻、轻触按钮
接线指南
- LED 分别接 GPIO 18(蓝)、23(绿)、12(红)、16(黄),配 220Ω 接 3.3V
- MCP9808:VDD→3.3V, GND→GND, SCL→GPIO 5, SDA→GPIO 3, ALERT→GPIO 6, 10kΩ 上拉至 3.3V
- 按钮:一端接 GPIO 5,另端接 GND,10kΩ 上拉至 3.3V
Microsoft Azure 云端配置
在 azure.com 申请免费账户($200 额度),登录 portal.azure.com。
IoT Hub 创建
- 新建 → 物联网 → IoT Hub
- 唯一名称、订阅、资源组(新建)、区域(同区)
- 定价层:F1 免费层(每账户仅限一个)
- 部署完成后查看概览
设备注册
- 从 GitHub 下载 Azure IoT SDK for C#,在 Visual Studio 打开 DeviceExplorer
- 粘贴 IoT Hub 连接字符串(共享访问策略 → iothubowner)
- 创建设备(如 TemperatureDevice1),自动生成密钥
Azure SQL 数据库
- SQL 数据库 → 新建 → 名称:SensorTelemetry
- 使用现有资源组,新建服务器(唯一名称、管理员账号密码、Basic 层、同区)
- 防火墙允许本机 IP
建表脚本
- Visual Studio 打开 SQL Server 对象资源管理器,连接 Azure SQL 服务器
- 执行提供的 CREATE TABLE 脚本创建
SensorReadings表
App Service 计划与移动应用
- App Service 计划 → 新建,Basic B1 层
- 新建 → Web+Mobile → Mobile App,关联上述计划
Stream Analytics 作业
- 新建 → 数据+分析 → Stream Analytics 作业
- 输入配置为 IoT Hub,输出配置为 Azure SQL 表
- 查询语句:
SELECT [TimestampUtc], Source, Temperature, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold INTO [YourOutputAlias] FROM [YourInputAlias]; - 启动作业
软件配置与部署
从仓库下载源码,在 Visual Studio 打开解决方案。
发布移动应用
- 右键 Web 项目 → 发布 → Microsoft Azure App Service → 选择你的 App Service
- 复制 Azure SQL 连接字符串 (ADO.NET),粘贴至项目
MS_TableConnectionString,更新用户名密码 - 发布完成,网站自动启动
配置 IoT Hub 凭据
- UWP 项目
App.xaml中替换{YOUR CONNECTION STRING HERE}为 Device Explorer 获取的设备连接字符串 - 替换
{YOUR DEVICE ID HERE}为创建的设备 ID
配置移动应用 URL
UnityConfiguration.cs中粘贴 Azure 门户复制的 App Service URL 至{YOUR MOBILE SERVICES URL HERE}
详细部署文档请参考完整的 Sensor Telemetry 2.0.1 官方指南。
制造工艺
- 树莓派配合 TMP006 红外温度传感器:Python 库与安装指南
- 树莓派 PIR 运动传感器控制 LED 实战指南
- 树莓派低成本土壤湿度传感器:智能灌溉 DIY 指南
- 树莓派 DS18B20 温度传感器测试与 HC-SR04 超声波测距实战
- 树莓派 + MCP9808 + InfluxDB + Grafana:家庭温度监测系统
- Sensor Telemetry 2.0.1:基于 Azure IoT Hub 的高精度温度监控系统
- 低成本情绪传感器与 EEG:实时情绪检测硬件方案
- UnifiedWater v1 — 基于 Arduino MKR GSM 1400 的完整水质监测套件
- Arduino 通用双极性步进电机控制库——精准控制转速、角度、圈数与方向
- 氧传感器 (O2) 详解:作用、位置与故障征兆
- 传感器标定详解:定义、方法与关键应用
- 心跳传感器:工作原理与实际应用详解