[官方案例教程]阿里云IoT温湿度监测 精华

2019-3-11 19:39:42 [显示全部楼层]
36363浏览
查看: 36363|回复: 58

[官方案例教程] 阿里云IoT温湿度监测

[复制链接]
IoT温湿度监测


        哈哈,DF新推出了一套阿里云IoT入门套件,忍不住玩了一遍,使用过后,真的觉得实在是太强大,太方便了,只需要进行简单的设置,即可轻松搭建物联网环境,简直是我们这些小白用户的福音啊~ 撒花!!
      好了废话不多说,接下来就把我捣鼓的温湿度检测分享给大家吧!
      嘿嘿!上图


所需材料
FireBeetle ESP32-Board主控 x1
FireBeetle Gravity扩展板 x1
DHT11温湿度传感器 x1
3.7V锂电池 x1
智能手机 x1
当然有需要的朋友可以直接购买阿里云IoT入门套件,自己制作更多好玩有趣的项目哦~,好了接下来让我们进入正题吧!

制作步骤
在制作之前,先下载并安装下列依赖库:
下载附件DFRobot_Aliyun.rar
下载附件DFRobot_DHT11.rar
下载附件pubsubclient.rar
下载附件ArduinoJson-master.rar



一、硬件连接
      将焊接了排针的FireBeetle传感器扩展板直插在焊接排了排母的ESP32上,将DHT11温湿度传感器用数字线连接到扩展板的D2数字口,接上锂电池。
阿里云IoT温湿度监测图1

二、接下来,我们需要在阿里云IoT平台上和Arduino 平台上进行一系列的操作,来关联DHT11设备和阿里云IoT平台。
     (1)准备工作
      在操作之前,我们需要注册一个阿里云账号(已有账号的宝宝可以忽略此步哦~),打开网页,输入网址https://iot.aliyun.com,点击右上角的登录按钮,进入账号登录页面,再点击免费注册,即可进入阿里云账号注册界面,按要求注册即可,如下列图所示:

阿里云IoT温湿度监测图2

阿里云IoT温湿度监测图3

阿里云IoT温湿度监测图4
      (2)进入物联网管理控制台。
       输入网址https://iot.aliyun.com,登录阿里云IoT平台,点击设备接入,点击管理控制台第一次次进入该页面,显示的是立即开通,按要求开通即可,是免费的
阿里云IoT温湿度监测图5

阿里云IoT温湿度监测图6

    接下来,即可进入物联网平台管理控制台页面了,如下图所示,我们可以在该页面完成产品、设备、项目、服务的创建与开发。
阿里云IoT温湿度监测图7

      (3)创建产品及添加设备。
       我们需要在刚才的管理控制台页面创建一个虚拟设备,来关联物理设备DHT11和阿里云平台。
       由于设备必须挂载在产品下,所以创建设备之前,我们必须为设备创建相应的产品,并为产品添加相应的属性(如DHT11能够检测温度和湿度,那么我们需要在该产品下添加2个名为温度检测和湿度检测的属性),这样在该产品下添加名为DHT11的设备时,该设备即可自动继承该产品的属性。
  创建一个名为“温湿度监测”的产品,并为其添加名为“温度监测”和“湿度监测”的属性。
     Step1:产品创建。进入物联网平台页面,在左侧导航栏选择设备管理->产品选项,点击创建产品,在弹出的页面选择高级版,单击下一步

阿里云IoT温湿度监测图8

阿里云IoT温湿度监测图9

根据页面提示,填写产品信息。单击完成,该产品会自动出现在产品列表栏中。

阿里云IoT温湿度监测图10

       Step2:添加属性。在产品列表中,找到刚才创建的“温湿度监测”产品,单击其项后的查看按钮,即可进入产品详情页,单击功能定义,在自定义功能栏中,单击添加功能
阿里云IoT温湿度监测图11

阿里云IoT温湿度监测图12

在弹出的选项框中,按提示完成功能属性的添加相应的属性。这个属性的设置与DHT11这个物理设备的特性有关系,例:DHT11的温度范围为0~50摄氏度;湿度范围为20~90%RH(相对湿度)。单击确认后,该功能会自动出现在自定义功能栏中。用户可在此处查看产品表示符。         

  阿里云IoT温湿度监测图43


注:这里的标识符支持大小写字母、数字和下划线、不超过50个字),是用户自定义的,是关联物理设备同阿里云平台的重要参数之一。
  (4)为温湿度监测产品添加名为DHT11的设备。
       Step1:添加设备并获取设备证书信息。
       选择物联网平台页面左侧导航栏的设备管理->设备选项,单击添加设备
阿里云IoT温湿度监测图13

选择“温湿度监测”产品,设备名可自定义也可不填,根据页面提示,填写完毕后,单击确认完成设备添加,此时会弹出一个设备证书。添加完成后,DHT11设备会自动出现在产品列表中。
阿里云IoT温湿度监测图14

注:这里的DeviceName支持英文字母、数字和特殊字符-_@.:,长度限制4~32
阿里云IoT温湿度监测图15

该设备证书信息是是关联物理设备同阿里云平台的重要参数,还可以通过以下方式查看该证书信息:在设备列表栏找到DHT11设备,点击该项后的“查看”按钮,进入设备详情页,在设备信息栏即可看到设备证书的三个参数(ProductKey、DeviceName、DeviceSecret)
阿里云IoT温湿度监测图16

阿里云IoT温湿度监测图17

       Step2:获取TOPIC订阅和上报信息。
       进入DHT11的设备详情页,点击Topic列表,即可看到设备的上报和订阅TOPIC信息。
阿里云IoT温湿度监测图18

    (4)关联物理设备和阿里云IoT平台。
     打开Arduino IDE软件,将上述步骤得到的产品标识符、设备证书信息、订阅和上报Topic等信息复制粘贴到附件所示的代码中,在设置好WiFi名和密码。编译上传至ESP32主控中即可。
     阿里云IoT温湿度监测图19

以上几步完成了物理设备同阿里云IoT的连接,接下来就需要开发相应的App来操作该设备了。

三、在将物理设备DHT11连接到阿里云IoT平台上后,接下来,就需要在阿里云IoT平台上开发相应的App服务来实现手机App对DHT11的操作了。
      (1)创建一个名为智能家居管理的项目。
       服务和产品都必须挂载在某个项目下。才能实现某个产品和某个服务的连动,即通过操纵某个服务来改变或获取某个产品下某个设备的信息,从而获取或改变物理设备。
       选择物联网平台页面左侧导航栏的开发服务->IoT Studio选项,点击新建项目
阿里云IoT温湿度监测图21

  根据页面提示,完成项目创建,单击确定,该项目会自动出现在项目列表栏中。
阿里云IoT温湿度监测图20

       (2)导入产品。
        将刚才创建的温湿度监测产品导入智能家居管理项目中。在项目列表栏,找到“智能家居管理”项目,单击查看,点击导入产品
阿里云IoT温湿度监测图22


阿里云IoT温湿度监测图23



      (3)在左侧导航栏选择推荐->移动应用开发,点击新增可视化应用
阿里云IoT温湿度监测图24

根据页面提示,填写信息,单击完成
阿里云IoT温湿度监测图25


      (4)App开发。
       Step1:双击左侧导航栏的自定义新增页1,将其改为“温湿度检测”;
       Step2:点击左侧导航栏的UI组件->图标,将实时曲线拖动到中间的App页面中,拖2次。
    阿里云IoT温湿度监测图26

在App页面中,选中其中一个实时曲线1,将其配置为室内温度,点击右侧栏的数据选项
阿里云IoT温湿度监测图27

根据页面提示完成数据配置,单击确定
阿里云IoT温湿度监测图28


阿里云IoT温湿度监测图29



点击样式,编辑名称,将其改为室内温度
阿里云IoT温湿度监测图30


实时曲线2设置为室内湿度,设置方式同实时曲线1一样,如下图所示,点击保存。
阿里云IoT温湿度监测图31

阿里云IoT温湿度监测图32


        Step3:配置列表页。点击左侧导航栏首页模块->列表页,点击新增页面入口,根据提示,完成列表页配置,点击配置,将跳转链接链接到温湿度监测页面上。
阿里云IoT温湿度监测图33


       Step4:添加用户账号。点击左侧导航栏的账号,点击添加用户,根据提示完成账号的添加,若以前已经添加则无需再次添加账号。
阿里云IoT温湿度监测图34

       Step4 App发布。点击左侧导航栏的编辑,点击右上角的构建,根据手机系统选择Andriod构建iOS构建。选择我想自己使用,点击随机生成,单击下一步,等待构建完成。
         阿里云IoT温湿度监测图35
阿里云IoT温湿度监测图36


阿里云IoT温湿度监测图37

阿里云IoT温湿度监测图38

构建完成后,会生成如下所示二维码,使用手机微信二维码下载安装即可
阿里云IoT温湿度监测图39

打开智能家居控制台App,登录后页面如下所示;
   阿里云IoT温湿度监测图44




至此,就可以在手机App上观察室内温湿度状态了

代码如下:
[mw_shl_code=cpp,true]#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_Aliyun.h"
#include "DFRobot_DHT11.h"

#define DHT11_PIN  D2

/*配置WIFI名和密码*/
const char * WIFI_SSID     = "WIFI_SSID";
const char * WIFI_PASSWORD = "WIFI_PASSWORD";

/*配置设备证书信息*/
String ProductKey = "you Product Key";
String ClientId = "12345";
String DeviceName = "you Device Name";
String DeviceSecret = "you Device Secret";

/*配置域名和端口号*/
String ALIYUN_SERVER = "iot-as-mqtt.cn-shanghai.aliyuncs.com";
uint16_t PORT = 1883;

/*需要操作的产品标识符(温度和湿度两个标识符)*/
String TempIdentifier = "you Temp Identifier";
String HumiIdentifier = "you Humi Identifier";

/*需要上报和订阅的两个TOPIC*/
const char * subTopic = "you sub Topic";//****set
const char * pubTopic = "you pub Topic";//******post

DFRobot_Aliyun myAliyun;
WiFiClient espClient;
PubSubClient client(espClient);
DFRobot_DHT11 DHT;

void connectWiFi(){
  Serial.print("Connecting to ");
  Serial.println(WIFI_SSID);
  WiFi.begin(WIFI_SSID,WIFI_PASSWORD);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.print("IP Adderss: ");
  Serial.println(WiFi.localIP());
}

void callback(char * topic, byte * payload, unsigned int len){
  Serial.print("Recevice [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < len; i++){
    Serial.print((char)payload);
  }
  Serial.println();
}

void ConnectAliyun(){
  while(!client.connected()){
    Serial.print("Attempting MQTT connection...");
    /*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/
    if(client.connect(myAliyun.client_id,myAliyun.username,myAliyun.password)){
      Serial.println("connected");
      client.subscribe(subTopic);
    }else{
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}
void setup(){
  Serial.begin(115200);
  
  /*连接WIFI*/
  connectWiFi();
  
  /*初始化Alinyun的配置,可自动计算用户名和密码*/
  myAliyun.init(ALIYUN_SERVER,ProductKey,ClientId,DeviceName,DeviceSecret);
  
  client.setServer(myAliyun.mqtt_server,PORT);
  
  /*设置回调函数,当收到订阅信息时会执行回调函数*/
  client.setCallback(callback);
  
  /*连接到Aliyun*/
  ConnectAliyun();
}

uint8_t tempTime = 0;
void loop(){
  if(!client.connected()){
    ConnectAliyun();
  }
  /*一分钟上报两次温湿度信息*/
  if(tempTime > 60){
    tempTime = 0;
    DHT.read(DHT11_PIN);
    Serial.print("DHT.temperature=");
    Serial.println(DHT.temperature);
    Serial.print("DHT.humidity");
    Serial.println(DHT.humidity);
    client.publish(pubTopic,("{\"id\":"+ClientId+",\"params\":{\""+TempIdentifier+"\":"+DHT.temperature+",\""+HumiIdentifier+"\":"+DHT.humidity+"},\"method\":\"thing.event.property.post\"}").c_str());
  }else{
    tempTime++;
    delay(500);
  }
  client.loop();
}[/mw_shl_code]

gray6666  初级技神

发表于 2019-3-13 10:42:26

强大的物联网,前途无量
回复

使用道具 举报

L9  学徒

发表于 2020-12-13 11:48:05

本帖最后由 L9 于 2020-12-13 11:53 编辑

请问为啥烧录进去是这样的啊项目使用了 473719 字节,占用了 (36%) 程序存储空间。最大为 1310720 字节。
全局变量使用了36260字节,(12%)的动态内存,余留258652字节局部变量。最大为294912字节。
esptool.py v2.1-beta1
Connecting........_
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 8192 bytes to 47...
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 5957.7 kbit/s)...
Hash of data verified.
Flash params set to 0x022f
Compressed 12272 bytes to 8102...
Wrote 12272 bytes (8102 compressed) at 0x00001000 in 0.1 seconds (effective 962.5 kbit/s)...
Hash of data verified.
Compressed 474864 bytes to 311677...
Wrote 474864 bytes (311677 compressed) at 0x00010000 in 4.3 seconds (effective 887.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 122...
Wrote 3072 bytes (122 compressed) at 0x00008000 in 0.0 seconds (effective 3071.9 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...



回复

使用道具 举报

DFlc  见习技师

发表于 2019-4-30 15:35:00

wuji 发表于 2019-4-30 08:56
。。。。。。。。。
有提示信息吗?那个库复制进去了,需要重启打开的Arduino软件,在编译才会生效,是不 ...

编译上传成功后有提示信息:"找到无效库在C:\Program Files (X86)\Arduino\libraries\pubsubclient:no headers files (.h) found in C:\Program Files (X86)\Arduino\libraries\pubsubclient"。我的电脑上就一个版本的Arduino
回复

使用道具 举报

歐拉學派  见习技师

发表于 2019-3-14 18:11:00

C:\Users\Administrator\Desktop\ESP8266\Arduino-ESP32-IDE-1.8.1\Arduino-ESP32-IDE\libraries\DFRobot_Aliyun\DFRobot_Aliyun.cpp:2:23: fatal error: HMAC_SHA1.h: No such file or directory


请问 版主 HMAC_SHA1.h: 是哪个库?
回复

使用道具 举报

破风而来  初级技师

发表于 2019-3-16 21:19:58

请问 版主 HMAC_SHA1.h: 是哪个库?
点评回复 支持 反对
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-3-22 13:16:44

歐拉學派 发表于 2019-3-14 18:11
C:%users\Administrator\Desktop\ESP8266\Arduino-ESP32-IDE-1.8.1\Arduino-ESP32-IDE\libraries\DFRobot_A ...

下载附件DFRobot_Aliyun.rar不好意思,阿里云的依赖库传错了,用这个就有HMAC_SHA1.h文件了
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-3-22 13:21:48

破风而来 发表于 2019-3-16 21:19
请问 版主 HMAC_SHA1.h: 是哪个库?
点评回复 支持 反对

下载附件DFRobot_Aliyun.rar不好意思,上传失误,用这个库就有HMAC_SHA1.h文件了
回复

使用道具 举报

cgc444  初级技师

发表于 2019-3-30 12:07:44

强烈鼓掌
回复

使用道具 举报

rzegkly  版主

发表于 2019-4-9 15:09:59

很详细的教程
回复

使用道具 举报

rzegkly  版主

发表于 2019-4-10 15:52:12

很好的物联网例子,掌控板和阿里云可以结合起来?
截图201904101552096422.png
回复

使用道具 举报

rzegkly  版主

发表于 2019-4-10 15:52:22

很好的物联网例子,掌控板和阿里云可以结合起来?
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-4-11 08:54:27

rzegkly 发表于 2019-4-10 15:52
很好的物联网例子,掌控板和阿里云可以结合起来?

没用过,不太清楚
回复

使用道具 举报

DFlc  见习技师

发表于 2019-4-21 20:57:20

C:\Users\Administrator\Documents\Arduino\libraries\DFRobot_Aliyun\DFRobot_Aliyun.cpp:2:23: fatal error: HMAC_SHA1.h: No such file or directory
请问版主,下载了您后来上传的依赖库后还是显示这个,怎么办?
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-4-22 09:02:04

DFlc 发表于 2019-4-21 20:57
C:%users\Administrator\Documents\Arduino\libraries\DFRobot_Aliyun\DFRobot_Aliyun.cpp:2:23: fatal err ...

你检查下Arduino软件的libraries的DFRobot_Aliyun库中有没有该文件。有,请关闭IDE重新打开编译试试
回复

使用道具 举报

DFlc  见习技师

发表于 2019-4-26 11:08:18

谢谢版主,我现在编译的时候,又一直出现如下的错误,可我把相关库文件下载并添加了呀,但在库管理器里找不到DFRobot_DHT11这个文件,求解惑,万分感谢!
DFRobot_DHT11.h: No such file or directory
回复

使用道具 举报

DFlc  见习技师

发表于 2019-4-26 11:22:02

wuji 发表于 2019-4-22 09:02
你检查下Arduino软件的libraries的DFRobot_Aliyun库中有没有该文件。有,请关闭IDE重新打开编译试试 ...

库管理器中找不到DFRobot_Aliyun
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-4-26 12:02:43

DFlc 发表于 2019-4-26 11:22
库管理器中找不到DFRobot_Aliyun

将下载好的文件DFRobot_Aliyun,复制粘贴到Arduino软件的libraries文件中,如下图所示:阿里云IoT温湿度监测图1
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-4-26 12:11:30

本帖最后由 wuji 于 2019-4-26 12:14 编辑
DFlc 发表于 2019-4-26 11:08
谢谢版主,我现在编译的时候,又一直出现如下的错误,可我把相关库文件下载并添加了呀,但在库管理器里找不 ...

在编译前,请先把阿里云套件的依赖库复制粘贴到Arduino的libraries文件中。把阿里云套件中DFRobot_DHT11这个文件的库,复制粘贴到Arduino的libraries文件中
回复

使用道具 举报

DFlc  见习技师

发表于 2019-4-28 17:27:43

版主您好,请问ClientId填什么呀,我填的是我阿里云账号的ID,不知道对不对,编译成功后,串口监视器显示:Attempting MQTT conection failed,rc=-1 try again in  5 seconds   该如何解决呢
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-4-29 09:12:51

DFlc 发表于 2019-4-28 17:27
版主您好,请问ClientId填什么呀,我填的是我阿里云账号的ID,不知道对不对,编译成功后,串口监视器显示:A ...

ClientId 随便填都可以
这个MQTT连接失败,以前已经回复了,你可以看这个
https://mc.dfrobot.com.cn/thread-275846-1-1.html
回复

使用道具 举报

DFlc  见习技师

发表于 2019-4-29 21:33:14

wuji 发表于 2019-4-29 09:12
ClientId 随便填都可以
这个MQTT连接失败,以前已经回复了,你可以看这个
https://mc.dfrobot.com.cn/thre ...

谢谢版主,我把库文件添加后老显示指定的文件夹或压缩文件中没有有效的库。。。
回复

使用道具 举报

wuji  中级技师
 楼主|

发表于 2019-4-30 08:56:22

DFlc 发表于 2019-4-29 21:33
谢谢版主,我把库文件添加后老显示指定的文件夹或压缩文件中没有有效的库。。。 ...

。。。。。。。。。
有提示信息吗?那个库复制进去了,需要重启打开的Arduino软件,在编译才会生效,是不是你的电脑上有多个版本的Arduino,你并没有把库文件复制到你所使用的那个Arduino软件下,所以一直报错
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail