MKR1000 接入 Azure IoT:DHT22 温湿度实时上云监控
项目目标
利用 Arduino MKR1000 内置 Wi-Fi 与 TLS 支持,读取 DHT22 温湿度数据,通过 HTTPS 直接推送至 Azure Event Hubs 或 IoT Hub,并利用 Microsoft “Connect the Dots” 开源项目在 Web 仪表板实时可视化。无需额外网关,单板直连云端。
硬件准备
- Arduino MKR1000 × 1
- DHT22 温湿度传感器 × 1
- 10kΩ 上拉电阻 × 1(数据线接 3.3V)
- 面包板、跳线、Micro USB 线
接线图
- DHT22 VCC → 3.3V,GND → GND
- DATA → MKR1000 D6,并接 10kΩ 上拉至 3.3V
开发环境配置
- Arduino IDE → 开发板管理器安装 Arduino SAMD Boards(含 MKR1000)。
- 库管理器安装:
WiFi101、DHT sensor library(Adafruit)、ArduinoJson、RTCZero。
关键步骤:上传 TLS 根证书
MKR1000 内存有限,需手动烧录目标服务器的 CA 证书:
- 上传 WiFi101 Firmware Updater** 示例草图到板子。
- PC 运行
winc1500-uploader-gui.exe(下载)。 - 输入目标域名:
ctd-ns.servicebus.windows.net(公共 Event Hub)或你自己的<namespace>.servicebus.windows.net/<iot-hub>.azure-devices.net。 - 选择 COM 口,点击 “Update Certificates”。
方案一:使用公共 Connect-the-Dots Event Hub(快速体验)
- 克隆/下载 MKR1000-Azure 仓库。
- 修改
ssid、password为你的 Wi-Fi 凭据。 - 上传草图,打开串口监视器确认 “HTTP/1.1 201” 成功。
- 浏览器打开 https://connectthedotsdx.azurewebsites.net/ 即可看到混合数据流(建议修改
displayname/guid区分设备)。
方案二:创建专属 Azure Event Hub(生产推荐)
前置条件
- Visual Studio 2015 Community + Azure 订阅(免费试用可用)。
- 克隆 connectthedots 仓库。
自动化部署 Azure 资源
- VS 打开
AzurePrep.sln,以 Release 模式运行AzurePrep项目。 - 登录 Azure,按提示命名资源(建议
ctd<初缩写>,如ctddc)。 - 运行
CreateWebConfig目标生成web.config,复制到ConnectTheDotsWebSite项目并加入解决方案。 - 运行网站项目(Edge/Chrome),确认站点可访问。
生成 SAS 密钥并配置设备端
- Azure 旧门户 → Event Hubs →
ehdevices→ Configure → 复制 D1 主键。 - 使用 Event Hubs Signature Generator:
Namespace:ctddc-ns, Hub:ehdevices, Publisher/Sender Key:D1, TTL: 525600 分钟。粘贴主键生成签名。 - 修改草图:
hostname[]=ctddc-ns.servicebus.windows.net,authSAS[]= 生成的完整 SAS 字符串。 - 上传草图,串口监视器验证,刷新网站查看专属数据。
方案三:迁移至 Azure IoT Hub(双向通信)
资源创建
- Azure 门户新建 IoT Hub(免费层 F1 即可)。
- 下载 Device Explorer (SetupDeviceExplorer.msi)。
- 复制 IoT Hub 连接字符串(iothubowner 主键)到 Device Explorer,点击 Update。
- Management 标签创建设备
D1,生成 SAS Token(TTL 1 年)。
代码修改要点
char hostname[] = "your-hub.azure-devices.net";
char authSAS[] = "SharedAccessSignature sr=...&sig=...&se=..."; // 仅 SAS 部分
String deviceName = "D1";
String uri = "/devices/" + deviceName + "/messages/events?api-version=2016-02-03";
// 响应码判断由 201 改为 204
if (response.startsWith("HTTP/1.1 204")) { /* success */ }
验证
Device Explorer → Data 标签 → Monitor,即可看到设备上报的 JSON 消息。
核心代码片段(草图主循环)
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) return;
String json = createJSON(t, h); // {"DeviceId":"D1","Temperature":23.4,"Humidity":56.7,...}
if (sendEvent(json)) {
Serial.println("Sent OK");
} else {
Serial.println("Send failed");
}
delay(5000); // 5 秒上报一次
}
bool sendEvent(String payload) {
// HTTPS POST 到 Event Hub / IoT Hub
// 使用 WiFiSSLClient 建立 TLS 连接
// 发送 HTTP 头 + SAS Authorization + JSON body
// 解析响应状态行
}
成本控制与清理
Azure 资源按量计费,实验结束请运行 ClearResources 项目或手动删除资源组,避免持续扣费。免费层 Event Hub/IoT Hub 有额度限制,生产环境请评估定价。
参考资源汇总
- MKR1000-Azure 源码:GitHub
- Connect the Dots 完整示例:GitHub
- WiFi101 固件更新工具:GitHub
- SAS 签名生成器:RedDog
- Device Explorer:azure-iot-sdks
制造工艺
- 树莓派自动化气雾栽培系统:湿度传感器智能控制
- 验证并校准湿度传感器以实现精准测量
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- Arduino Cloud 传感器塔:温度、动作与气体监测
- BME280 环境数据实时显示于 Nextion 触摸屏——Visuino 图形化开发
- Blynk + Arduino 读取 DHT11 温湿度数据教程
- 分步指南:将 YL-39/YL-69 土壤湿度传感器连接到 Arduino UNO
- Arduino传感器:类型、应用与实战项目
- 湿度传感器:工作原理与关键应用
- DHT11传感器:工作原理与关键应用