当前位置:   article > 正文

ESP8266(arduino方式)快速连接阿里云物联网平台(AliYun)_阿里云物联网json和alinkjson

阿里云物联网json和alinkjson

 

一、前言

     最近物联网越来越火,阿里也出了自己的物联网平台,对于物联网工程师来说,简直是天大的福音。阿里云物联网平台支持MQTT,手头上正好有ESP8266开发板,拿来练练手。对于开发ESP8266的小伙伴们来说,开发8266可以用SDK或者Arduino来开发,Arduino极大的简化了开发复杂度,所以本次开发就用Arduino。

二、工具准备

     1.一个ESP8266开发板

12

三、阿里云平台注册设备(创建高级设备)

     1.创建教程https://help.aliyun.com/document_detail/73705.html?spm=a2c4g.11174283.4.4.3a8b1668DyM7sV

     2.主要地方用图说明

     12

四、源代码修改

1.修改ESP8266.ino

  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>
  3. #include <ArduinoJson.h>
  4. #include "aliyun_mqtt.h"
  5. // GPIO 13, D7 on the Node MCU v3
  6. #define SENSOR_PIN 13
  7. #define WIFI_SSID "CMCC-123"//替换自己的WIFI
  8. #define WIFI_PASSWD "12345678"//替换自己的WIFI
  9. #define PRODUCT_KEY "abcvfg" //替换自己的PRODUCT_KEY
  10. #define DEVICE_NAME "Temp_Sensor" //替换自己的DEVICE_NAME
  11. #define DEVICE_SECRET "QhT3OdM9Yi4izSgiXdjKOPIoCzQbVcLy"//替换自己的DEVICE_SECRET
  12. #define DEV_VERSION "S-TH-WIFI-v1.0-20190220" //固件版本信息
  13. #define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
  14. #define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
  15. #define ALINK_TOPIC_PROP_POSTRSP "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post_reply"
  16. #define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
  17. #define ALINK_METHOD_PROP_POST "thing.event.property.post"
  18. #define ALINK_TOPIC_DEV_INFO "/ota/device/inform/" PRODUCT_KEY "/" DEVICE_NAME ""
  19. #define ALINK_VERSION_FROMA "{\"id\": 123,\"params\": {\"version\": \"%s\"}}"
  20. unsigned long lastMs = 0;
  21. WiFiClient espClient;
  22. PubSubClient mqttClient(espClient);
  23. void init_wifi(const char *ssid, const char *password)
  24. {
  25. WiFi.mode(WIFI_STA);
  26. WiFi.begin(ssid, password);
  27. while (WiFi.status() != WL_CONNECTED)
  28. {
  29. Serial.println("WiFi does not connect, try again ...");
  30. delay(500);
  31. }
  32. Serial.println("Wifi is connected.");
  33. Serial.println("IP address: ");
  34. Serial.println(WiFi.localIP());
  35. }
  36. void mqtt_callback(char *topic, byte *payload, unsigned int length)
  37. {
  38. Serial.print("Message arrived [");
  39. Serial.print(topic);
  40. Serial.print("] ");
  41. payload[length] = '\0';
  42. Serial.println((char *)payload);
  43. if (strstr(topic, ALINK_TOPIC_PROP_SET))
  44. {
  45. StaticJsonBuffer<100> jsonBuffer;
  46. JsonObject &root = jsonBuffer.parseObject(payload);
  47. if (!root.success())
  48. {
  49. Serial.println("parseObject() failed");
  50. return;
  51. }
  52. }
  53. }
  54. void mqtt_version_post()
  55. {
  56. char param[512];
  57. char jsonBuf[1024];
  58. //sprintf(param, "{\"MotionAlarmState\":%d}", digitalRead(13));
  59. sprintf(param, "{\"id\": 123,\"params\": {\"version\": \"%s\"}}", DEV_VERSION);
  60. // sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);
  61. Serial.println(param);
  62. mqttClient.publish(ALINK_TOPIC_DEV_INFO, param);
  63. }
  64. void mqtt_check_connect()
  65. {
  66. while (!mqttClient.connected())//mqtt���
  67. {
  68. while (connect_aliyun_mqtt(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET))
  69. {
  70. Serial.println("MQTT connect succeed!");
  71. //client.subscribe(ALINK_TOPIC_PROP_POSTRSP);
  72. mqttClient.subscribe(ALINK_TOPIC_PROP_SET);
  73. Serial.println("subscribe done");
  74. mqtt_version_post();
  75. }
  76. }
  77. }
  78. void mqtt_interval_post()
  79. {
  80. char param[512];
  81. char jsonBuf[1024];
  82. //sprintf(param, "{\"MotionAlarmState\":%d}", digitalRead(13));
  83. sprintf(param, "{\"CurrentHumidity\":%d,\"CurrentTemperature\":12,\"GeoLocation\":{\"CoordinateSystem\":2,\"Latitude\":2,\"Longitude\":123,\"Altitude\":1}}", digitalRead(13));
  84. sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);
  85. Serial.println(jsonBuf);
  86. mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
  87. }
  88. void setup()
  89. {
  90. pinMode(SENSOR_PIN, INPUT);
  91. /* initialize serial for debugging */
  92. Serial.begin(115200);
  93. Serial.println("Demo Start");
  94. init_wifi(WIFI_SSID, WIFI_PASSWD);
  95. mqttClient.setCallback(mqtt_callback);
  96. }
  97. // the loop function runs over and over again forever
  98. void loop()
  99. {
  100. if (millis() - lastMs >= 20000)
  101. {
  102. lastMs = millis();
  103. mqtt_check_connect();
  104. /* Post */
  105. mqtt_interval_post();
  106. }
  107. mqttClient.loop();
  108. unsigned int WAIT_MS = 2000;
  109. if (digitalRead(SENSOR_PIN) == HIGH)
  110. {
  111. Serial.println("Motion detected!");
  112. }
  113. else
  114. {
  115. Serial.println("Motion absent!");
  116. }
  117. delay(WAIT_MS); // ms
  118. Serial.println(millis() / WAIT_MS);
  119. }

 

2.修改PubSubClient.h(该图借用别人的)

3.arduino安装加密库

4.编译下载,重新上电

五、源代码下载

1.https://gitee.com/schuck/ESP8266_AliYun

2.https://download.csdn.net/download/ziqi5543/11045211

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

闽ICP备14008679号