如何设置微软Azure IoT Hub
目录
🧭 一、前提条件
🛠️ 二、创建 IoT Hub 实例
方法一:使用 Azure 门户网站创建(适合新手)
🧩 三、注册设备(添加设备身份)
🖥️ 四、连接设备(以模拟设备为例)
方法一:使用 Azure 官方设备模拟器
📡 五、查看设备发送的数据
方式一:用 Azure CLI 查看(开发者常用)
方式二:将数据路由到其他服务(推荐)
🔐 六、安全建议
📘 七、进阶:通过 ESP32 实物上传数据
✅ 总结流程图
🧭 一、准备工作
硬件设备:
软件安装:
🛠️ 二、获取连接字符串和信息
🧩 三、生成 SAS Token(临时访问令牌)
方法一:使用 Python 脚本生成(推荐)
📡 四、Arduino 代码示例(通过 HTTPS 上报数据)
✅ 五、在 Azure 查看数据
🔐 六、安全提醒
设置 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.gitcd azure-iot-samples-node/iot-hub/Quickstarts/simulated-devicenpm install
-
打开
simulated_device.js
文件,将connectionString
改为你刚才复制的设备连接字符串。 -
运行模拟设备:
node simulated_device.js
你会看到模拟设备每隔一段时间向 IoT Hub 发送温度数据。
📡 五、查看设备发送的数据
IoT Hub 本身不存储遥测数据,但你可以:
方式一:用 Azure CLI 查看(开发者常用)
az extension add --name azure-iotaz iot hub monitor-events --hub-name --device-id
方式二:将数据路由到其他服务(推荐)
你可以将 IoT Hub 的数据路由到以下服务进行存储与分析:
🔐 六、安全建议
-
不要把设备连接字符串暴露到公共代码仓库
-
使用 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 IoTHubDeviceClientimport urllib.parseimport hmac, base64, hashlib, timedef 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 #include 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 提供支持)。