Skip to main content

Command Palette

Search for a command to run...

Esp32s3如何配置华为云物联网

Updated
•2 min read•View as Markdown
Esp32s3如何配置华为云物联网

最近在学习ESP32S3的时候要用华为云的IoT,自己在网上看教程终于配出来了,感谢无私奉献的网友。在配置成功后我也来分享总结一下,希望可以帮到正在学习ESP32的同学。

华为云配置

  • 1、在浏览器中搜索华为云,进入官网—>搜索IOT关键字—>设备接入IoTDA—>试用

  • 2、这里直接点击立即创建就行了

  • 3、等待大概10秒左右的时间就可以创建成功

  • 4、按顺序点击就行了,里面的内容暂时先随便填

  • 5、点击TEST文字,进去之后选择下方的自定义模型

  • 6、服务ID随便写,点击确定,之后就新增属性,里面内容随便填

  • 7、然后回到第5步的页面点击管理设备—>注册设备—>设备标识码是唯一的,我填写的是日期,点击确定后浏览器会自动下载一个txt文件,这个文件等下会用。华为云配置工作就完成了,接下来就配置代码。

    代码配置

  • 1、我先把完整代码放在这里,接下来我们看一下需要修改的部分

!!!注意我用的是5.8.2版本的PubSubClient,你看到这篇文章是可能这个库以及更新好几个版本了,你可以选择下载5.8.2版本或者找其他的解决方法

#include <Wire.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>

/*MQTT连接配置*/
/*-----------------------------------------------------*/
// 定义WiFi连接信息
const char* ssid = "JackJiang";//WIFI名字
const char* password = "jianggengjie.";//WIFI密码
const char* mqttServer = "f66c09c11d.st1.iotda-device.cn-north-4.myhuaweicloud.com";//华为云接入地址
const int  mqttPort = 1883;
//以下3个参数可以由HMACSHA256算法生成,为硬件通过MQTT协议接入华为云IoT平台的鉴权依据
const char* clientId = "68cd3dffd582f2001850df01_2165151652_0_0_2025091911";
const char* mqttUser = "68cd3dffd582f2001850df01_2165151652";
const char* mqttPassword = "143e4b1cac05768a6fac83bc267e11d466c8facd5ca91aa185e4bccea348f266";
WiFiClient espClient; //ESP32WiFi模型定义
PubSubClient client(espClient);

const char* topic_properties_report = "$oc/devices/6617f5cb2ccc1a583880be12_firsttemp/sys/properties/report";

//接收到命令后上发的响应topic
char* topic_Commands_Response = "$oc/devices/6617f5cb2ccc1a583880be12_firsttemp/sys/properties/report";
#define Iot_link_Body_Format "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{%s"  
/*******************************************************/

/*
 * 作用:  ESP32的WiFi初始化以及与MQTT服务器的连接
 * 参数:  无
 * 返回值:无
 */
void MQTT_Init()
{
//WiFi网络连接部分
  WiFi.begin(ssid, password); //开启ESP32的WiFi
  while (WiFi.status() != WL_CONNECTED) { //ESP尝试连接到WiFi网络
    delay(3000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to the WiFi network");


//MQTT服务器连接部分
  client.setServer(mqttServer, mqttPort); //设置连接到MQTT服务器的参数
  client.setKeepAlive (60); //设置心跳时间
  while (!client.connected()) { //尝试与MQTT服务器建立连接
    Serial.println("Connecting to MQTT...");
    if (client.connect(clientId, mqttUser, mqttPassword )) {
      Serial.println("connected");  
    } else {
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(6000);
    }
  }
//接受平台下发内容的初始化
  //client.setCallback(callback); //可以接受任何平台下发的内容
}

void setup() {
  Serial.begin(115200);
  MQTT_Init();
}

/*
 * 作用:  垃圾桶容量上报到MQTT服务器任务
 * 参数:  (int)垃圾桶容量,1代表垃圾桶满了,0代表垃圾桶未满
 * 返回值:无
 * 命名说明:Capacity:容量
 */
void TASK_Capacity_Report(int capacity)
{

//以下部分代码调用了ArduinoJson库将属性上报消息打包为JSON格式
//此部分代码可以通过ArduinoJson库的官方网站直接生成
  StaticJsonBuffer<300> JSONbuffer; //定义静态的JSON缓冲区用于存储JSON消息
  JsonObject& root = JSONbuffer.createObject();
  JsonArray& services = root.createNestedArray("services");
  JsonObject& service_1 = services.createNestedObject();
  JsonObject& properties_1_1 = service_1.createNestedObject("properties");

  service_1["service_id"] = "temp";
  properties_1_1["temperature"] = capacity;

//  root.prettyPrintTo(Serial);//调试用,将JSON打印到串口

//以下将生成好的JSON格式消息格式化输出到字符数组中,便于下面通过PubSubClient库发送到服务器
  char JSONmessageBuffer[100];
  root.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));

  Serial.println("Sending message to MQTT topic..");
  Serial.println(JSONmessageBuffer);

//以下代码将打包好的JSON数据包通过PubSubClient库发送到服务器 
  if (client.publish(topic_properties_report, JSONmessageBuffer) == true) {
    Serial.println("Success sending message");
  } else {
    Serial.println("Error sending message");
  }
//由于本函数是放在loop中不断循环执行,所以添加client.loop()进行保持硬件的活跃度
//避免由于长时间未向服务器发送消息而被服务器踢下线
  client.loop();
  Serial.println("-------------");

}

void loop() 
{
  for(int i = 0 ; i<256; i++)
  {
    delay(10000);
    TASK_Capacity_Report(i);
  }
}
  • 2、配置WIFI以及接入信息,复制内容然后粘贴到代码
// 定义WiFi连接信息
const char* ssid = "JackJiang";   //WIFI名称
const char* password = "jianggengjie.";    //WIFI密码
const char* mqttServer = "f66c09c11d.st1.iotda-device.cn-north-4.myhuaweicloud.com";
const int  mqttPort = 1883;

  • 3、继续改,把刚才浏览器自动下载的文件打开,分别粘贴进去,然后把得到的结果分别替换到你的代码中

    Huaweicloud IoTDA

const char* clientId = "68cd3dffd582f2001850df01_2165151652_0_0_2025091911";
const char* mqttUser = "68cd3dffd582f2001850df01_2165151652";
const char* mqttPassword = "143e4b1cac05768a6fac83bc267e11d466c8facd5ca91aa185e4bccea348f266";

  • 4、最后一步,替换代码内容
  service_1["service_id"] = "temp";
  properties_1_1["temperature"] = capacity;

上传代码

用Arduino上传代码后再回到华为云查看就可以看见设备状态在线了