找回密码
 立即注册

QQ登录

只需一步,快速开始

ESP8266接入阿里云物联网平台-远程监测室温
(基于Wemos D1 WIFI开发板)



一、阿里云物联网平台设置

注册阿里云账号,进入阿里云物联网平台。

142.png

在设备管理->产品->创建产品,设置参见下图,然后保存,创建产品。

143.png

接下来添加设备,我们名称设置为“H-TEMP”,备注名称“室内温度”,点击确认,完成设备添加。

144.png

此时点击左侧导航栏“产品”,在我们创建的产品“物联网测试02-室温检测”,点击查看。

145.png

我们给他添加一个显示温度的功能定义,选择“功能定义”标签,点击“编辑草稿”。

146.png

147.png

可以点击“添加标准功能”,选择一些预设的功能,我们这里选择“添加自定义功能”。参数参考如下:

148.png

点击确认,添加完成一个标识符为“RoomTemp”显示温度(属性)的功能,点击底部的“发布上线”,完成设置。

149.png

此时我们点击左侧栏“设备”,查看我们创建好的“H-TEMP”,点击查看,在跳出的页面中,选择“物模型数据”标签。

150.png

在“运行状态”中已经显示了一个“室温显示”的模块,此时阿里云物联网平台设置已经完成,接下来对开发板端进行代码编程。

二、硬件端配置

首先对Arduino IDE进行正确配置,参见【WEMOS D1 WIFI开发基础资料】文档。

1,硬件连接

Wemos D1 WIFI板                          DHT11温湿度传感器
            5V                    <------>                     +
          GND                  <------>                      -
            D7                   <------>                   OUT

2,代码实现

在输入代码之前需要安装一些会调用到的库。在IDE“项目”->“加载库”->“管理库”,打开“库管理器”。

151.png

搜索以下三个库文件,安装。

152.png

153.png

154.png

安装“DHT sensor library”库文件,点击”Install all”。

155.png

代码如下:

  1. #include <ESP8266WiFi.h>
  2. /* 依赖 PubSubClient 2.4.0 */
  3. #include <PubSubClient.h>
  4. /* 依赖 ArduinoJson 5.13.4 */
  5. #include <ArduinoJson.h>
  6. #include <AliyunIoTSDK.h>
  7. #include <DHT.h> //DHT温湿度传感器库
  8. #define SENSOR_PIN    13
  9. DHT dht13(13, 11);
  10. Int TEMP;
  11. /* 连接您的WIFI SSID和密码 */
  12. #define WIFI_SSID         "bangong2"
  13. #define WIFI_PASSWD       "lejuxingyuanli"
  14. /* 设备的三元组信息*/
  15. #define PRODUCT_KEY      "a1yrZSZyptv" //替换自己的PRODUCT_KEY
  16. #define DEVICE_NAME      "H-TEMP" //替换自己的DEVICE_NAME
  17. #define DEVICE_SECRET    "M8tUELIjli6KSK8vHyrdCNETexkFc3yd"//替换自己的DEVICE_SECRET
  18. #define REGION_ID         "cn-shanghai"
  19. /* 线上环境域名和端口号,不需要改 */
  20. #define MQTT_SERVER       PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
  21. #define MQTT_PORT         1883
  22. #define MQTT_USRNAME      DEVICE_NAME "&" PRODUCT_KEY
  23. /* MQTT设置 */
  24. #define CLIENT_ID         "123456|securemode=3,signmethod=hmacsha1|"
  25. #define MQTT_PASSWD       "B675E589C5912CECB536A5DFE071BEB34C1AB117"

  26. #define ALINK_BODY_FORMAT       "{"id":"123","version":"1.0","method":"thing.event.property.post","params":%s}"
  27. #define ALINK_TOPIC_PROP_POST    "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
  28. unsigned long lastMs = 0;
  29. WiFiClient espClient;
  30. PubSubClient  client(espClient);

  31. void callback(char *topic, byte *payload, unsigned int length)
  32. {
  33.     Serial.print("Message arrived [");
  34.     Serial.print(topic);
  35.     Serial.print("] ");
  36.     payload[length] = '\0';
  37.     Serial.println((char *)payload);
  38. }

  39. void wifiInit()
  40. {
  41.     WiFi.mode(WIFI_STA);
  42.     WiFi.begin(WIFI_SSID, WIFI_PASSWD);
  43.     while (WiFi.status() != WL_CONNECTED)
  44.     {
  45.         delay(1000);
  46.         Serial.println("WiFi not Connect");
  47.     }
  48.     Serial.println("Connected to AP");
  49.     Serial.println("IP address: ");
  50.     Serial.println(WiFi.localIP());
  51.     Serial.print("espClient [");
  52.     client.setServer(MQTT_SERVER, MQTT_PORT);   /* 连接WiFi之后,连接MQTT服务器 */
  53.     client.setCallback(callback);
  54. }

  55. void mqttCheckConnect()
  56. {
  57.     while (!client.connected())
  58.     {
  59.         Serial.println("Connecting to MQTT Server ...");
  60.         if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
  61.         {
  62.             Serial.println("MQTT Connected!");
  63.         }
  64.         else
  65.         {
  66.             Serial.print("MQTT Connect err:");
  67.             Serial.println(client.state());
  68.             delay(5000);
  69.         }
  70.     }
  71. }
  72. /* 绑定设备,标识符“RoomTemp” */
  73. void mqttIntervalPost()
  74. {
  75.     char param[500];
  76. char jsonBuf[1023];
  77. TEMP = dht13.readTemperature();
  78.     sprintf(param, "{"RoomTemp":%d}", dht13.readTemperature());
  79.     sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
  80.     Serial.println(jsonBuf);
  81.     boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
  82.     Serial.print("publish:0 失败;1成功");
  83.     Serial.println(d);
  84. }

  85. void setup()
  86. {
  87.     pinMode(SENSOR_PIN,  INPUT);
  88.     /* initialize serial for debugging */
  89.     Serial.begin(115200);
  90.     Serial.println("Demo Start");
  91.     wifiInit();
  92.     dht13.begin();
  93. }

  94. // the loop function runs over and over again forever
  95. void loop()
  96. {
  97.     mqttCheckConnect();
  98.     /* 上报 */
  99.     mqttIntervalPost();
  100.     client.loop();
  101.     Serial.print(dht13.readTemperature());
  102.     delay(5000);
  103. }
复制代码

关于其中设备三元信息,可以在阿里云物联网平台,点击左侧导航栏“设备”,在设备“H-TEMP”右侧点击“查看”。

156.png

在出现的信息页面中,点击上部的“查看”,得到设备三元信息。

157.png

将信息修改进代码中:

  1. /* 设备的三元组信息*/
  2. #define PRODUCT_KEY      "a1yrZSZyptv" //替换自己的PRODUCT_KEY
  3. #define DEVICE_NAME      "H-TEMP" //替换自己的DEVICE_NAME
  4. #define DEVICE_SECRET    "M8tUELIjli6KSK8vHyrdCNETexkFc3yd"//替换自己的DEVICE_SECRET
  5. #define REGION_ID         "cn-shanghai"
复制代码

关于其中MQTT设置,获取CLIENT_ID和MQTT_PASSWD,首先下载MQTT签名工具。
百度网盘下载链接:https://pan.baidu.com/s/1BQdTe_WCnFm0nG0A9VEBow
提取码:6erm
解压后得到如下文件,打开“sign.html”文件,得到签名页面。

158.png

159.png

productKey:设备所属产品Key。可在控制台设备详情页查看;
deviceName:设备名称。可在控制台设备详情页查看;
deviceSecret:设备密钥。可在控制台设备详情页查看;
以上三项是设备三元信息,获取方式见中说明。
timestamp:(可不填)时间戳;
clientId:设备的ID信息,可取任意值,长度在64字符以内。建议使用设备的MAC地址或SN码。这里我们演示用先默认设123456;
method:选择签名算法类型,我们默认选择hmacsha1。
然后点击“Generate”,生成密码。

160.png

代码中“Client ID”的填写格式为:“clientId|securemode=3,signmethod=hmacsha1|”
上面我们“clientId”设为了123456,securemode为安全模式,TCP直连模式设置为securemode=3,TLS直连为securemode=2,signmethod为算法模型支持hmacmd5和hmacsha1,我们在签名工具中选择了hmacsha1。
所以这里“Client ID”完整格式为:“123456|securemode=3,signmethod=hmacsha1|”,代码如下:

  1. /* MQTT设置 */
  2. #define CLIENT_ID         "123456|securemode=3,signmethod=hmacsha1|"
  3. #define MQTT_PASSWD       "DD037ABB82B5E9A47B1E60E256DC0E0AFA57D71E"
复制代码

修改PubSubClient.h库文件参数;
在路径C:\Users\admin\Documents\Arduino\libraries\PubSubClient\src文件夹中找到“PubSubClient.h”文件,用Notepad++软件打开。修改如下两处值分别为1024、60。

161.png

阿里云对客户端的链接参数有一些限制,所以需要修改 PubSubClient 以上的连接参数,否则无法使用。

3,运行效果

162.png

在阿里云物联网平台设备列表中,点击对应设备栏右侧查看,选择“物模型数据”标签,在“运行状态”标签中可以实时查看温度数据。

163.png
分享至 : QQ空间
收藏
您需要登录后才可以回帖 登录 | 立即注册