当前位置:   article > 正文

[转](38条消息) 玩转 ESP32 + Arduino (十二) 通过MQTT协议上传数据至OneNet云平台_onenet mqtt ip地址

onenet mqtt ip地址

这里我们使用了一个库: PubSubClient

format,png

中移动ONENET平台 IP地址: 183.230.40.39
旧版MQTT端口号: 6002

一. 在ONENET平台添加MQTT设备(旧版)

1. 添加

找到多协议接入入口

format,png

添加旧版MQTT产品

format,png

添加产品

format,png

添加产品成功

format,png

然后添加设备

format,png

2. 旧版MQTT关键信息

接下来我们来找到旧版MQTT关键的信息:

  1. 产品ID(在产品页面)
format,png

2.设备ID(在设备界面)

format,png

3.设备鉴权信息

format,png
format,png

二. ESP32连接ONENET旧版MQTT

思路: 1.连接网络 2.登录ONENET 3.发布主题信息

  1. #include <Arduino.h>
  2. #include "WiFi.h"
  3. #include "PubSubClient.h"
  4. #include "Ticker.h"
  5. const char *ssid = "anny"; //wifi名
  6. const char *password = "20141208"; //wifi密码
  7. const char *mqtt_server = "183.230.40.39"; //onenet 的 IP地址
  8. #define mqtt_devid "626108102" //设备ID
  9. #define mqtt_pubid "370025" //产品ID
  10. #define mqtt_password "test123" //鉴权信息
  11. WiFiClient espClient; //创建一个WIFI连接客户端
  12. PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端
  13. char msg_buf[200]; //发送信息缓冲区
  14. char dataTemplate[] = "{\"temp\":%.2f,\"hum\":%.2f}"; //信息模板
  15. char msgJson[75]; //要发送的json格式的数据
  16. unsigned short json_len = 0; //json长度
  17. Ticker tim1; //定时器,用来循环上传数据
  18. //连接WIFI相关函数
  19. void setupWifi()
  20. {
  21. delay(10);
  22. Serial.println("连接WIFI");
  23. WiFi.begin(ssid, password);
  24. while (!WiFi.isConnected())
  25. {
  26. Serial.print(".");
  27. delay(500);
  28. }
  29. Serial.println("OK");
  30. Serial.println("Wifi连接成功");
  31. }
  32. //收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度
  33. void callback(char *topic, byte *payload, unsigned int length)
  34. {
  35. Serial.println("message rev:");
  36. Serial.println(topic);
  37. for (size_t i = 0; i < length; i++)
  38. {
  39. Serial.print((char)payload[i]);
  40. }
  41. Serial.println();
  42. }
  43. //向主题发送模拟的温湿度数据
  44. void sendTempAndHumi()
  45. {
  46. if (client.connected())
  47. {
  48. snprintf(msgJson, 40, dataTemplate, 22.31, 25.92); //将模拟温湿度数据套入dataTemplate模板中, 生成的字符串传给msgJson
  49. json_len = strlen(msgJson); //msgJson的长度
  50. msg_buf[0] = char(0x03); //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3
  51. msg_buf[1] = char(json_len >> 8); //数据第二位是要发送的数据长度的高八位
  52. msg_buf[2] = char(json_len & 0xff); //数据第三位是要发送数据的长度的低八位
  53. memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJson
  54. msg_buf[3 + strlen(msgJson)] = 0; //添加一个0作为最后一位, 这样要发送的msg_buf准备好了
  55. Serial.print("public message:");
  56. Serial.println(msgJson);
  57. client.publish("$dp", (uint8_t *)msg_buf, 3 + strlen(msgJson)); //发送数据到主题$dp
  58. }
  59. }
  60. //重连函数, 如果客户端断线,可以通过此函数重连
  61. void clientReconnect()
  62. {
  63. while (!client.connected()) //再重连客户端
  64. {
  65. Serial.println("reconnect MQTT...");
  66. if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password))
  67. {
  68. Serial.println("connected");
  69. }
  70. else
  71. {
  72. Serial.println("failed");
  73. Serial.println(client.state());
  74. Serial.println("try again in 5 sec");
  75. delay(5000);
  76. }
  77. }
  78. }
  79. void setup()
  80. {
  81. Serial.begin(115200); //初始化串口
  82. delay(3000); //这个延时是为了让我打开串口助手
  83. setupWifi(); //调用函数连接WIFI
  84. client.setServer(mqtt_server, 6002); //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口
  85. client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息
  86. client.setCallback(callback); //设置好客户端收到信息是的回调
  87. tim1.attach(20, sendTempAndHumi); //定时每20秒调用一次发送数据函数sendTempAndHumi
  88. }
  89. void loop()
  90. {
  91. if (!WiFi.isConnected()) //先看WIFI是否还在连接
  92. {
  93. setupWifi();
  94. }
  95. if (!client.connected()) //如果客户端没连接ONENET, 重新连接
  96. {
  97. clientReconnect();
  98. }
  99. client.loop(); //客户端循环检测
  100. }

可以上传数据,也能接收到OneNet下发的命令

format,png
format,png

后来又在接收命令的callback里写了一个点灯, 下发命令1就开灯, 0就关灯

  1. if (payload[0] == 49)
  2. {
  3. digitalWrite(2, HIGH);
  4. }
  5. if (payload[0] == 48)
  6. {
  7. digitalWrite(2, LOW);
  8. }


---------------------
作者:finedayforu
来源:CSDN
原文:https://blog.csdn.net/finedayforu/article/details/108485481
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/699281
推荐阅读
相关标签
  

闽ICP备14008679号