Blinker DHT_11监测环境(基于官方示例优化细节),接入小度音箱-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10705|回复: 28

[分享] Blinker DHT_11监测环境(基于官方示例优化细节),接入小度音箱

[复制链接]
发表于 2020-3-16 15:36 | 显示全部楼层 |阅读模式
本帖最后由 17865566707 于 2020-3-16 15:48 编辑

一、开发环境搭建
1.1  
Arduino IDE(建议此论坛搜索最新版或者在Arduino官网下载最新版本:https://www.arduino.cc/


1.2  安装blinker Arduino库(https://doc.blinker.app/?file=001-快速开始/02-esp8266-WiFi接入
       下载.zip文件,解压缩到ARDUINO安装目录的“libraries”文件夹中。

1.3  安装DHT库(见附件
       下载.zip文件,解压缩到ARDUINO安装目录的“libraries”文件夹中。

1.4  安装ESP8266支持包(https://github.com/esp8266/Arduino/releases
       下载.exe文件,双击自动安装就可以。

1.5  安装blinker APP(https://doc.blinker.app/?file=001-快速开始/02-esp8266-WiFi接入

二、程序设计

#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG//采用EspTouch/SmartConfig方式配网
#define BLINKER_DUEROS_SENSOR

#include <Blinker.h>
#include <DHT.h>

char auth[] = "XXXXXXXXX";

BlinkerNumber HUMI("humi");    //定义湿度数据键名
BlinkerNumber TEMP("temp");    //定义温度数据键名

#define DHTTYPE DHT11        // 使用DHT 11温度湿度模块
#define DHTPIN 2             //定义DHT11模块连接管脚io2
DHT dht(DHTPIN, DHTTYPE, 11);//定义DHT

float humi_read = 0, temp_read = 0;

void setup()
{
  Serial.begin(115200);
  BLINKER_DEBUG.stream(Serial);
  BLINKER_DEBUG.debugAll();

  Blinker.begin(auth);
  Blinker.attachData(dataRead);
  Blinker.attachHeartbeat(heartbeat);

  dht.begin();

  BlinkerDuerOS.attachQuery(duerQuery);
}


void loop()
{
  Blinker.run();

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t))
  {
    BLINKER_LOG("Failed to read from DHT sensor!");
  }
  else
  {
    BLINKER_LOG("Humidity: ", h, " %");
    BLINKER_LOG("Temperature: ", t, " *C");
    humi_read = h;
    temp_read = t;
  }
  Blinker.delay(100);
}

void heartbeat()                  //心跳包
{
  if (humi_read  < 45)
  {
    HUMI.color("#DC143C");//红
    HUMI.unit("%RH(干燥)");
  }
  else if (humi_read  > 75)
  {
    HUMI.color("#1E90FF");//蓝
    HUMI.unit("%RH(湿润)");
  }
  else
  {
    HUMI.color("#00DE00");//绿
    HUMI.unit("%RH(舒适)");
  }


  if (temp_read  < 15)
  {
    TEMP.color("#1E90FF");//蓝
    TEMP.unit("℃(寒冷)");
  }
  else if (temp_read  > 25)
  {
    TEMP.color("#DC143C");//红
    TEMP.unit("℃(炎热)");
  }
  else
  {
    TEMP.color("#00DE00");//绿
    TEMP.unit("℃(舒适)");
  }


  HUMI.print(humi_read );      //给blinker app回传湿度数据
  TEMP.print(temp_read );      //给blinker app回传温度数据
}

void duerQuery(int32_t queryCode)
{
  BLINKER_LOG("DuerOS Query codes: ", queryCode);

  int humi_read_int = humi_read;    //去掉湿度浮点
  switch (queryCode)
  {
    case BLINKER_CMD_QUERY_HUMI_NUMBER :
      BLINKER_LOG("DuerOS Query HUMI");
      BlinkerDuerOS.humi(humi_read_int + 7); //小度接收湿度
      BlinkerDuerOS.print();
      break;
    case BLINKER_CMD_QUERY_TEMP_NUMBER :
      BLINKER_LOG("DuerOS Query TEMP");
      BlinkerDuerOS.temp(temp_read - 7);  //小度接收温度
      BlinkerDuerOS.print();
      break;
    case BLINKER_CMD_QUERY_TIME_NUMBER :
      BLINKER_LOG("DuerOS Query time");
      BlinkerDuerOS.time(millis());     //小度接收运行时间
      BlinkerDuerOS.print();
      break;
    default :
      BlinkerDuerOS.temp(0);
      BlinkerDuerOS.humi(0);
      BlinkerDuerOS.time(millis());
      BlinkerDuerOS.print();
      break;
  }
}

void dataRead(const String & data)
{
  BLINKER_LOG("Blinker readString: ", data);

  Blinker.vibrate();
  uint32_t BlinkerTime = millis();
  Blinker.print("millis", BlinkerTime);
}


程序说明:1.配网方式由直接写入程序改为采用EspTouch/SmartConfig方式配网,使用更加方便。
                 2.加入了根据测量数据划分三个区间的逻辑判断,反馈汉字及颜色到手机APP(因为数字组件不能回传文字信息,曲线救国将文字放在了单位里一起回传)。
                 3.所有状态反馈均放在了心跳包里,所以理论上30~60秒自动反馈一次测量结果。


三、用到的硬件
1.ESP8266-01s模块(https://m.tb.cn/h.V4BejDe?sm=07fb46 )


2.DHT11 温湿度WiFi节点模块(https://m.tb.cn/h.V49AD6i?sm=f2305f )


3.8266烧录器(https://m.tb.cn/h.V4BfGqS?sm=2245f2 )


注:链接仅供参考,可以自行寻找更合适的。


四、具体制作过程
1.连接ESP-01S和下载器,插入电脑USB口
2.打开手机APP,添加DIY设备  arduino,WiFi接入,复制key
3.打开ide,将key复制到程序里替换
4.下载程序到esp-01s
5.将01s和DHT组装,接入3.7~5v直流电源
6.打开手机APP,点击左上角,开发者,开发工具,使用第一个方式配置网络
7.配网成功后即可在添加的设备详情里看到回传的数据

最后,即可在APP中看到测量数据反馈+APP舒适度反馈+小度音箱(想接入小爱、天猫的话修改起来也很简单)语音查询数据了!

下载按钮

下载按钮

第一个添加设备

第一个添加设备

第一个配置网络

第一个配置网络

最终效果图

最终效果图

实物效果图

实物效果图

DHT11温湿度传感器库文件.zip

10.99 KB, 下载次数: 85

发表于 2020-3-18 11:06 | 显示全部楼层

  if (humi_read  < 45)
  {
    HUMI.color("#DC143C");//红
    HUMI.unit("%RH(干燥)");
  }
  else if (humi_read  > 75)
  {
    HUMI.color("#1E90FF");//蓝
    HUMI.unit("%RH(湿润)");
  }
  else
  {
    HUMI.color("#00DE00");//绿
    HUMI.unit("%RH(舒适)");
  }

  if (temp_read  < 15)
  {
    TEMP.color("#1E90FF");//蓝
    TEMP.unit("℃(寒冷)");
  }
  else if (temp_read  > 25)
  {
    TEMP.color("#DC143C");//红
    TEMP.unit("℃(炎热)");
  }
  else
  {
    TEMP.color("#00DE00");//绿
    TEMP.unit("℃(舒适)");

这段代码   为什么我复制完   显示26度   显示炎热
发表于 2020-3-18 12:06 | 显示全部楼层
小白菜112 发表于 2020-3-18 11:06
if (humi_read  < 45)
  {
    HUMI.color("#DC143C");//红

emp_read  > 25

这个代表大于25为炎热
发表于 2020-3-19 22:26 来自手机 | 显示全部楼层
为什么我编译出错,提示8266module出错,开发版选
发表于 2020-3-19 22:27 来自手机 | 显示全部楼层
开发版是2.5.0的,是不是版本低?
发表于 2020-3-21 20:45 | 显示全部楼层
blinker App上收到的数据有延时吗?比如现在突然温度变化了2度,App上能立即反应过来吗?
 楼主| 发表于 2020-3-22 20:18 | 显示全部楼层
kangyang 发表于 2020-3-21 20:45
blinker App上收到的数据有延时吗?比如现在突然温度变化了2度,App上能立即反应过来吗? ...

暂时是在心跳包里反馈数据的,大概30~60秒执行一次,需要实时性可以自己加一个状态更新按键
发表于 2020-3-23 10:07 | 显示全部楼层
17865566707 发表于 2020-3-22 20:18
暂时是在心跳包里反馈数据的,大概30~60秒执行一次,需要实时性可以自己加一个状态更新按键 ...

谢谢咯!
发表于 2020-4-10 20:36 | 显示全部楼层
接入小度一直识别成等,不是传感器,很奇怪
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:46 , Processed in 0.099384 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表