ESP8266-NodeMCU项目(三):ESP8266-NodeMCU+Blinker+红外模块(实现远程遥控空调)

错开の折腾经历:ESP8266 NodeMCU


前言

经过上一项目的学习,成功将DHT11的数据接入小爱同学,实现远程读取(嗯,智能家居(◕ᴗ◕✿) )。

这不,又有个新的idea了:既然我能够读取宿舍的温湿度状况,那是不是就可以按照宿舍温情况开启宿舍空调嘞!先接入Blinker_APP,实现app按键控制,然后再看看可不可以进一步接入小爱同学…


滴滴:以下是本篇文章正文内容

一、项目解析&准备

1.项目思路

首先得对宿舍空调遥控器进行红外解码(红外接收模块),了解他编码规则、不同状态的值是多少,然后再根据以上数据,通过红外发射模块,对空调进行控制。红外模块接入ESP8266-NodeMCU板子后,可进行以上操作,并接入Blinker,通过APP控制空调。

2.材料清单

ESP8266-NodeMCU板子
红外接收模块
红外发射模块
USB线、杜邦线
板子
红外模块

左边是红外发射模块,右边是红外接收模块。
红外发射模块 >>> -:接地脚,S:数据脚,中间:电源脚
红外接收模块 >>> -:接地脚,+:电源脚,S:数据脚

二、项目开始

1.红外库的安装(IRremoteESP8266)

要用ESP8266-NodeMCU+红外模块,首先就得下载红外库,再将库导入
GitHub项目链接:IRremoteESP8266

进入arduino IDE,进行库文件安装:输入IRremoteESP8266,进行安装
安装库

2.解码空调遥控器

解码红外,在IRremoteESP8266库文件中有示例,可以直接用(✧◡✧)
请添加图片描述
示例中定义GPIO14即D5脚为数据脚
请添加图片描述

按要求将红外接收模块接入ESP8266-NodeMCU板子:
脚位图

将红外接收模块的-、+脚分别接入板子的地(G)、3v,然后将S数据脚接板子D5脚(GPIO14)

接线:红外接收
OK完事,接入电请添加图片描述
脑,把示例文件上传到板子上,并准备好空调遥控器
宿舍空调遥控器
上传完成后,打开IDE的串口监控,并调整好波特率
请添加图片描述
然后就可以,把遥控器对准红外接收模块,进行红外解码,在串口监控可见数据

PS:红外解码的时候,记得不要把手机靠近红外接收器,不然串口监控就会看见一堆数据了( Ĭ ^ Ĭ )

好的,现在我们聊聊串口显示的接收到的按键信息:
请添加图片描述

宿舍空调是美的的,老机器一个了,功能不多,但也够用了。一般25、26度就OK的, 但一定得是制冷模式,不然跟没开一样,还得收电费,学校电费真心贵╮(╯﹏╰)╭

这边解码得到了不同状态的值,
例如:25℃、制冷、大风
在这里插入图片描述
其他状态值点我查看(就设置了常用的四个状态)
嗯,记录好自己所需的状态值就可以,后面代码将用到

3.Blinker_APP配置

老规矩,创建设备,获取key
请添加图片描述
请添加图片描述
请添加图片描述

记好key,后面代码,凭此将设备接入app

然后就是,配置app界面了
上界面配置代码:

{
    
    ¨version¨¨2.0.0¨¨config¨{
    
    ¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{
    
    ¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{
    
    ¨type¨¨tex¨¨t0¨¨空调控制器¨¨t1¨¨以指定状态运行¨¨size¨¨22¨¨bg¨Ê¨ico¨¨fad fa-air-conditioner¨¨cols¨Ñ¨rows¨Ë¨key¨¨tex-cnl¨´x´É´y´Î¨speech¨|÷¨lstyle¨Ï¨clr¨¨#076EEF¨}{ßC¨btn¨ßL¨fad fa-snowflakes¨¨mode¨ÉßE¨25℃、制冷、高凤¨ßG¨文本2¨ßKËßNÍßOÍßP¨btn-on¨´x´É´y´ÐßR|÷ßSËßTßU}{ßCßVßLßWßXÉßE¨25℃、制冷、自动风¨ßGßZßKËßNÍßOÍßP¨btn-on-auto¨´x´Í´y´ÐßR|÷ßSËßTßU}{ßCßVßLßWßXÉßE¨26℃、制冷、最大风¨ßGßZßKËßNÍßOÍßP¨btn-26¨´x´É´y´¤BßR|÷ßTßUßSË}{ßCßVßL¨fad fa-power-off¨ßXÉßE¨关机¨ßGßZßKËßNÍßOÍßP¨btn-off¨´x´Í´y´¤BßR|÷ßSËßTßU}{ßC¨deb¨ßXÉßKÉßNÑßOÌßP¨debug¨´x´É´y´Ë}÷¨actions¨|÷¨triggers¨|÷}

图例:
请添加图片描述
在这里插入图片描述

app这边界面配置重要的是键名,代码那边要进行组件绑定的。
根据个人情况,自行进行配置

4.代码环节

终于到了,代码环节了,不说了,上代码٩(๑>◡<๑)۶
IDE新建文件,写入代码:

#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <IRremoteESP8266.h>
#include <IRsend.h>  //红外头文件
#include <Blinker.h>  //点灯科技头文件

char auth[] = "";//这里面填写设备的密钥key
char ssid[] = "";//这里填写你的wifi名字
char pswd[] = "";//这里填写你的WiFi密码

//定义红外发射的管脚
const uint16_t kIrLed = 14;  // 设置kIrLed为GPIO14,D5脚
IRsend irsend(kIrLed);  // 将kIrLed设置发送信息

//空调开:25、制冷、大风
uint16_t power_on[199] = {
    
    5998, 7318,  478, 1712,  540, 1622,  474, 1712,  542, 1622,  474, 1712,  542, 1620,  474, 1714,  542, 1622,  474, 596,  568, 532,  456, 618,  568, 532,  476, 598,  570, 532,  478, 596,  570, 532,  478, 1712,  542, 1622,  474, 1712,  542, 1622,  474, 1712,  542, 1622,  474, 1714,  542, 1622,  474, 598,  568, 532,  456, 618,  568, 532,  478, 598,  568, 532,  478, 596,  570, 532,  478, 1712,  544, 1622,  474, 1714,  542, 1622,  474, 1712,  544, 1622,  474, 1712,  544, 1622,  474, 598,  570, 532,  456, 618,  568, 532,  476, 600,  566, 532,  478, 602,  566, 530,  478, 1710,  546, 532,  456, 1732,  522, 556,  454, 1732,  546, 532,  526, 1660,  546, 1622,  526, 576,  514, 1650,  476, 626,  514, 1646,  478, 626,  548, 1612,  510, 594,  554, 522,  506, 596,  552, 1610,  506, 1660,  576, 524,  504, 1662,  572, 528,  502, 1664,  566, 1622,  502, 1664,  562, 536,  504, 574,  536, 1652,  504, 576,  534, 1654,  504, 596,  508, 570,  502, 598,  506, 1660,  502, 598,  506, 1660,  502, 598,  504, 1664,  498, 600,  502, 600,  476, 1692,  474, 626,  472, 1718,  448, 630,  470, 1720,  448, 630,  470, 1720,  448, 1720,  470, 7384,  446};  // GOODWEATHER D5292A000000
//空调开:25、制冷、自动风
uint16_t power_on_auto[199] = {
    
    6036, 7330,  476, 1716,  514, 1650,  474, 1716,  516, 1650,  474, 1716,  514, 1652,  520, 1670,  514, 1652,  524, 550,  542, 560,  456, 650,  514, 558,  476, 628,  514, 560,  478, 628,  514, 560,  476, 1718,  514, 1652,  474, 1716,  516, 1650,  476, 1716,  514, 1652,  474, 1716,  514, 1652,  474, 600,  540, 562,  456, 648,  514, 560,  476, 628,  512, 562,  478, 598,  540, 562,  456, 624,  538, 1654,  452, 622,  540, 1654,  452, 1738,  512, 1654,  452, 1738,  512, 1652,  454, 1738,  514, 562,  476, 1718,  514, 560,  456, 650,  514, 560,  476, 630,  512, 562,  476, 1718,  514, 560,  478, 1716,  514, 560,  478, 1718,  512, 1654,  454, 1738,  514, 1652,  454, 650,  510, 1654,  474, 630,  512, 1652,  504, 600,  514, 560,  508, 598,  514, 560,  506, 600,  512, 1652,  504, 1688,  514, 560,  508, 1686,  516, 560,  506, 1686,  516, 1652,  504, 1686,  518, 558,  506, 596,  542, 1624,  506, 596,  546, 1622,  528, 574,  552, 524,  558, 544,  580, 1586,  556, 548,  578, 1586,  562, 540,  578, 1586,  560, 546,  576, 500,  526, 1640,  602, 502,  552, 1614,  602, 500,  524, 1640,  602, 502,  498, 1668,  574, 1616,  502, 7332,  456}; // GOODWEATHER D5290A050000
//空调开:26、制冷、大风
uint16_t power_on_26[199] = {
    
    6062, 7302,  476, 1718,  538, 1628,  474, 1716,  540, 1626,  454, 1740,  514, 1650,  472, 1718,  516, 1650,  452, 620,  542, 560,  528, 546,  544, 560,  456, 620,  544, 560,  458, 618,  544, 558,  478, 1716,  516, 1650,  452, 1740,  514, 1650,  454, 1738,  516, 1650,  474, 1718,  514, 1652,  454, 618,  544, 558,  458, 620,  542, 560,  456, 620,  544, 560,  456, 620,  544, 560,  528, 1668,  516, 558,  476, 1718,  540, 1626,  476, 1716,  516, 1650,  454, 1738,  516, 1650,  474, 600,  544, 1650,  476, 598,  544, 560,  476, 602,  542, 560,  476, 604,  540, 560,  456, 1740,  514, 560,  476, 1718,  538, 536,  456, 1740,  538, 536,  456, 1738,  516, 1650,  476, 628,  514, 1652,  454, 648,  514, 1652,  454, 648,  514, 1652,  476, 626,  516, 562,  506, 1684,  546, 532,  532, 1660,  552, 524,  556, 1634,  582, 496,  560, 1634,  580, 1584,  562, 542,  580, 1584,  560, 544,  578, 1586,  530, 574,  576, 1588,  530, 576,  548, 526,  504, 602,  546, 1618,  504, 576,  568, 1620,  502, 578,  564, 1624,  504, 576,  562, 536,  502, 1666,  538, 562,  504, 1666,  536, 564,  504, 1666,  534, 566,  502, 1690,  510, 1658,  504, 7332,  502};  // GOODWEATHER D52A2A020000
//空调关:
uint16_t power_off[199] = {
    
    6022, 7290,  476, 1714,  510, 1650,  472, 1714,  512, 1650,  518, 1668,  510, 1652,  472, 1714,  512, 1650,  474, 626,  510, 560,  454, 648,  512, 562,  474, 598,  542, 562,  476, 598,  540, 560,  476, 1714,  512, 1650,  472, 1714,  512, 1648,  474, 1712,  512, 1650,  474, 1712,  512, 1650,  474, 598,  538, 560,  508, 568,  538, 560,  476, 596,  542, 560,  476, 628,  510, 562,  476, 1714,  512, 1650,  474, 1714,  510, 1650,  474, 1714,  512, 1650,  474, 1714,  512, 1650,  474, 626,  510, 562,  506, 596,  512, 560,  476, 628,  512, 560,  500, 602,  512, 562,  476, 1714,  514, 1648,  502, 1686,  512, 560,  502, 1688,  514, 560,  508, 1682,  514, 1648,  506, 594,  514, 560,  504, 598,  514, 1650,  502, 596,  516, 1648,  502, 598,  516, 556,  508, 596,  514, 1650,  504, 1682,  518, 558,  506, 1682,  520, 556,  504, 1684,  522, 1644,  504, 1682,  550, 528,  504, 596,  550, 1614,  530, 570,  578, 1586,  558, 544,  578, 498,  560, 542,  576, 1586,  562, 542,  576, 1586,  560, 544,  576, 1586,  558, 546,  576, 502,  552, 1612,  600, 502,  520, 1644,  598, 532,  470, 1664,  572, 530,  500, 1664,  570, 1620,  500, 7328,  456};  // GOODWEATHER D52928000000


// 新建Blinker组件对象
BlinkerButton Button1("btn-on");
BlinkerButton Button2("btn-on-auto");
BlinkerButton Button3("btn-26");
BlinkerButton Button4("btn-off");

void setup()
{
    
    
  //初始化串口
  Serial.begin(115200);
  //注册回调函数/
  Button1.attach(Button1_callback);
  Button2.attach(Button2_callback);
  Button3.attach(Button3_callback);
  Button4.attach(Button4_callback);
 //配网步骤:WIFI接入
  Blinker.begin(auth,ssid,pswd); 
  //红外初始化
  irsend.begin();

}

void loop()
{
    
    
  Blinker.run(); 
}

//回调函数1
void Button1_callback(const String &state)
{
    
    

  BLINKER_LOG("get button state: ", state);
  //检测到普通按钮按下(btn-on)
  if (state == BLINKER_CMD_BUTTON_TAP)
  {
    
    
    //发送红外指令
    irsend.sendRaw(power_on, 199, 38);  // 以38Khz发送红外数据
    Button1.print("宿舍空调开:25,制冷,大风");
  
  }

}

//回调函数2
void Button2_callback(const String &state)
{
    
    
  BLINKER_LOG("get button state: ", state);
  //检测到btn-on-auto按钮按下
  if (state == BLINKER_CMD_BUTTON_TAP)
  {
    
    
    irsend.sendRaw(power_on_auto, 199, 38);  // 以38Khz发送红外数据
    Button2.print("宿舍空调开:25,制冷,自动风");
  }

}

//回调函数3
void Button3_callback(const String &state)
{
    
    

  BLINKER_LOG("get button state: ", state);
  //检测到按钮btn-26按下
  if (state == BLINKER_CMD_BUTTON_TAP)
  {
    
    
    //发送红外指令
    irsend.sendRaw(power_on_26, 199, 38);  // 以38Khz发送红外数据
    Button1.print("宿舍空调开:26,制冷,大风");
  
  }

}

//回调函数4
void Button4_callback(const String &state)
{
    
    
  BLINKER_LOG("get button state: ", state);
  //检测到btn-off按钮按下
  if (state == BLINKER_CMD_BUTTON_TAP)
  {
    
    
    irsend.sendRaw(power_off, 199, 38);  // 以38Khz发送红外数据
    Button2.print("宿舍空调关");
  }

}

上面代码定义GPIO14(D5)做数据脚,由此将红外发射模块接入板子:

S脚接D5,-:接地,中间为电源脚接3V

请添加图片描述OK,代码编译上传,完事,开始测试!

三、实验测试

通过app按键,可以指定状态控制空调,并从调试窗返回空调状态
请添加图片描述
视频:
点我观看测试视频(◍´꒳`◍)

总结

emmm,目前已经实现了远程红外控制空调,但是只能指定状态控制,不过对应宿舍空调,已经够用了。接下来,就是除理低功耗电源方案了,并想想看,可不可以把空调跟温湿度传感器一起接入小爱同学,打造智能家居呢?
害,加油干,共勉!

项目目录:
错开のESP8266-NodeMCU项目一
错开のESP8266-NodeMCU项目二
错开のESP8266-NodeMCU项目三

猜你喜欢

转载自blog.csdn.net/weixin_45901128/article/details/120634354