基于Arudino+Esp8266+Blinker实现简易智能家居

这篇具有很好参考价值的文章主要介绍了基于Arudino+Esp8266+Blinker实现简易智能家居。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.效果展示

可实现的功能:

  1. 温湿度测量+OLED显示+手机显示
  2. 检测火焰+OLED提醒+手机显示+蜂鸣器报警提示
  3. 手机控制开启小风扇(模拟空调),也可根据需求设置成温度过高过低时开启
  4. 一个为了凑数的控制开灯功能

blinker传感器,智能家居
blinker传感器,智能家居

2.前置准备

2.1 购买清单

硬件:

  1. ESP8266开发板
  2. 杜邦线若干
  3. 火焰传感器
  4. 继电器
  5. Dht11温湿度传感器
  6. OLED(不必须)
  7. 蜂鸣器
  8. 小风扇
  9. 面包板
  10. 数据线一条(是数据线!不是普通用的那种安卓充电线!)

软件:

  1. Arduino(电脑)
  2. Blinker(手机)

2.2 驱动安装+Arduino的配置

Arduino IDE基础配置具体内容可参考以下文章,写的很详细

https://blog.csdn.net/weixin_36193839/article/details/113070306

基础配置完毕后我们还需要在Arudino中添加一些要用到的库文件,在工具→管理库弹出的框中输入blinker并安装
blinker传感器,智能家居
blinker传感器,智能家居
同理,分别搜索dht(温湿度检测所用库)和u8g2(OLED模块所用库,如果不需要此功能的可以不添加)
blinker传感器,智能家居
blinker传感器,智能家居

2.3 Blinker的配置

在软件商城或百度搜索Blinker并下载
blinker传感器,智能家居
下载完成后打开Blinker,点击右上角的新建设备
blinker传感器,智能家居
选择独立设备
blinker传感器,智能家居
选择右下角的网络接入
blinker传感器,智能家居
会自动生成密钥,这串数字很重要以后会用到
blinker传感器,智能家居
点击返回设备后一个新设备就创建完成了,如果上面的密钥没记住可以在右上角圆圈中随时查看

blinker传感器,智能家居
blinker传感器,智能家居
点击右上角可以开启编辑模式,在编辑模式中可以自定义一些需要的组件
blinker传感器,智能家居
blinker传感器,智能家居
注意:组件名称接下来会用,建议起一些自己能看懂的名称
blinker传感器,智能家居
还可以自定义界面的背景之类的,自定义完成后如下图所示:
blinker传感器,智能家居
不想自己做界面的同学可以直接用我定义的界面,在设置→界面设计中可以直接粘贴代码
已经定义好的同学直接忽略此步骤
blinker传感器,智能家居
blinker传感器,智能家居
配置代码如下:

{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/bg/f1.jpg¨¨isFull¨»}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-power-off¨¨mode¨Ê¨t0¨¨空调已关闭¨¨t1¨¨文本2¨¨bg¨Ì¨cols¨Í¨rows¨Í¨key¨¨btn-door¨´x´Í´y´É¨lstyle¨Ë}{ßCßDßEßFßGÊßH¨灯已关闭¨ßJßKßLÌßMÍßNÍßO¨btn-light¨´x´É´y´ÉßQË}{ßC¨num¨ßH¨温度¨ßE¨fal fa-question¨¨clr¨¨#389BEE¨¨min¨É¨max¨¢1c¨uni¨´℃´ßLÉßMÍßNÍßO¨num-temp¨´x´É´y´ÎßQÎ}{ßCßTßH¨湿度¨ßEßVßWßXßYÉßZº0ßa´%´ßLÉßMÍßNÍßO¨num-humi¨´x´Í´y´ÎßQÎ}{ßC¨deb¨ßGÉßLÉßMÑßNÌßO¨debug¨´x´É´y´¤D}{ßC¨tex¨ßH¨没有明火出现¨ßJ´´¨size¨¤EßLÉßE¨fad fa-fire-alt¨ßMÑßNËßO¨tex-fire¨´x´É´y´¤AßQÏßW¨#00A90C¨}÷¨actions¨|÷¨triggers¨|÷¨rt¨|÷}

以上,基础配置就完成了,可以正式开始硬件设计部分了。

3. 硬件连线

ESP8266引脚说明如下图
blinker传感器,智能家居

因为要接的东西比较多,建议配块面包板一起食用~
面包板主要分为两种孔,一种是纵向孔,一种是横向孔
如图所示,红色区域圈起来的五个孔就是一组纵向孔,他们内部是联通的,也就是他们五个之间是有导体相连的,可以导电。
绿色区域圈住的孔。整个一横排孔(一横排的蓝或一横排的红)的内部,都是联通的。通常我们用蓝线的孔连接地线(电压为0),用红线连接电源(电压为5V或3.3V)。blinker传感器,智能家居

仪器 管脚
继电器-IN D0
温湿度传感器-DATA D5
蜂鸣器-I/O D6
火焰传感器-AO A0
火焰传感器-DO D7
OLED-SCL D1
OLED-SDA D2
GND GND
VCC 3V

风扇的接法如图:
blinker传感器,智能家居

4. 代码部分

4.1 绑定Blinker

blinker传感器,智能家居

    char auth[] = "xxxxxxxx";
    char ssid[] = "111";//WiFi用户名
    char pswd[] = "123456789";//WiFi密码

注意,如果用手机热点记得在设置里将AP频段调成2.4Ghz
blinker传感器,智能家居
下面是组件的绑定
括号里的名称是之前在blinker里定义的组件名称


/*****************************  Blinker组件  **************************************/
    BlinkerButton Button1("btn-door");
    BlinkerButton Button2("btn-light");
    BlinkerNumber HUMI("num-humi");    //定义湿度数据键名
    BlinkerNumber TEMP("num-temp");    //定义温度数据键名
    BlinkerText Fire("tex-fire");      //定义火焰检测键名
/**********************************************************************************/

4.2 代码

直接附上源码,按照代码里的注释操作即可。

#include <Arduino.h>
#include <DHT.h>            //dht11库
#include <U8g2lib.h>        //u8g2库
#include <SoftwareSerial.h> //软串口
#include <Blinker.h>        //blinker库
#include <Servo.h>
#define BLINKER_WIFI
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,SCL,SDA); //配置构造函数      



/*****************************  WIFI账号密码  **************************************/
    char auth[] = "1ea39f22dca6";
    char ssid[] = "111";//WiFi用户名
    char pswd[] = "123456789";//WiFi密码
/**********************************************************************************/



/*****************************  Blinker组件  **************************************/
    BlinkerButton Button1("btn-door");
    BlinkerButton Button2("btn-light");
    BlinkerNumber HUMI("num-humi");    //定义湿度数据键名
    BlinkerNumber TEMP("num-temp");    //定义温度数据键名
    BlinkerText Fire("tex-fire");      //定义火焰检测键名
/**********************************************************************************/


/********************   继电器(空调)   **********************/
  int jidianqi=16;      //定义继电器的引脚
  void button1_callback(const String & state) {
    BLINKER_LOG("状态: ", state);
    if (state=="on") {       
        digitalWrite(jidianqi, HIGH);
        Button1.color("#90EE90");   //1#按钮按下时,app按键颜色状态显示是绿色
        // 反馈开关状态
        Button1.text("空调已开启");
        Button1.print("on");
        BLINKER_LOG ("1#空调已开启on");  //串口打印
    } else if(state=="off"){   
        digitalWrite(jidianqi, LOW);
        Button1.color("#F08080");  2#按钮没有按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button1.text("空调已关闭");
        Button1.print("off");
        BLINKER_LOG ("1#空调已关off");
    }
    delay(1000);
}
/***************************************************************/

/********************   温湿度传感器   **********************/

#define DHTTYPE DHT11    //定义类型DHT dht(DHTPIN,DHTTYPE);//进行初始化设
#define DHTPIN 14        //定义14号引脚
DHT dht(DHTPIN,DHTTYPE); //进行初始化设置

float humi_read = 0, temp_read = 0;//定义浮点型全局变量 储存传感器读取的温湿度数据
void dht11(){
  float h = dht.readHumidity();//读取DHT11传感器的湿度 并赋值给h
  float t = dht.readTemperature();//读取传感器的温度   并赋值给t
  //打印
  BLINKER_LOG("Humidity: ", h, " %");
  BLINKER_LOG("Temperature: ", t, " *C");
  humi_read = h;   //将读取到的湿度赋值给全局变量humi_read
  temp_read = t;   //将读取到的温度赋值给全局变量temp_read
  if(temp_read > 30)  
  {
      digitalWrite(jidianqi,HIGH);//打开空调降低温度  
      delay(1000);
  }
  else {
      digitalWrite(jidianqi,LOW);//关闭空调
      delay(1000);
    }
    delay(1000);  //延时
  }
/***************************************************************/


/***************************灯*********************************************/
void button2_callback(const String & state) {
     BLINKER_LOG("get button state: ", state);
     if (state=="on") {
        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
        Button2.color("#90EE90");   //1#按钮按下时,app按键颜色状态显示是绿色
        // 反馈开关状态
        Button2.text("灯已开启");
        Button2.print("on");
        BLINKER_LOG ("1#灯已开启on");  //串口打印
    } else if(state=="off"){
        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
        Button2.color("#F08080");  2#按钮没有按下时,app按键颜色状态显示是红色
        // 反馈开关状态
        Button2.text("灯已关闭");
        Button2.print("off");
        BLINKER_LOG ("1#灯已关off");
    }
    delay(1000);
}


/***************************火焰传感器及蜂鸣器*********************************************/
int buzzer =12;  //定义蜂鸣器引脚
void fire(){     
  int i=analogRead(A0); 
  Serial.println(i,10); 
  delay(1000);
   if(i<=800){
      digitalWrite(buzzer,HIGH); 
      Fire.print("有明火出现");
      Fire.color("#F08080");
      delay(1000);
      }
   else {
      digitalWrite(buzzer,LOW); 
      Fire.print("没有明火出现");
      Fire.color("#90EE90");
      delay(1000); 
      }
}

 void heartbeat()  //心跳包
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);    
}

/**********************************************************************************/

/***************************OLED*********************************************/
void OLED()
{
    delay(1000);//延时
    float h = dht.readHumidity();//读湿度
    float t = dht.readTemperature();//读湿度
    float f = analogRead(A0);//读酒精
    char   c[10];
    dtostrf(t,1,2,c);  //float 转换成char
    char   d[10];
    dtostrf(h,1,2,d);       
    
    u8g2.clearBuffer();                                    //清空显示屏缓存
    u8g2.setFont(u8g2_font_open_iconic_human_2x_t);        //设置英文字体
    u8g2.setFont(u8g2_font_unifont_t_chinese2);            //设置字体
    u8g2.drawUTF8(2,15,"wendu:");  //显示文字
    u8g2.drawUTF8(70,15,c);  //显示文字
    u8g2.drawUTF8(2,35,"shidu:");  //显示文字
    u8g2.drawUTF8(70,35,d);  //显示文字
    if(f<=800){
      u8g2.drawUTF8(2,55,"warning: fire!!!!");  //显示文字
      } 
      else{
        u8g2.drawUTF8(30,55,"no fire");  //显示文字
        }   
    u8g2.sendBuffer();                                     //加载以上内容
}

/**********************************************************************************/


//初始化
void setup() 
{
/******************************u8g2******************************************/
    u8g2.begin();                                          //启动u8g2驱动程序
    u8g2.clearBuffer();                                    //清空显示屏缓存
    dht.begin();//DHT开始工作
    
/************************************************************************/
    // 初始化串口,并开启调试信息
    Serial.begin(115200);   
    BLINKER_DEBUG.stream(Serial);
    // 初始化有LED的IO
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    //初始化蜂鸣器
    pinMode(buzzer,OUTPUT); 
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    //将传感器获取的数据传给blinker app上
    Blinker.attachHeartbeat(heartbeat);
    dht.begin();//初始化DHT传感器
    //在回调函数中反馈该控制状态  
    pinMode(jidianqi,OUTPUT);
    digitalWrite(jidianqi,LOW);
}

void loop() 
{
   
    OLED();                                                //调用函数,显示图案
    delay(1000);                                           //持续一秒钟
    Blinker.run();
    dht11();
    fire();
    
}
 

5.0 总结

一个之前在学校里做的小demo,算是自己在啥也不懂的阶段上自己慢慢摸索出来的一个小东西了,当时在CSDN上查了很多资料也看了很多教程,但大多数的资料并不是特别完整,所以出了一篇很详细的教程(要是自己当时能看见一些这样的资料也不会像无头苍蝇乱转了),希望能帮助到一些同样啥也不会的同学~
有问题可以私聊问我~文章来源地址https://www.toymoban.com/news/detail-538995.html

到了这里,关于基于Arudino+Esp8266+Blinker实现简易智能家居的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32+ESP8266+FreeRTOS+安卓App上位机+MQTT连接OneNET的智能家居项目(软件开源篇附百度网盘链接)

      本篇文章主要是分享智能家居项目中的下位机STM32+FreeRTOS的代码部分。以下是项目最终的效果 stm32 esp8266 语音控制智能家居_哔哩哔哩_bilibili   另外附上main函数中的部分代码,完整代码会在文章末尾放上百度网盘链接,可以自行下载。 链接:https://pan.baidu.com/s/1IS-OMLy2_pyWyM

    2024年02月08日
    浏览(36)
  • 【智能家居远程控制系统】ESP8266连接阿里云(六)

    第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境  第四章 ESP8266连接阿里云 第五章 阿里云平台云产品流转 第六章 使用Aruino与云产品流转实现远程控制ESP8266 目录 前言 一、远程控制的意义 二、准备工作 1.阿里云平台设备创建

    2024年02月03日
    浏览(46)
  • 【智能家居远程控制系统】ESP8266连接阿里云(一)

    第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境  第四章 ESP8266连接阿里云 第五章 阿里云平台云产品流转 第六章 使用Aruino与云产品流转实现远程控制ESP8266 文章目录 目录 系列文章目录 前言 一、注册阿里云IOT 二、创建MQTT.

    2024年02月07日
    浏览(43)
  • 【智能家居项目】裸机版本——认识esp8266 | 网络子系统

    🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言: 你只管努力,剩下的交给时间! 如上图整个智能家居程序总体框架图,还剩下网络子系统没有实现,以及最终的业务子系统没有实现。 如上图所示是乐鑫的多种网卡芯片,本喵使用的是其中的 ESP8266 ,具体性能

    2024年02月08日
    浏览(39)
  • esp8266连接blinker进行控制

    在前面已经将Arduino配置esp8266开发环境以及esp8266接入Blinker介绍了以后只是能在手机端看到在线。本文介绍如何给esp8266添加功能。 提示:本篇文章参考点灯科技官方文档进行应用 https://diandeng.tech/doc/arduino-support 一切开始都要从点灯开始,接下来介绍如何用点灯科技APP远程控制

    2024年02月03日
    浏览(31)
  • 【雕爷学编程】Arduino智能家居之使用ESP8266WiFi库和DHTesp库

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年01月18日
    浏览(44)
  • stm32——esp8266物联网开发,连接onenet云平台(http)做智能家居(1)

    此处感谢b站up主——彼岸有光我们有船(我认为讲的和江科大老师一样好,如果习惯江科大老师的讲法的朋友们都可以看看捏) 提供的教程和最初的正点原子的源码,因为我学习的是江科大的stm32,所以进行了部分改编和部分注释,在此把视频内容简化,进行简单的复习。

    2023年04月08日
    浏览(44)
  • 【雕爷学编程】Arduino智能家居之使用ESP8266连接到OpenWeatherMap API获取天气数据

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年02月04日
    浏览(41)
  • ESP8266 模块简易驱动程序 -- 基于 STM32F103 及原子云固件实现云功能

    本简易驱动程序是基于 正点原子 的ESP8266模块,主要用于实现连接 原子云 的功能。MCU选用的是 STM32F103ZET6 注:原子云固件添加了 AT+ATKCLDSTA 和 AT+ATKCLDCLS 两条指令 用于连接正点原子自家的原子云平台,原厂的AT指令不受任何影响 本程序主要实现了如下功能: 设定工作模式 连

    2023年04月23日
    浏览(40)
  • 【STM32HAL库(智能家居)+DHT11传感器+ESP8266+Things Cloud云平台+手机APP】

     哔哩哔哩视频效果链接:http://【毕业设计——STM32温湿度采集系统】 https://www.bilibili.com/video/BV1Hy421i7sk/?share_source=copy_webvd_source=d711fa8bef565aeec8a4d279df8b85aa ~~大家可以给个关注,记得一键三连哦~~ 设计是一种基于STM32的无线温湿度检测系统以智能化、自动化、高效化为出发点,

    2024年04月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包