基于blinke+nodemcu 制作一个智能家居(DHT)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5811|回复: 6

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

[复制链接]
发表于 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的代码
[mw_shl_code=arduino,true]
#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);
}[/mw_shl_code]软件blinker的配置
微信图片_20190209173254.jpg 微信图片_20190209173259.jpg 微信图片_20190209173305.png 微信图片_20190209173329.jpg
到此这个产品的步骤基本已经完成
第一次写帖子 以后会继续发贴 如果有错误的地方 请高手们能指正
qq134118020



3

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

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

okok谢啦老哥
 楼主| 发表于 2019-2-10 17:29 | 显示全部楼层
https://doc.blinker.app/?file=home-%E9%A6%96%E9%A1%B5官方帖子
发表于 2019-5-8 20:07 | 显示全部楼层
感谢分享,学习你的程序后,有个问题请教。
问题现象:新版app2.2.0版  ,控制2个灯,界面控制开关都正常。
1      如果初始化时两个按钮都是关闭状态,通过手机端定时打开一个后,初始化设备界面按钮开关状态在图标中还都是关闭状态,实际灯已经通过定时打开了。
能不能随时读取按钮状态,在APP中正确显示?







发表于 2019-8-8 13:41 | 显示全部楼层
专门搜了下你的qq号,发现搜不到,说是设置了查找限制
发表于 2020-4-18 17:05 | 显示全部楼层
增加了I2C 的1602 LCD看起来更直观了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 07:29 , Processed in 0.222498 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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