博客
关于我
基于Arduino的ESP32-S3连接OneNET云平台实战指南(四)——ESP32-S3连接OneNET云平台的订阅主题与发布主题、消息(数据流)
阅读量:787 次
发布时间:2023-01-23

本文共 2230 字,大约阅读时间需要 7 分钟。

前言

本系列从零基础开始,详细介绍了ESP32-S3连接OneNET云平台的完整流程。涵盖数据流模型设计、MQTT协议配置及代码实现,推荐搭配Arduino IDE 2.0+和ESP32-S3开发板使用。

核心代码解析

1. 修改对应的WiFi、密码、PRODUCT_ID、DEVICE_ID、TOKEN等参数,其他不需要修改。
#include
#include
#include
#include

/云平台下发格式/

/{ "TLED": { "v": 1 // 1=开灯,0=关灯 }}/

配置参数:

const char* ssid = "your_wifi";
const char* password = "your_password";
const char* mqtt_server = "mqtts.heclouds.com";
const int mqtt_port = 1883;

#define PRODUCT_ID "//"

#define DEVICE_ID "//"
#define TOKEN "/**/"
#define TLED_PIN 5

数据定义:

int msgId = 1;
float temp = 22.60;
int humi = 80;
int TLED_state = 0;

WiFiClient espClient;

PubSubClient client(espClient);

MQTT主题:

const char* pubTopic = "$sys/" PRODUCT_ID "/" DEVICE_ID "/dp/post/json";
const char* subTopic = "$sys/" PRODUCT_ID "/" DEVICE_ID "/#";

void setup():

Serial.begin(115200);
pinMode(TLED_PIN, OUTPUT);
digitalWrite(TLED_PIN, TLED_state);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(mqttCallback);
mqttConnect();

void loop():

if (!client.connected()) {
mqttConnect();
}
client.loop();

static unsigned long lastPost = 0;

if (millis() - lastPost >= 3000) {
postData();
lastPost = millis();
}

void mqttConnect():

while (!client.connected()) {
if (client.connect(DEVICE_ID, PRODUCT_ID, TOKEN)) {
client.subscribe(subTopic);
Serial.println("Subscribed to control topic");
} else {
delay(5000);
}
}

void postData():

JsonDocument doc;
if (msgId > 65535) msgId = 1;
doc["id"] = msgId++;

JsonObject dp = doc["dp"].toJson();

JsonObject tempObj = dp["temp"].toJson();
tempObj["v"] = temp;

JsonObject humiObj = dp["humi"].toJson();

humiObj["v"] = humi;

JsonObject ledObj = dp["TLED"].toJson();

ledObj["v"] = TLED_state;

char payload[256];

serializeJson(doc, payload);
if (client.publish(pubTopic, payload)) {
Serial.println("Data sent:");
Serial.println(payload);
}

void mqttCallback(char* topic, byte* payload, unsigned int length):

String msg;
for (int i = 0; i < length; i++) {
msg += payload[i];
}

数据上传

插入图片1...

命令下发

注意事项: - 调整响应时间至最小值,避免延迟。 - 确保命令下发格式正确。 - 右侧响应超时正常,不影响命令下发。

插入图片2...

总结

本文详细介绍了ESP32-S3连接OneNET云平台的完整流程,涵盖了数据流模型设计、MQTT协议配置及代码实现。

如果需要更详细代码解析,请私聊。

转载地址:http://vceyk.baihongyu.com/

你可能感兴趣的文章
反转链表,(5)
查看>>
Camera (api1)的打开过程
查看>>
wxwidgets绘图
查看>>
wxwidgets事件处理
查看>>
用OpenCv转换原始图像数据到wximage
查看>>
codeblocks下wxWidgets编译与配置
查看>>
OpenCv+wxwidgets尝试
查看>>
wxwidgets自定义事件+调试
查看>>
wxwidgets编写多线程程序--wxThread
查看>>
三维点云处理
查看>>
springboot security 基于redis的session共享(7)
查看>>
vue 权限管理 菜单按钮权限控制(7)
查看>>
vue 权限管理 主题切换(8)
查看>>
Qt 在Excel文件中Chart绘图
查看>>
01-webpack5理解及配置
查看>>
webpack的安装和使用
查看>>
Unable to run Intel® HAXM installer: 无法启动过程,工作目录
查看>>
Vue.js学习-15-v-for循环数组内容
查看>>
kafka超时错误或者发送消息失败等错误,排错方式
查看>>
sockjs-node/info?t=1462183700002 报错解决方案
查看>>