目录
📡 四、Arduino 代码示例(通过 HTTPS 上报数据)
设置 Microsoft Azure IoT Hub 的过程可以分为以下几个主要步骤,适合初学者和开发者从零开始:
🧭 一、前提条件
在开始之前,请确认:
-
已拥有 Azure 账户:如果还没有,可通过 https://azure.microsoft.com/zh-cn/free/ 注册免费账户(提供 12 个月免费服务和 $200 美元试用额度)。
-
安装了 Azure CLI(可选,但推荐):用于命令行管理 Azure 服务。
-
安装地址:https://learn.microsoft.com/zh-cn/cli/azure/install-azure-cli
-
-
了解基本概念:
-
IoT Hub:云端的设备通信中心,支持数百万设备的连接与管理。
-
设备:可以是物理传感器、ESP32、Raspberry Pi,或者模拟器。
-
🛠️ 二、创建 IoT Hub 实例
方法一:使用 Azure 门户网站创建(适合新手)
-
登录 Azure Portal
-
在搜索框中输入
IoT Hub
并点击“创建” -
填写以下字段:
-
订阅(Subscription):选择已有订阅。
-
资源组(Resource Group):创建新的或选择已有的。
-
区域(Region):选择靠近你的区域,例如 East Asia(香港)或 Korea Central。
-
IoT Hub 名称:全局唯一,例如
jcwon-iot-hub
-
-
点击“下一步”直到“创建”,确认配置后点击“创建”
-
等待几分钟,IoT Hub 就会创建成功
🧩 三、注册设备(添加设备身份)
-
进入你创建好的 IoT Hub 页面
-
在左侧导航栏点击
设备
(IoT devices)→ 点击顶部的+ 添加设备
-
设置:
-
设备 ID:自定义,例如
myDevice01
-
认证类型:默认“自动生成密钥”
-
-
点击“保存”
-
复制生成的 连接字符串(用于设备连接)
🖥️ 四、连接设备(以模拟设备为例)
方法一:使用 Azure 官方设备模拟器
-
打开 Azure 官方示例项目:https://github.com/Azure-Samples/azure-iot-samples-node
-
安装 Node.js(如未安装)https://nodejs.org/
-
下载并运行以下命令:
git clone https://github.com/Azure-Samples/azure-iot-samples-node.git
cd azure-iot-samples-node/iot-hub/Quickstarts/simulated-device
npm install
-
打开
simulated_device.js
文件,将connectionString
改为你刚才复制的设备连接字符串。 -
运行模拟设备:
node simulated_device.js
你会看到模拟设备每隔一段时间向 IoT Hub 发送温度数据。
📡 五、查看设备发送的数据
IoT Hub 本身不存储遥测数据,但你可以:
方式一:用 Azure CLI 查看(开发者常用)
az extension add --name azure-iot
az iot hub monitor-events --hub-name <你的IoTHub名称> --device-id <你的设备ID>
方式二:将数据路由到其他服务(推荐)
你可以将 IoT Hub 的数据路由到以下服务进行存储与分析:
服务 | 说明 |
---|---|
Azure Storage Blob | 储存历史数据 |
Azure Stream Analytics | 实时分析数据 |
Azure Functions | 触发自动化逻辑 |
Power BI | 可视化分析数据 |
🔐 六、安全建议
-
不要把设备连接字符串暴露到公共代码仓库
-
使用 X.509 证书认证更安全(高级用法)
-
可设置设备的最大连接数、传输速率限制
📘 七、进阶:通过 ESP32 实物上传数据
可以使用 Arduino IDE + ESP32 模块,通过 PubSubClient
或 Azure 官方 Arduino SDK 连接到 IoT Hub,实现物理设备上报数据。若你需要我可以单独讲这一块。
✅ 总结流程图
[Azure Portal]
↓ 创建 IoT Hub
↓ 添加设备
↓ 获取连接字符串
↓ 本地模拟/物理设备连接
↓ 数据发送到 IoT Hub
↓ 配置路由:Blob、Functions、Stream Analytics、Power BI
下面是为 ESP32 开发板定制的 Azure IoT Hub 连接和数据发送的完整指南,适合你通过 WiFi 将传感器或遥测数据上传到云端。
🧭 一、准备工作
硬件设备:
-
ESP32 开发板(如 ESP32 DevKit V1)
-
USB 数据线
-
一台可以运行 Arduino IDE 的电脑
-
WiFi 网络
软件安装:
-
安装 Arduino IDE:https://www.arduino.cc/en/software
-
为 ESP32 添加开发支持:
-
打开 Arduino IDE →
文件
→首选项
-
在“附加开发板管理器网址”中添加:
-
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
3. 然后:工具 → 开发板 → 开发板管理器 → 搜索“ESP32”并安装
-
安装库(在 Arduino IDE 中):
-
AzureIoTHub
(官方 Azure SDK) -
WiFi.h
(ESP32 自带) -
如果用 MQTT,也可以安装
PubSubClient
-
🛠️ 二、获取连接字符串和信息
回到你之前创建的 IoT Hub,在“设备”中找到你的设备,复制以下信息:
-
主机名:类似于
jcwon-iot-hub.azure-devices.net
-
设备 ID:你自己设定的名字
-
主密钥 或 连接字符串(注意:ESP32 SDK 需要你使用 主密钥 而不是完整连接字符串)
🧩 三、生成 SAS Token(临时访问令牌)
ESP32 无法处理复杂的加密认证,所以需要在本地电脑上先生成一个 SAS Token。
方法一:使用 Python 脚本生成(推荐)
安装依赖(如果未安装):
pip install azure-iot-device
运行脚本:
from azure.iot.device import IoTHubDeviceClient
import urllib.parse
import hmac, base64, hashlib, time
def generate_sas_token(uri, key, policy_name=None, expiry=3600):
ttl = int(time.time()) + expiry
sign_key = "%s\n%d" % (urllib.parse.quote(uri, safe=''), ttl)
key_bytes = base64.b64decode(key)
signature = urllib.parse.quote(base64.b64encode(
hmac.new(key_bytes, sign_key.encode('utf-8'), hashlib.sha256).digest()
), safe='')
token = f'SharedAccessSignature sr={uri}&sig={signature}&se={ttl}'
if policy_name:
token += f'&skn={policy_name}'
return token
# 替换为你自己的主机名和设备信息
hub_host = "jcwon-iot-hub.azure-devices.net"
device_id = "myDevice01"
device_key = "<你的主密钥>"
sas_token = generate_sas_token(f"{hub_host}/devices/{device_id}", device_key)
print("SAS Token:\n", sas_token)
📡 四、Arduino 代码示例(通过 HTTPS 上报数据)
使用原生 HTTP 请求简化,不使用复杂库。
#include <WiFi.h>
#include <WiFiClientSecure.h>
const char* ssid = "你的WiFi名";
const char* password = "你的WiFi密码";
// 替换为你的信息
const char* host = "jcwon-iot-hub.azure-devices.net";
const char* deviceId = "myDevice01";
const char* sasToken = "你生成的SAS Token"; // 不带引号换行粘贴
void setup() {
Serial.begin(115200);
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
Serial.println("WiFi connected");
WiFiClientSecure client;
client.setInsecure(); // 测试时使用,正式部署应替换为TLS证书
if (!client.connect(host, 443)) {
Serial.println("Connection failed");
return;
}
String payload = "{\"temperature\":25.6,\"humidity\":40}";
String url = "/devices/" + String(deviceId) + "/messages/events?api-version=2020-09-30";
String request =
"POST " + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Authorization: " + sasToken + "\r\n" +
"Content-Type: application/json\r\n" +
"Content-Length: " + payload.length() + "\r\n\r\n" +
payload;
client.print(request);
delay(1000);
while (client.available()) {
String line = client.readStringUntil('\n');
Serial.println(line);
}
client.stop();
}
void loop() {
// 可设置为定时上报
}
✅ 五、在 Azure 查看数据
打开终端运行:
az iot hub monitor-events --hub-name jcwon-iot-hub --device-id myDevice01
如果一切设置正确,你会看到 ESP32 发送上来的 JSON 数据!
🔐 六、安全提醒
-
SAS Token 有效期一般设置为 1 小时,可自动刷新(进阶方案)。
-
若需长期运行,建议使用 X.509 证书认证 或用 DPS 自动注册设备(Azure 提供支持)。