查看: 1828|回复: 5

[分享] 基于blinke+nodemcu 制作一个智能家居(DHT)

[复制链接]
  • TA的每日心情
    开心
    2019-2-13 16:03
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-2-9 17:36 | 显示全部楼层 |阅读模式
                                                          esp8266(nodemcu)制作智能家居 概述   
           现在的时代物联网十分流行,例如是在智能家居这块,像小米的米家,天猫精灵以及它的配套等,利用这些科技,就可以给家里的家电注入灵魂。无论是在家里或者是外面,通过网络就能了解到家里面的一些情况。
          今天我就利用了一个温度湿度传感器+esp8266(nodemcu)+blinker(物联网必备)来制作一个室内温度湿度观察仪,一个礼貌又不失风度的玩意,来满足我这个初次体验到IOT的奥妙的大学生 (惭愧)。
    材料准备清单
                 1..................nodemcu(乐鑫esp-12)
                 2..................dth11温湿度传感器
                 3..................1602显示屏(i2C)
                 4..................二极管小灯一个
                 5.................一张废弃的纸皮(做产品的外壳,哈哈)
    电脑软件
        arduino ide
    手机软件
        blinker(应用市场有,我是安卓机)这两个的软件要求请看blinker的官方帖子。
    nodemcu
         对于esp8266的感觉,我在使用得到了很大的满足感,跟捡到钱的差不多的,它太强大了,可以说是uno的网络版(小白的心声)。使用起来也十分方便。
       

    nodemcu 的引脚图

    nodemcu 的引脚图


    1602(i2C)
          因为我用了i2C,所以只有四个接口,大家在接线的时候可以对照上图来接,十分方便。
    dth11
        这个传感器我感觉不太靠谱,以后要买一个高级一点的。
    二极管小灯
            处理想到要做一个温湿度观察仪之外,我还想到了做一个WiFi小灯(可以换成换成继电器来耍一下)
    外观 以及内部的连线情况

    1

    1

    2

    2


    arduino的代码

    kittenblock中小学创客名师推荐的图形化编程软件

    
    #define BLINKER_WIFI
    #include <Blinker.h>   //在官方帖子里面可以下载
    #include <modules/dht/DHT.h>  //家里面的网速可以的话,可以在ide管理库里面直接下载(在上传代码出错后)
    #include <LiquidCrystal_I2C.h>   //这是I2C的库文件
     
    #define LED_BUILTIN1 D3    //定义灯的引脚
    #define BUTTON_1 "btn-abc"   //定义手机软件blinker里面所需要的按钮的名字
    BlinkerButton Button1(BUTTON_1);   //这里也可以写成BlinkeButton Button1("btn-abc")
     
    LiquidCrystal_I2C lcd(0x27,16,2);  //lcd27or36
    
     
    BlinkerNumber HUMI("humi");     / /定义blinker里面所需要的数值的名字
    BlinkerNumber TEMP("temp");
     
    #define DHTPIN D4                              //定义dth的阵脚
    #define DHTTYPE DHT11                      // DHT 11//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321//#define DHTTYPE DHT21   // DHT 21 (AM2301)
     
    DHT dht(DHTPIN, DHTTYPE);//
    float humi_read = 0, temp_read = 0;           //初始化 温度和湿度的值
     
     char auth[] = "cb9273bac479";//blinker里面的设备密码
    char ssid[] = "Daniel ";//这里填写的是你家的WiFi
    char pswd[] = "12345667bx";//这里填写的是你家 的WiFi密码
    
    void heartbeat()//心跳包,每隔30秒,blinker打印温湿度的值
    {
        HUMI.print(humi_read);//HUNI反馈到app
        TEMP.print(temp_read);
    }
    
    void button1_callback(const String & state)//按钮的回调函数
    {
        digitalWrite(LED_BUILTIN1, !digitalRead(LED_BUILTIN1));//每调用一次 ,就改变一次状态 这里可以放在if 函数里面 if。。。on  digitai  high 这样的
        BLINKER_LOG("get button state: ", state);
    
        
        if (state == BLINKER_CMD_ON) {
            BLINKER_LOG("Toggle on!");
    
            Button1.icon("icon_1");
            Button1.color("#FFFFFF");
            Button1.text("Your button name or describe");
            // Button1.text("Your button name", "describe");
            Button1.print("on");
        }
        else  if  (state == BLINKER_CMD_OFF) {
            BLINKER_LOG("Toggle off!");
    
            Button1.icon("icon_1");
            Button1.color("#FFFFFF");
            Button1.text("Your button name or describe");
            // Button1.text("Your button name", "describe");
            Button1.print("off");
        }
        else {
            BLINKER_LOG("Get user setting: ", state);
    
            Button1.icon("icon_1");
            Button1.color("#FFFFFF");
            Button1.text("Your button name or describe");
            // Button1.text("Your button name", "describe");
            Button1.print();
        }
    } 
    void setup()
    {
        Serial.begin(115200);//电脑串口
        BLINKER_DEBUG.stream(Serial);//调试收发数据用
        BLINKER_DEBUG.debugAll();
        
        pinMode(LED_BUILTIN, OUTPUT);
        pinMode(LED_BUILTIN1, OUTPUT);
        digitalWrite(LED_BUILTIN, LOW);
        digitalWrite(LED_BUILTIN1, LOW);
       
        lcd.init();                      // initialize the lcd //lcd 还有对比度,调后面的电阻
        lcd.init();                      //两行
        lcd.backlight();                 //lcd的背光
        
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachHeartbeat(heartbeat);//注册回调函数
        dht.begin();
         Button1.attach(button1_callback);//注册回调函数
    }
     
    void loop()
    {
        Blinker.run();
     
      
        float h = dht.readHumidity();//读取数据
        float t = dht.readTemperature();
       lcd.setCursor(0,0);//lcd显示
       lcd.print("Hum(%): ");//湿度
       lcd.setCursor(10,0);
       lcd.print(h);
        lcd.setCursor(0,1);
        lcd.print("Temp(oC): ");//温度
        lcd.setCursor(10,1);
        lcd.print(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;
            temp_read = t;
            
        }
     
        Blinker.delay(2000);
    }
    软件blinker的配置
    微信图片_20190209173254.jpg 微信图片_20190209173259.jpg 微信图片_20190209173305.png 微信图片_20190209173329.jpg
    到此这个产品的步骤基本已经完成
    第一次写帖子 以后会继续发贴 如果有错误的地方 请高手们能指正
    qq134118020



    3

    3
  • TA的每日心情
    无聊
    2019-8-18 10:23
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-2-9 21:59 | 显示全部楼层
    本帖最后由 Creeper666 于 2019-2-9 22:09 编辑

    老哥,温度传感器的名字写错啦,是DHT11,打成dth了
    你今天的打赏,是我明天学习Arduino的动力!
  • TA的每日心情
    开心
    2019-2-13 16:03
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-2-10 12:13 | 显示全部楼层
    Creeper666 发表于 2019-2-9 21:59
    老哥,温度传感器的名字写错啦,是DHT11,打成dth了

    okok谢啦老哥
  • TA的每日心情
    开心
    2019-2-13 16:03
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2019-2-10 17:29 | 显示全部楼层
    https://doc.blinker.app/?file=home-%E9%A6%96%E9%A1%B5官方帖子
  • TA的每日心情
    开心
    2019-8-21 11:49
  • 签到天数: 175 天

    [LV.7]常住居民III

    发表于 2019-5-8 20:07 | 显示全部楼层
    感谢分享,学习你的程序后,有个问题请教。
    问题现象:新版app2.2.0版  ,控制2个灯,界面控制开关都正常。
    1      如果初始化时两个按钮都是关闭状态,通过手机端定时打开一个后,初始化设备界面按钮开关状态在图标中还都是关闭状态,实际灯已经通过定时打开了。
    能不能随时读取按钮状态,在APP中正确显示?







    该用户从未签到

    发表于 2019-8-8 13:41 | 显示全部楼层
    专门搜了下你的qq号,发现搜不到,说是设置了查找限制
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    对于ADC读取按键值的疑问
    对于ADC读取按键值的疑问
    大佬们好 我在一篇帖子上看见了用ADC读取模拟值并判断哪颗按键 我也画了一下板子 这
    ADC模拟输入读取独立按键值
    ADC模拟输入读取独立按键
    在论坛H2O了这么久,给大家分享一个实用的小技巧!在使用按键与单片机进行人机交互时
    【Arduino】108种传感器模块系列实验(97)---0.96寸OLED液晶屏
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【Arduino】108种传感器模块系列实验(107)---400KV高压发生器
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表