ESP32连接OneNET |
您所在的位置:网站首页 › at指令mqtt协议发布onenet的数据流模型数据 › ESP32连接OneNET |
ESP32连接OneNET-MQTT平台传送数据
一、首先在OneNET上创建一个产品和一个设备1、创建MQTT产品2、为产品添加设备3、为设备创建数据流
二、使用OneNET提供的MQTT软件测试MQTT三、使用MQTT发送数据到OneNET四、使用ESP32连接OneNet-MQTT1、ESP32-Arduino IDE 开发环境的搭建2、代码实现3、实现效果
一、首先在OneNET上创建一个产品和一个设备
1、创建MQTT产品
第一步: 第一步: 第一步: 软件下载地址,OneNet官网:https://open.iot.10086.cn/doc/mqtt/book/get-start/connect.html 打开MQTT软件后: 第一步: 以下网址必看: MQTT地址和端口号的配置:(我这里选择的是非加密接口) https://open.iot.10086.cn/doc/mqtt/book/device-develop/manual.html token算法详解:https://open.iot.10086.cn/doc/mqtt/book/manual/auth/token.html token算法工具以及使用: https://open.iot.10086.cn/doc/mqtt/book/manual/auth/tool.html unix时间戳转换工具: https://tool.lu/timestamp/ 注意:使用的时间戳必须大于当前的时间,否则会提示密码错误,导致无法连接。 以上步骤完成后: 点击Connect够就连接成功啦! 参考官网,MQTT 协议规范:https://open.iot.10086.cn/doc/mqtt/book/device-develop/protocol.html 参考官网,数据点 topic 簇: https://open.iot.10086.cn/doc/mqtt/book/device-develop/topics/dp-topics.html 第一步:首先订阅 “订阅设备数据点上报结果 ”; 注意修改产品ID和设备名称,其他的目前OneNet不允许修改。 $sys/426214/radar/dp/post/json/+第二步:发布消息; $sys/426214/radar/dp/post/json
查看订阅消息: 在云平台查看发送的数据: 以上测试都成功后,其实就是用代码在实现一遍这个过程。 注意,这个ESP32是未烧写任何固件的,如果之前少写过其他的固件,请先擦出后再使用。 1、ESP32-Arduino IDE 开发环境的搭建Arduino IDE 下载: https://www.arduino.cc/en/software 在Arduino IDE的开发版管理网址中添加:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json 之后就可以在开发版管理器中下载了,没梯子的源码安装吧。 这里就不赘述了。 直接上代码吧: 参考:https://blog.csdn.net/finedayforu/article/details/111517908 #include #include "WiFi.h" #include "PubSubClient.h" #include "Ticker.h" //#include "uFire_SHT20.h" #include "ArduinoJson.h" //uFire_SHT20 sht20; const char* ssid = "NET502"; //wifi名 const char* password = "502502502"; //wifi密码 const char* mqtt_server = "mqtts.heclouds.com"; //onenet 的 IP地址 mqtts.heclouds.com 183.230.40.96 const int port = 1883; //端口号 #define mqtt_pubid "426214" //产品ID #define mqtt_devid "radar" //设备名称 //鉴权信息 #define mqtt_password "version=2018-10-31&res=products%2F426214%2Fdevices%2Fradar&et=1552234385&method=md5&sign=GZpCklfYK8LviOhGxXP3Iw%3D%3D" //鉴权信息 WiFiClient espClient; //创建一个WIFI连接客户端 PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端 Ticker tim1; //定时器,用来循环上传数据 Ticker tim2; //定时器,用来循环上传数据 float temp; float humi; float dis; //设备上传数据的post主题 #define ONENET_TOPIC_PROP_POST "$sys/" mqtt_pubid "/" mqtt_devid "/dp/post/json" //"$sys/" mqtt_pubid "/" mqtt_devid "/thing/property/post" //接收下发属性设置主题 #define ONENET_TOPIC_PROP_SET "$sys/" mqtt_pubid "/" mqtt_devid "/dp/post/json/+" //"$sys/" mqtt_pubid "/" mqtt_devid "/thing/property/set" //接收下发属性设置成功的回复主题 #define ONENET_TOPIC_PROP_SET_REPLY "$sys/" mqtt_pubid "/" mqtt_devid "/dp/post/accepted" //"$sys/" mqtt_pubid "/" mqtt_devid "/thing/property/set_reply" //接收设备属性获取命令主题 #define ONENET_TOPIC_PROP_GET "$sys/" mqtt_pubid "/" mqtt_devid "/cmd/request/+" //"$sys/" mqtt_pubid "/" mqtt_devid "/thing/property/get" //接收设备属性获取命令成功的回复主题 #define ONENET_TOPIC_PROP_GET_REPLY "$sys/" mqtt_pubid "/" mqtt_devid "/cmd/response/+/+" //"$sys/" mqtt_pubid "/" mqtt_devid "/thing/property/get_reply" //这是post上传数据使用的模板 #define ONENET_POST_BODY_FORMAT "{\"id\":%d,\"dp\":%s}" //#define ONENET_POST_BODY_FORMAT int postMsgId = 0; //记录已经post了多少条 //连接WIFI相关函数 void setupWifi() { delay(10); Serial.println("connect WIFI"); WiFi.begin(ssid, password); while (!WiFi.isConnected()) { Serial.print("."); delay(500); } Serial.println("OK"); Serial.println("Wifi connected!"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } //向主题发送模拟的温湿度数据 void sendTempAndHumi() { if (client.connected()) { //先拼接出json字符串 char param[82]; char jsonBuf[178]; //sprintf(param, "{ \"temp\":[{\"v\":%.2f}],\"humi\":[{\"v\":%.2f}] }", temp, humi); //我们把要上传的数据写在param里 sprintf(param, "{ \"dis\":[{\"v\":%.2f}] }", dis); //我们把要上传的数据写在param里 postMsgId += 1; sprintf(jsonBuf, ONENET_POST_BODY_FORMAT, postMsgId, param); //再从mqtt客户端中发布post消息 if (client.publish(ONENET_TOPIC_PROP_POST, jsonBuf)) { Serial.print("Post message to cloud: "); Serial.println(jsonBuf); } else { Serial.println("Publish message to cloud failed!"); } } } //重连函数, 如果客户端断线,可以通过此函数重连 void clientReconnect() { while (!client.connected()) //再重连客户端 { Serial.println("reconnect MQTT..."); if ( client.connect(mqtt_devid, mqtt_pubid, mqtt_password) ) { Serial.println("connected"); } else { Serial.println("failed"); Serial.println(client.state()); Serial.println("try again in 5 sec"); delay(5000); } } } void callback(char *topic, byte *payload, unsigned int length) { Serial.println("message rev:"); Serial.println(topic); for (size_t i = 0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |