阿里云IoT温湿度监测

2019-03-115万
精华项目
AI 快速预览详细 收起
本文介绍了使用DFRobot的阿里云IoT入门套件实现温湿度监测的过程。首先列出所需材料,包括FireBeetle ESP32-Board主控、DHT11温湿度传感器等。接着详细描述了在阿里云IoT平台上创建产品、添加设备以及通过Arduino IDE将物理设备与平台关联的具体步骤。最后展示了如何在阿里云IoT Studio中开发相应的App服务,实现手机App对DHT11的操作。整个过程涵盖了从硬件连接到App开发的全过程,非常适合物联网初学者学习。
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]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(39)
L9
L9
请问为啥烧录进去是这样的啊项目使用了 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...
硬件菜鸟
硬件菜鸟
不错,大佬
DFHk-0ykaN8
DFHk-0ykaN8
你好版主,我做到成功上传到阿里云iot平台,但是温度没有小数位如何解决了?
xch
xch回复DFHk-0ykaN8
你们,我是初学者,可以认识一下么
晚风
晚风
'D2' was not declared in this scope
哪位大神指点一下,什么问题 啊
晚风
晚风
学习中,,,,
wxyaoo
wxyaoo
请问大神,这个topic怎么填写啊。就这一点不太明白。查资料查了一天了,也没明白。
DFHk-0ykaN8
DFHk-0ykaN8
DFRobot_Aliyun.rar那个库如何使用呢?还在摸索中,。。。。。。。
DFHk-0ykaN8
DFHk-0ykaN8
谢谢版主,依赖库真的很不错,按照说明进行实验中,有问题再请教。
冬歌
冬歌
楼主,想要库文件压缩包新手,不知道创造力怎么获得
Nicholas
Nicholas
错误很多呀
Nicholas
Nicholas
大还是你
Nicholas
Nicholas
楼主,我想要个压缩包
Nicholas
Nicholas
楼主,我想要个压缩包
Nicholas
Nicholas
楼主,我想要个压缩包
Nicholas
Nicholas
楼主,我想要个压缩包
Nicholas
Nicholas
楼主,我想要个压缩包
Nicholas
Nicholas
压缩包
Nicholas
Nicholas
下载
Nicholas
Nicholas
真的很想要压缩包
wl2
wl2
同时手机APP上的报错如图