ESP8266-NodeMCU项目(三):ESP8266-NodeMCU+Blinker+红外模块(实现远程遥控空调)
2021/10/7 17:13:21
本文主要是介绍ESP8266-NodeMCU项目(三):ESP8266-NodeMCU+Blinker+红外模块(实现远程遥控空调),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
错开の折腾经历:ESP8266 NodeMCU
文章目录
- 前言
- 一、项目解析&准备
- 1.项目思路
- 2.材料清单
- 二、项目开始
- 1.红外库的安装(IRremoteESP8266)
- 2.解码空调遥控器
- 3.Blinker_APP配置
- 4.代码环节
- 三、实验测试
- 总结
前言
经过上一项目的学习,成功将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项目(三):ESP8266-NodeMCU+Blinker+红外模块(实现远程遥控空调)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享