You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP8266(NodeMCU)连接Azure IoT Hub的技术实现咨询

ESP8266(NodeMCU) 连接 Azure IoT Hub 完整指南

前置准备工作

  • 在Azure门户创建IoT Hub实例:选择适合的定价层(免费层F1足够原型测试),完成创建后记录IoT Hub的主机名。
  • 注册ESP8266设备:进入IoT Hub的「设备」面板,点击「添加设备」,填写设备ID,选择认证类型(默认对称密钥),完成后复制生成的设备连接字符串(格式:HostName={YourIoTHubName}.azure-devices.net;DeviceId={YourDeviceId};SharedAccessKey={YourSharedKey})。

1. ESP8266 在 Azure IoT Hub 的认证与注册方法

目前主流有两种认证方式:

  • 对称密钥认证(推荐原型使用)
    注册设备时Azure自动生成主/辅助对称密钥,设备通过包含密钥的连接字符串完成身份验证,无需额外证书配置,适合快速搭建原型。
  • X.509证书认证(生产环境推荐)
    需为设备生成X.509证书,将根CA证书或设备证书上传至IoT Hub,设备通过证书完成TLS握手认证,安全性更高,适合大规模设备部署场景,避免密钥泄露风险。

2. 推荐的连接库

  • Azure IoT Hub Arduino Library
    官方封装的Arduino适配库,支持MQTT协议,内置SAS令牌生成、连接管理逻辑,无需手动处理复杂的认证细节,上手最快。
  • PubSubClient
    轻量级MQTT客户端库,内存占用低,适合资源有限的ESP8266。需自行实现Azure IoT Hub的SAS令牌生成逻辑,灵活性更高。
  • Azure IoT C SDK
    官方原生C SDK,支持MQTT/AMQP/HTTP三种协议,可直接移植到ESP8266,适合需要深度定制的场景。

3. 遥测数据上传示例代码(Arduino IDE环境)

前置依赖安装

在Arduino IDE库管理器中安装以下库:

  • Azure IoT Hub
  • DHT sensor library
  • Adafruit Unified Sensor
  • BH1750

示例代码

#include <ESP8266WiFi.h>
#include <AzureIoTHub.h>
#include <AzureIoTProtocol_MQTT.h>
#include <DHT.h>
#include <BH1750.h>

// WiFi配置
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";

// Azure IoT Hub设备连接字符串
const char* connectionString = "HostName=YourIoTHub.azure-devices.net;DeviceId=YourDeviceId;SharedAccessKey=YourSharedKey";

// 传感器初始化
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;

// Azure IoT客户端
AzureIoTHubClient client(connectionString, AzureIoTProtocol_MQTT);

void setup() {
  Serial.begin(115200);
  
  // 连接WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");

  // 初始化传感器
  dht.begin();
  if (!lightMeter.begin()) {
    Serial.println("Failed to initialize BH1750");
    while (1);
  }

  // 连接Azure IoT Hub
  if (client.connect()) {
    Serial.println("Connected to Azure IoT Hub");
  } else {
    Serial.println("Connection failed");
  }
}

void loop() {
  // 读取传感器数据
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  float soilMoisture = analogRead(A0); // 土壤湿度传感器接A0引脚
  float lightLevel = lightMeter.readLightLevel();

  // 检查传感器数据有效性
  if (isnan(temperature) || isnan(humidity)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(2000);
    return;
  }

  // 构造JSON格式遥测数据
  String payload = "{\"temperature\":" + String(temperature) + 
                   ",\"humidity\":" + String(humidity) + 
                   ",\"soilMoisture\":" + String(soilMoisture) + 
                   ",\"lightLevel\":" + String(lightLevel) + "}";

  // 发送数据到Azure IoT Hub
  if (client.sendEvent(payload.c_str())) {
    Serial.println("Telemetry sent successfully: " + payload);
  } else {
    Serial.println("Failed to send telemetry");
    client.reconnect();
  }

  delay(5000); // 每5秒发送一次数据
}

代码说明

  • 替换ssid、password为你的WiFi信息,connectionString为之前获取的设备连接字符串。
  • 土壤湿度传感器模拟输出接ESP8266的A0引脚,可根据传感器特性调整数据处理逻辑。
  • 代码中每5秒读取一次传感器数据,以JSON格式发送到Azure IoT Hub。

内容的提问来源于stack exchange,提问作者Tanish Sidana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:31:17