查看: 514|回复: 1

[分享] blinker+esp01+DHT11=网络温湿度计

[复制链接]
  • TA的每日心情
    开心
    2020-5-29 10:06
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-5-29 10:20 | 显示全部楼层 |阅读模式
    一、B站视频详解,超级详细,小白上手容易理解。
    https://www.bilibili.com/video/BV1c5411472i/
    CSDN物联那点事儿专栏,关于blinker的应用,超级详细
    https://blog.csdn.net/jiangyingh/category_9829533.html

    二、前期准备
    1.采购配件
    (1)esp8266烧录器一个。
    注:一定要买8引脚的烧录器,我一开始就是用的6引脚的发现用不了。
    (2)esp8266烧录器配套的wifi模块一个(esp01或者esp01s都可)。
    注:esp01是两个led灯,esp01s是一个信号灯,都是wifi模块,但是一定要和烧录器配套。建议两个各买一个,备用和实验。
    (3)温湿度传感器DHT11一个。
    注:买DHT11的时候,会送三根杜邦线,连接问题就解决了。
    配件图片:

                图2-1esp8266烧录器                            图2-2wifi模块esp01s                                图2-3温湿度传感器DHT11

    2.安装软件
    (1)电脑安装arduino IDE和esp8266扩展。
    注:arduino IDE是为了上传程序用的。端口驱动win10系统会自动安装好的。
    ardunio iDE链接:https://pan.baidu.com/s/1fsWkllcoGO5LQwOVlw3L2g 提取码:2ql5
    直接打开下载的exe文件就可安装。
    esp8266扩展:链接:https://pan.baidu.com/s/1pIJgAztJmuwjITA4pGqLDQ 提取码:wo1c
    直接点击第三个运行即可,进度条到达100%窗口会自动消失。
    (2)下载blinker库和DHT库,并放到指定位置。
    资源链接:链接:https://pan.baidu.com/s/1-B1ix2dXz7nsjE_JYA6qbw 提取码:qpqd
    Windows:将下载好的blinker库解压到 我的电脑>文档>Arduino>libraries 文件夹中。
    Mac OS:将下载好的blinker库解压到 文稿>Arduino>libraries 文件夹中。
    无论arduino安装到哪里,这里的库文件一定要放到指定位置。
    (3)手机安装第三方平台点灯科技app->blinker,米家app、小爱同学。
    点灯科技app是为了看到温湿度的数据,后两个是为了可以实现语音查询播报功能。
    可参考点灯科技官网资料: 点灯科技官网
    三、具体过程
    首先先了解一下esp8266烧录器。

    转接板作用:可以将wifi模块连接到烧录器上,也可以将外部传感器和wifi模块连接。

    具体流程
    (1)将wifi模块esp01s接到和它配套的esp8266烧录器转接板上。目的:给wifi模块esp01s烧录程序。
    连接方法:
    转接板        wifi模块esp01s        转接板        wifi模块esp01s
    3v3        3v3        RXD        RX
    RST        RST        IOO        IOO
    EN        EN        IO2        IO2
    TXD        TXD        GND        GND
    (2)用杜邦线将DHT11连接到转接板引脚上。
    作用:将传感器获得的数据传输给wifi模块。

    DHT11        转接板        DHT11        转接板        DHT11        转接板
    +        3v3        -        GND        S(输出)        IO2
    注:传感器的s输出口接转接板我这以IO2为例。

    2.上传程序
    可参考点灯科技官网: 点灯科技官网
    将烧录器插到电脑USB接口处。
    具体过程:
    (1)查看端口 电脑属性->设备管理器->端口
    作用:上传时要选中对应的端口才可。


    (2)安装esp8266扩展(如有安装可忽略)
    (3)打开ardunio IDE,开发板选择esp8266Module,端口选择对应端口。
             工具->开发板->esp8266Module
             工具->端口->对应自己的端口(我这对应是COM5)


    (4)获得手机点灯科技app的设备的key,写到代码中。
    添加设备->arduino->wifi接入->复制key




    (5)代码部分。代码详解写到注释里面了。
    注:一定要添加blinker库和DHT库!!!没有添加库文件的话查看二、前期准备。
    代码详解:
    #define BLINKER_WIFI //定义wifi模块
    #define BLINKER_MIOT_SENSOR//小爱同学定义为传感器设备
    #include <Blinker.h>//包含Blinker头文件
    #include <DHT.h>//包含DHT头文件

    #define DHTPIN 2      //定义DHT11模块连接管脚io2

    #define DHTTYPE DHT11   // 使用温度湿度模块的类型为DHT11

    char auth[] = "**********";  //你的设备key
    char ssid[] = "**********";  //你的wifi 名称
    char pswd[] = "**********";  //你的wifi 密码

    //新建数据类型组件对象,作用:将数据传输到手机blinker app
    BlinkerNumber HUMI("humi");    //定义湿度数据键名
    BlinkerNumber TEMP("temp");    //定义温度数据键名

    DHT dht(DHTPIN, DHTTYPE);    //生成DHT对象,参数是引脚和DHT的类型

    float humi_read = 0, temp_read = 0;//定义浮点型全局变量 储存传感器读取的温湿度数据

    void heartbeat()
    {
        HUMI.print(humi_read);        //给blinkerapp回传湿度数据
        TEMP.print(temp_read);        //给blinkerapp回传温度数据
    }

    void miotQuery(int32_t queryCode)      //小爱同学语音命令反馈
    {
        BLINKER_LOG("MIOT Query codes: ", queryCode);

                int humi_read_int=humi_read;     //去掉湿度浮点数
                BlinkerMIOT.humi(humi_read_int); //小爱反馈湿度属性
                BlinkerMIOT.temp(temp_read);     //小爱反馈温度属性
                BlinkerMIOT.print();//将以上属性发送给小爱,使得小爱可以接收到温湿度的数据

    }


    void setup()//将设置代码放在此处,运行一次;
    {
        //初始化端口
        Serial.begin(115200);
        BLINKER_DEBUG.stream(Serial);
        BLINKER_DEBUG.debugAll();

        Blinker.begin(auth, ssid, pswd); // // 初始化blinker
        Blinker.attachHeartbeat(heartbeat);//将传感器获取的数据传给blinker app上
        dht.begin();//初始化DHT传感器
        //在回调函数中反馈该控制状态
        BlinkerMIOT.attachQuery(miotQuery);//每次呼出小爱同学,就会调用miotQuery()函数
    }
    //通过循环不断读取温湿度传感器获取的数据
    void loop() //把主代码放在这里,重复运行:
    {
        Blinker.run();//运行Blinker

        float h = dht.readHumidity();//读取DHT11传感器的湿度 并赋值给h
        float t = dht.readTemperature();//读取传感器的温度   并赋值给t
        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;//将读取到的湿度赋值给全局变量humi_read
            temp_read = t;//将读取到的温度赋值给全局变量temp_read
        }
        Blinker.delay(2000);//延时函数
    }
    (6)编译。
    点击左上角对号即可编译,点击编辑,下拉菜单也有。

    (7)上传程序。
    有人会问到给esp8266烧固件的问题,这里呢通过arduino IDE 点击上传的时候直接就给esp8266烧固件了。
    注:一定要检查开发板选项和端口,不用烧录程序,上传即可。

    (8)刷新手机点灯科技app,设备会由离线状态变成在线状态。
    添加两个数据组件和一个调试组件。 数据组件用来查看获得的数据,调试组件用来刷新和调试。
    进入设备,右上角编辑->数据->修改键名和基本设置->保存。


    (9)米家绑定,小爱同学添加训练。
    在米家”我的“->其他平台设备->点灯科技->同步设备 即可。
    在小爱同学 训练计划->我的训练->添加训练 即可。
    四、补充说明
    1.供电问题
    用到的烧录器正好是USB接口,可以直接用5v的充电器大头给其供电。
    2.精度问题
    DHT11传感器感知温湿度肯定会有一定的误差的,具体误差可看购买的DHT11规格。
    3.设备稳定问题
    有多种情况,有可能是因为供电问题导致电压不稳定,也有可能是wifi模块有问题,或者受干扰。
    4.信号灯问题
    esp01供电红灯一直会亮,蓝灯在通信的时候闪烁,esp01s没有红灯,只有在通信的时候蓝灯闪烁。
    五、过程遇到的问题
    1.一开始我以为需要烧录程序,发现出错,一直解决不了,最后发现只上传程序即可,不必烧录。

    2.编译中遇到的问题基本同c语言相似,这里强调一点,添加Blinkder库和DHT库!!!
    3…编译没错,上传的时候出现espcomm_upload_men failed问题或者是数字签名出错,可以按一下esp8266烧录器的白色复位键,再烧录,多试几次,如果还是出现这个问题,那可能就是wifi模块的问题了。


    六、改进之处
    (1)可以通过代码实现记录最近几天的温湿度,并传给点灯科技app,做出曲线图。
    可点击查看改进方法:温湿度曲线
    (2)点灯科技不光支持小爱语音输入,同时还支持天猫精灵和百度小度,修改添加语音输入可添加代码即可。

    七、总结
    第一次接触ardunio和硬件编程,使用的配件也是刚刚接触的,在使用期间也遇到了不少问题,遇到问题去解决的过程也很艰难,有的问题百度上也找不到答案,就比如我一开是遇到的那个不用烧录直接上传的问题,我一直没找到解决方法,一根筋走到天黑,后来才知道答案。中途换了好几次零件,买回来发现并不能用,关于稳定问题最让我头疼,一样的代码,重新上传可能也会造成不稳定传输。即使设备在线,小爱同学有可能和设备连接不上,时断时连,我怀疑是我手机不是小米的过,或者是wifi模块的过,过程基本没问题,还是得去进行大量的实验去发现问题。
    逆水行舟不进则退,有问题在下方评论或者私聊我一直在,一起进步!
  • TA的每日心情
    慵懒
    2020-6-23 18:40
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2020-6-1 10:20 | 显示全部楼层
    谢谢楼主的教程。
    我有个问题,为什么我添加小爱总是没用,总提示设备沟通失败或者“刚才小爱发呆了”
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    [2019-4-20]RPG无人世界
    [2019-4-20]RPG无人世界
    剧情:主角玄影,为了逃避██的追杀迫不得已发动████在濒死状态来到█
    求助多个开关控制一条WS2812方法
    求助多个开关控制一条WS28
    本人已经写好不同的VIOD的模式 用的是Adafruit_NeoPixel库 但现在需要三个不同的开
    使用VSCode下载arduino的时候报错
    使用VSCode下载arduino的
    在VSCode中选择端口和板子的型号时提示Please check the "arduino.commandPath" in th
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表