首先,在百度智能云物联网平台创建产品和设备是进行物联网开发的第一步,也是连接MQTT的基础。整个过程可以分解为几个清晰的步骤,即使是没有经验的小白也能轻松上手。

一、 核心概念理解

在开始之前,先理解两个核心概念:

  • 产品:代表一类具有相同功能的设备集合,例如“智能开关”、“温湿度传感器”。创建产品主要是为了定义物模型(数据点)和统一管理。
  • 设备:是产品的具体实例,也就是你手上的每一台物理硬件。每个设备都有唯一的身份凭证(如密钥),用于连接云端。

二、 详细创建步骤(小白友好版)

整个流程可以概括为:注册登录 -> 创建服务 -> 创建产品 -> 创建设备。下面是每一步的图解式操作。

步骤 1:登录百度智能云

访问 百度智能云官网,使用百度账号登录。如果没有账号,需要先注册 。

步骤 2:进入物联网核心服务 (IoT Core)

登录后,在控制台首页,通过搜索框或产品导航找到 “物联网核心套件 (IoT Core)” 并点击进入。这是百度云提供的MQTT Broker服务 。

步骤 3:创建 IoT Core 实例
  1. 在 IoT Core 控制台,点击 “创建实例”
  2. 填写实例名称(例如 my_iot_test),选择合适的地域和规格(个人测试可选择免费或最低规格)。
  3. 创建成功后,等待实例状态变为 “运行中”,然后点击实例名称进入管理界面。
步骤 4:创建产品

产品是管理同类设备的模板。

  1. 在实例管理界面,找到左侧菜单的 “产品”“物模型” 相关选项,点击 “创建产品”
  2. 填写产品信息:
    字段 填写示例 说明
    产品名称 智能LED灯 易于识别的名称
    产品描述 用于控制LED开关的测试产品 (可选)描述产品功能
    所属品类 自定义品类 或选择接近的品类 根据实际情况选择
    节点类型 设备 通常选择“设备”
    连接方式 直连设备 设备直接连接云平台
    数据格式 透传/自定义物模型 初次测试可选择“透传”,更规范则用“物模型”
  3. 点击 “确定” 完成产品创建。
步骤 5:为产品定义物模型(数据点)

物模型是设备在云端的数字化表示,定义了设备具备的功能属性。这是关键一步,决定了设备能上报和接收什么数据。

  1. 进入刚创建的产品详情页,找到 “物模型”“功能定义” 标签页。
  2. 点击 “添加自定义功能”“添加属性”
  3. 以创建一个控制LED开关的属性为例 :
    • 功能类型:选择 属性(用于控制)或 事件(用于上报)。
    • 标识符led_switch (非常重要,代码中会用到)
    • 数据类型布尔型 (bool,表示开或关)
    • 名称LED开关
    • 读写权限读写 (云端可下发,设备可上报)
  4. 点击 “发布” 使物模型生效。
步骤 6:创建设备

设备是产品的具体实现,每个物理设备对应一个。

  1. 在产品详情页,切换到 “设备列表” 标签页,点击 “添加设备”
  2. 填写设备信息:
    • 设备名称bedroom_led_01 (自定义,便于管理)
    • 设备备注:(可选)
    • 身份认证方式:选择 密钥认证(对于ESP8266等资源受限设备,此方式最常用)。
  3. 点击 “确定”此时务必立即保存弹出的设备密钥(Key Secret),因为它只显示一次,是设备连接云端的密码 。
步骤 7:获取设备连接信息

创建设备后,你需要获取连接MQTT服务器所需的三要素。这些信息通常不在设备列表直接显示,需要通过 MQTT连接计算工具 生成 。

  1. 你需要准备以下信息:
    • IoT Core实例ID:在实例概览页查看。
    • 设备名称:上一步创建的 bedroom_led_01
    • 设备密钥:上一步保存的密钥。
  2. 访问百度云提供的 MQTT连接签名工具(通常地址类似 https://iotalk.cdn.bcebos.com/mqtt-sign/)。
  3. 在工具中输入上述三项信息,选择过期时间(测试时可设长一些,如3600秒)。
  4. 点击生成,你将获得:
    • MQTT服务器地址 (Broker Host)
    • 用户名 (Username)
    • 密码 (Password)
    • Client ID

三、 创建流程总结与验证

为了更直观地理解整个流程,可以参考下面的创建步骤与核心产出对照表:

步骤序号 操作环节 核心操作 关键产出/注意事项
1 平台准备 登录百度云,开通IoT Core 获得一个“运行中”的IoT Core实例
2 产品定义 创建产品,定义物模型 明确设备功能,如 led_switch 属性
3 设备注册 在产品下创建设备,选择密钥认证 务必保存好设备密钥
4 连接凭证生成 使用签名工具,输入实例ID、设备名、密钥 获得 MQTT服务器地址、用户名、密码

验证创建是否成功:
在将程序烧录到ESP8266之前,强烈建议使用 MQTT.fxMQTTX 等桌面客户端进行验证 。

  1. 在MQTT.fx中新建一个连接配置。
  2. 填入上一步生成的服务地址、用户名、密码和Client ID。
  3. 点击连接。如果指示灯变绿,说明设备在云端的创建和认证信息完全正确,可以开始进行设备端开发了。

四、 设备端连接代码示例(ESP8266 + PubSubClient)

当你完成了云端的所有配置并成功通过MQTT.fx测试后,便可以将以下示例代码烧录到你的ESP8266开发板中。这段代码演示了如何使用获取到的连接信息连接到百度云IoT Core。

/**
 * ESP8266 连接百度云IoT Core示例
 * 来源参考:的配置逻辑与的通用连接思路
 */

#include <ESP8266WiFi.h>
#include <PubSub.h> // 常用的Arduino MQTT客户端库

// 1. 配置你的Wi-Fi网络
const char* ssid = "Your_WiFi_SSID";
const char* wifiPassword = "Your_WiFi_Password";

// 2. 填入从百度云签名工具获取的连接信息 
const char* mqttBroker = "your-instance-id.mqtt.iot.gz.baidubce.com"; // MQTT服务器地址
const int mqttPort = 1883; // 非SSL端口,若用SSL通常为1884
const char* mqttClientId = "your-generated-client-id"; // 客户端ID
const char* mqttUsername = "your-generated-username"; // 用户名
const char* mqttPassword = "your-generated-password"; // 密码

// 3. 定义你在云端创建的产品物模型属性(Topic)
// 假设产品物模型标识符为“led_switch”,设备名为“bedroom_led_01”
const char* topicPropertyPost = "$baidu/iot/shadow/bedroom_led_01/update"; // 设备属性上报Topic(示例)
const char* topicPropertyReceive = "$baidu/iot/shadow/bedroom_led_01/update/documents"; // 接收云端指令Topic(示例)

WiFiClient espClient;
PubSubClient mqttClient(espClient);

void setupWiFi() {
  delay(10);
  Serial.println();
  Serial.print("正在连接到Wi-Fi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, wifiPassword);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Wi-Fi连接成功!");
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());
}

// MQTT回调函数,用于处理接收到的消息
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("收到消息,Topic: [");
  Serial.print(topic);
  Serial.print("],内容: ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
  // 这里可以添加解析payload并控制LED等硬件的逻辑
}

void reconnectMQTT() {
  // 循环直至连接成功
  while (!mqttClient.connected()) {
    Serial.print("正在尝试MQTT连接...");
    // 尝试连接,使用生成的用户名、密码和Client ID 
    if (mqttClient.connect(mqttClientId, mqttUsername, mqttPassword)) {
      Serial.println("MQTT连接成功!");
      // 连接成功后,订阅接收指令的Topic
      if(mqttClient.subscribe(topicPropertyReceive)){
        Serial.print("成功订阅Topic: ");
        Serial.println(topicPropertyReceive);
      }
      // 连接成功后,可以立即上报一次设备状态(可选)
      // String initMsg = "{\"reported\": {\"led_switch\": false}}";
      // mqttClient.publish(topicPropertyPost, initMsg.c_str());
    } else {
      Serial.print("连接失败,状态码 rc=");
      Serial.print(mqttClient.state()); // 打印错误状态码便于排查
      Serial.println(",5秒后重试...");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setupWiFi();
  mqttClient.setServer(mqttBroker, mqttPort);
  mqttClient.setCallback(callback); // 设置消息回调函数
}

void loop() {
  if (!mqttClient.connected()) {
    reconnectMQTT();
  }
  mqttClient.loop(); // 维持MQTT心跳和处理网络流量
  // 这里可以添加你的业务逻辑,例如定时上报传感器数据
  // delay(5000);
  // String reportMsg = "{\"reported\": {\"temperature\": 25}}";
  // mqttClient.publish(topicPropertyPost, reportMsg.c_str());
}

代码关键点解释:

  1. 连接三要素mqttBrokermqttUsernamemqttPassword 必须严格使用签名工具生成的结果 。
  2. Topic格式:百度云IoT Core的Topic有特定格式,通常以 $baidu/iot/ 开头,具体路径需参考官方文档或控制台物模型配置页的提示 。示例中的Topic为通用格式,实际使用时请替换为你的真实设备名和物模型标识符。
  3. 错误排查mqttClient.state() 返回的状态码是排查连接问题的关键,例如“4”通常代表用户名或密码错误 。
  4. 物模型通信:上报数据和接收指令的Payload(消息内容)通常是JSON格式,需要按照你在云端定义的物模型来组织。

按照以上步骤,你就能顺利完成从百度云物联网平台创建产品、设备,到ESP8266设备端代码连接的全过程。核心在于云端配置的准确性连接参数的正确生成。首次操作时,务必利用MQTT.fx工具进行中间验证,可以极大降低硬件调试的复杂度。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐