文章目录
一、onenet物联网平台操作
首先创建产品:
接着创建设备:
创建物模型:
接着便是计算接入的token:
在自己的产品详情以及设备详情中找到下面的信息:
接着下载下面的工具用于计算token:
在网页上使用时间戳计算工具:
输入未来时间(就是你希望你的这个token在什么时候过期失效)
随后将自己的产品id和设备id替换掉第一行中的相关部分,第二行为未来的时间戳,第三行为自己的access_key,点击生成即可
二、esp32端代码
如下为esp32端的代码:将其中的相关部分替换为自己的内容,以及修改上报数据格式和sendMessage()这个函数的相关定义改为自己的数据格式就行。
查找onenet手册得知MQTT接入地址:
#include <Arduino.h>
#include "WiFi.h"
#include "PubSubClient.h"
const char *ssid = "res2"; // WiFi名
const char *password = "123456789"; // WiFi密码
const char *mqtt_server = "mqtts.heclouds.com"; // OneNET MQTT服务器地址
const int port = 1883; // 端口号
#define mqtt_pubid "TAZEUgwp61" // 产品ID
#define mqtt_devid "esp32_device" // 设备名称
// 鉴权信息
#define mqtt_password "version=2018-10-31&res=products%2FTAZEUgwp61%2Fdevices%2Fesp32_device&et=1777432654&method=md5&sign=y6zEIz3OggO%2FQ9vu4ZcUSg%3D%3D"
WiFiClient espClient; // 创建一个WIFI连接客户端
PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端
// 设备上传数据的post主题
#define ONENET_TOPIC_PROP_POST "$sys/" mqtt_pubid "/" mqtt_devid "/thing/property/post"
// 这是post上传数据格式
#define ONENET_POST_BODY_FORMAT "{\"id\":\"%u\",\"params\":%s}"
int postMsgId = 0; // 记录已经post了多少条
unsigned long lastMsgTime = 0; // 上次发送消息的时间
// 连接WIFI相关函数
void setupWifi() {
delay(10);
Serial.println("连接WiFi...");
WiFi.begin(ssid, password);
while (!WiFi.isConnected()) {
Serial.print(".");
delay(500);
}
Serial.println("WiFi已连接!");
Serial.println("IP地址: ");
Serial.println(WiFi.localIP());
}
// 发送消息到OneNET平台
void sendMessage() {
if (client.connected()) {
// 拼接JSON字符串
char param[100];
char jsonBuf[200];
// 构造消息内容,只有message物模型
sprintf(param, "{\"message\":{\"value\":\"chelsea the king of north london\"}}");
postMsgId += 1;
sprintf(jsonBuf, ONENET_POST_BODY_FORMAT, postMsgId, param);
// 发布消息
if (client.publish(ONENET_TOPIC_PROP_POST, jsonBuf)) {
Serial.print("消息发送成功: ");
Serial.println(jsonBuf);
} else {
Serial.println("消息发送失败!");
}
}
}
// 重连函数, 如果客户端断线,可以通过此函数重连
void clientReconnect() {
while (!client.connected()) {
Serial.println("重新连接MQTT...");
if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)) {
Serial.println("已连接!");
} else {
Serial.print("连接失败, 错误码: ");
Serial.println(client.state());
Serial.println("5秒后重试...");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200); // 初始化串口
delay(1000);
setupWifi(); // 连接WiFi
client.setServer(mqtt_server, port); // 设置MQTT服务器
client.setKeepAlive(120); // 设置心跳时间
// 连接MQTT服务器
if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)) {
Serial.println("OneNET平台已连接!");
}
}
void loop() {
// 检查WiFi连接
if (!WiFi.isConnected()) {
setupWifi();
}
// 检查MQTT连接
if (!client.connected()) {
clientReconnect();
}
// 每2秒发送一次消息
unsigned long currentMillis = millis();
if (currentMillis - lastMsgTime >= 2000) {
lastMsgTime = currentMillis;
sendMessage();
}
client.loop(); // 客户端循环检测
}
三、测试
合理!!!!!!