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、继续改,把刚才浏览器自动下载的文件打开,分别粘贴进去,然后把得到的结果分别替换到你的代码中
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上传代码后再回到华为云查看就可以看见设备状态在线了

