错开の折腾经历: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,目前已经实现了远程红外控制空调,但是只能指定状态控制,不过对应宿舍空调,已经够用了。接下来,就是除理低功耗电源方案了,并想想看,可不可以把空调跟温湿度传感器一起