使用ESP8266接入Blinker低成本制作简易的远程空调/电视控制器

前言:最近想做一个远程的空调/电视的手机app控制装置,网上搜索一番,发现一个不错的开发社区,点灯科技(Blinker),可以通过简单的配置把ESP8266接入Blinker服务器,通过ESP8266外接红外发射装置外设来达到控制空调的目的。记录一下步骤,以供有需之人参考!
备注:

  • Blinker官网:https://diandeng.tech/home

1.准备工作

1.1 原理

本实验的原理比较简单,使用Arduino开发软件的第三方库(IRremoteESP8266)的示例,读取空调/电视,红外遥控的原始数据,把需要控制的按键红外键值的原始数据保存在数组中。

把ESP8266接入Blinker(点灯科技),使用Blinker的app去配置UI界面,然后再Arduino编写简单的控制逻辑,通过app的按钮发送指定的红外指令从而达到控制的目的。

1.2 使用的硬件

在这里使用的硬件很简单。如下所示:

  • ESP8266 NodeMCU
  • 红外发射模块、红外接收模块
    在这里插入图片描述

1.3 开发环境准备

备注:安装1.8.7或更新版本,这个软件是免费使用的,直接在官网下载安装最新版本即可。

  • 安装ESP8266的扩展
    方法一:如果你的电脑能够科学上网的话,使用这个方法很简便,在首选项中输入一个网址,然后添加库即可。否则参考方法二。
  1. 启动Arduino并打开“首选项”窗口。
  2. 输入https://arduino.esp8266.com/stable/package_esp8266com_index.json
    在这里插入图片描述
  3. 从工具>主板菜单打开Boards Manager并安装esp8266平台(安装后不要忘记从工具>主板菜单中选择ESP8266主板)。
    在这里插入图片描述
    方法二:下载打包的esp8266安装包,直接运行并解压即可。

链接:https://pan.baidu.com/s/1Eu0qhlP5xu6GgQMdwflfAw 提取码:3x1f

备注:如果安装过其他版本的esp8266sdk,请先删除,再使用本安装包,解压完成后,再打开Arduino IDE,即可在 菜单栏>工具>开发板 中找到你使用的esp8266开发板

  • 安装 IRremoteESP8266 库
    这个库中有关于ESP8266 接收红外解码,以及发送红外数据的函数。是这个例程的一个核心函数
    安装方法:如果直接在Anduino IDE中安装,也是需要科学上网的,否则速度会很慢。
    方法一:直接在IDE中安装
    在这里插入图片描述
    方法二:离线安装
    下载IRremoteESP8266安装包

链接:https://pan.baidu.com/s/1RlHPts_dNj6MVR9pARxLuA 提取码:0n6t

下载完成之后,把它解压缩在项目文件夹的library文件夹中
项目文件夹在这里插入图片描述

  • 安装blinker Arduino库
    安装方法,同IRmoteESP8266库安装的方法二相同。

链接:https://pan.baidu.com/s/1k5tED9HxgiRaqNtKrTJcRg 提取码:87lw

安装后如下图所示:
在这里插入图片描述
安装成功之后重启Arduino软件,可以在示例的第三方库库中找到。
在这里插入图片描述

  • 安装blinker APP
  • Android下载:点我进入
    或 在android应用商店搜索“blinker”下载安装
  • IOS下载:在app store中搜索“blinker”下载

小结:完成了准备工作之后,就可以进入下一步。可以使用 IRremoteESP8266的示例,对空调红外进行解码。

2.解码空调红外键值

2.1 把ESP8266红外接收的实例,上传到NodeMCU中

  • 打开红外接收的示例
    在这里插入图片描述
  • 选择所使用的开发版和连接的COM口(根据实际情况选择)
    在这里插入图片描述
  • 把红外接收模块的数据段连接到GPIO14(Node MCU 对应D5引脚)

在这里插入图片描述

  • 上传程序到 Node MCU 上
    在这里插入图片描述

2.2 读取红外键值

  • 打开Arduino 调试 串口监视器
    在这里插入图片描述
  • 空调遥控器对准红外接收管(这里以美的空调为例)
    在这里插入图片描述
  • 捕获红外键值
    读取你认为需要的按键,在这里只读取遥控器绿色按钮(26℃)以及关闭空调按钮。
    在串口中打印输入如下:

在这里插入图片描述
备注:把打印的rawDate的数组保存起来,待会会使用到。

3. 配置Blinker App的UI界面

  • 注册账号
    使用手机号码即可注册账号。
  • 添加设备->wifi接入–>得到产品密钥(Secret Key)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 修改设备名字和图标
    在这里插入图片描述
  • 编辑UI界面
    在这里添加两个按钮即可,一个打开空调、一个关闭空调。
    在这里插入图片描述
    在这里插入图片描述
    退出编辑后界面如下:
    在这里插入图片描述
    这样一来,简单的控制界面就设置好了。

4.Arduino程序的编写

具体如何编写Arduino程序,可以在Blinker官网中有介绍:点我查看

4.1 控制逻辑

控制逻辑是相当简单的,当检测到按键按下之后,就会发送前面我们所获取红外解码的原始数据,把红外发射管对准空调之后,空调便会收到和遥控器发出的相同指令,进行空调的开关动作。
备注:在进行操作之前,先连接好红外发射模块所连接的IO口,在这里使用的是GPIO4(即Node MCU的 D2引脚)

4.2 新建一个Arduino程序,编写控制逻辑

新建一个文件->另存为mIRremote_control(程序名随意)
在这里插入图片描述
由于程序比较简单,直接贴出如下:
其中注意事项如下:

1.设备密钥和wifi账号密码换成自己的
在这里插入图片描述
2.把读取的红外键值的rowDate数组换成自己需要控制的红外键值数组(数组名称可以随意,注意发送时的数据长度,这里是199)。
3.使用函数 irsend.sendRaw(power_off, 199, 38); 进行红外命令的发送,表示以38kHz的频率,发送power_off数组。数组长度为199.

#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <Blinker.h>

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

//定义红外发射的管脚
const uint16_t kIrLed = 4;  // ESP8266 GPIO pin to use. Recommended: 4 (D2).
IRsend irsend(kIrLed);  // Set the GPIO to be used to sending the message.

/*美的空调红外键值读取*/

//空调开:26度,环保
uint16_t power_on[199] = {4302, 4482,  446, 1730,  422, 652,  448, 1728,  448, 1728,  448, 630,  446, 628,  444, 1730,  448, 626,  446, 626,  448, 1728,  446, 630,  446, 628,  446, 1730,  448, 1728,  446, 630,  446, 1732,  446, 1728,  446, 628,  448, 1728,  448, 1728,  446, 1732,  448, 1726,  448, 1728,  446, 1730,  448, 628,  446, 1728,  446, 630,  446, 628,  446, 628,  422, 652,  446, 628,  446, 628,  446, 1730,  448, 1728,  444, 630,  448, 1728,  446, 628,  446, 630,  446, 628,  446, 628,  446, 628,  448, 626,  446, 1730,  448, 626,  444, 1730,  422, 1756,  448, 1730,  446, 1728,  448, 5298,  4328, 4482,  448, 1728,  420, 654,  446, 1728,  446, 1730,  420, 656,  446, 626,  450, 1728,  446, 628,  448, 626,  446, 1728,  446, 628,  444, 630,  446, 1728,  446, 1730,  448, 626,  446, 1730,  446, 1728,  448, 628,  446, 1728,  448, 1730,  446, 1728,  448, 1730,  446, 1728,  450, 1726,  444, 628,  446, 1732,  446, 628,  448, 626,  446, 628,  446, 628,  444, 630,  446, 628,  448, 1728,  446, 1730,  446, 630,  446, 1730,  448, 628,  446, 628,  446, 628,  448, 628,  446, 628,  446, 628,  446, 1730,  446, 630,  448, 1728,  444, 1730,  448, 1728,  446, 1734,  446};  // UNKNOWN 1C03CDD8
//空调关
uint16_t power_off[199] = {4312, 4470,  450, 1728,  452, 622,  452, 1724,  452, 1722,  452, 626,  448, 628,  448, 1726,  452, 624,  450, 624,  452, 1722,  452, 624,  450, 626,  448, 1728,  478, 1696,  452, 622,  452, 1726,  474, 602,  448, 1726,  450, 1724,  454, 1722,  454, 1722,  454, 622,  446, 1726,  454, 1724,  450, 1726,  452, 622,  452, 624,  454, 620,  450, 624,  450, 1726,  450, 626,  450, 624,  452, 1722,  456, 1722,  448, 1726,  454, 622,  450, 624,  476, 598,  450, 624,  450, 626,  448, 626,  450, 622,  452, 624,  450, 1724,  452, 1726,  452, 1724,  454, 1724,  450, 1726,  450, 5292,  4332, 4480,  448, 1724,  450, 628,  448, 1726,  452, 1724,  476, 600,  450, 624,  452, 1722,  454, 624,  448, 626,  448, 1730,  446, 626,  452, 624,  448, 1726,  450, 1728,  452, 622,  446, 1728,  454, 620,  450, 1726,  454, 1724,  448, 1728,  448, 1728,  452, 624,  448, 1728,  450, 1726,  450, 1724,  452, 624,  450, 624,  448, 626,  446, 630,  450, 1724,  452, 624,  450, 624,  450, 1726,  450, 1728,  448, 1728,  450, 626,  448, 628,  448, 624,  450, 626,  450, 624,  446, 628,  450, 624,  448, 626,  448, 1726,  448, 1726,  450, 1726,  452, 1724,  452, 1726,  448};  // COOLIX B27BE0

// 新建Blinker组件对象
BlinkerButton Button1("btn-pwron");
BlinkerButton Button2("btn-pwroff");

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

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

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

  BLINKER_LOG("get button state: ", state);
  //检测到普通按钮按下(btn-pwron)
  if (state == BLINKER_CMD_BUTTON_TAP)
  {
    //发送红外指令
    irsend.sendRaw(power_on, 199, 38);  // Send a raw data capture at 38kHz.
    Button1.print("2楼空调开");
  
  }

}
//回调函数
void Button2_callback(const String &state)
{
  BLINKER_LOG("get button state: ", state);
  //检测到btn-pwroff按钮按下
  if (state == BLINKER_CMD_BUTTON_TAP)
  {
    irsend.sendRaw(power_off, 199, 38);  // Send a raw data capture at 38kHz.
    Button2.print("2楼空调关");
  }

}

4.3 上传程序到ESP8266

在这里插入图片描述
程序上传成功之后,复位Node MCU之后就可以开始使用Blinker App进行操作啦。(注意连接好红外发射的模块,引脚为GPIO4(D2))。

5.App控制

到了这一步就是检验实验成果的阶段啦,虽然说这个实验简单,但是粗心的话是很麻烦的哦。

注意事项
因为在这里使用的红外发射管,功率非常的小,所以操作的时候尽量让发射管对准空调,且离空调足够近(后期真的需要的话,可以换一个大功率的红外发射模块,或者可以多增加几个方向的红外发射模块)。

  • 打开 Blinker App
    如果程序中设备密钥,以及Wifi账户密码无误的话,此时可以在app中看到设备的状态是在线的。

在这里插入图片描述

  • 点击进入控制界面,添加调试框
    在此处可以调用一个监视器出来查看设备操作的实时信息。
    在这里插入图片描述
    在这里插入图片描述
  • 操作设备
    点击空调开按钮:如果有回调信息,说明红外命令成功发出,可以看到空调开启。
    在这里插入图片描述
    点击关闭空调:空调成功关闭。
    在这里插入图片描述

总结

到这里这个例程就结束了,其实这个只是做一个抛砖引玉的作用,通过小小的例子,就可以扩展出很多东西,比如电视的控制,或任何需要红外控制的地方。因为IRremoteESP8266红外解码的示例可以支持解析很多种红外协议,有了这个实例,我们并不需要去关心不同红外信号的协议,只需要读取红外键值的原生数据,然后把相同的红外数据发出即可。

发布了95 篇原创文章 · 获赞 326 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_36243942/article/details/104727701