博客
关于我
基于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/

你可能感兴趣的文章
Thymeleaf sec:authorize 标签不生效
查看>>
测试tensorflow是否安装成功 出现 SyntaxError: invalid syntax的错误
查看>>
Flask--简介
查看>>
Frame--Api框架
查看>>
Boostrap技能点整理之【网格系统】
查看>>
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
查看>>
Git简单理解与使用
查看>>
echarts 基本图表开发小结
查看>>
adb通过USB或wifi连接手机
查看>>
JDK9-15新特性
查看>>
TreeSet、TreeMap
查看>>
JVM内存模型
查看>>
可变长度参数
查看>>
3、条件查询
查看>>
cordova打包apk更改图标
查看>>
GitHub上传时,项目在已有文档时直接push出现错误解决方案
查看>>
文件系统的层次结构
查看>>
vue(渐进式前端框架)
查看>>
vscode设置eslint保存文件时自动修复eslint错误
查看>>
Remove Extra one 维护前缀最大最小值
查看>>