3. 遥控控制
我们根据已经获取到的按键与其红外信号,开始进行控制设计
首先,我们需要手机下载软件 点灯 blinker ,注册登陆
点击右上方“+”号 -> Arduino -> wifi接入 -> 复制key 后,返回主界面,就会出现一个新的设备 。
点击 Arduino -> 开始使用 -> 点击右上角编辑 -> 点击一下删除标志 -> 下方组件中,点击按键 ,上方就会出现
进行配置 :点击按键 -> 数据键名填上tv,选择开关按键,样式设置选择中间的开关,显示文本填上开关,选择喜欢的图标颜色 -> 点击保存。
同理,我们再设置一个普通按键
添加一个组件按键,->配置为数据键名 volume ,显示文本为 音量加大;选择喜欢的图标颜色(也可选择修改图标),样式设置不变 -> 保存;
点击右上角锁定界面;
3.1 硬件与连接
下面进行硬件连接:与第二章相同,不过我们需要将红外模块换为发射模块;
(但可能因为是我的硬件有问题,红外发射模块连接到ESP模块时,无法烧写程序,需要烧录完再连接上;且每次上电时,如果已经连接了红外模块会导致无法运行;需要先上电再接上红外发射模块,具体大家可以试一试)
具体连接线连接方式相同;
3.3V(VCC) -> VCC
GND -> GND
IO2 -> DAT(data)
3.2 代码
Arduino IDE示例中同样有红外发射的例程;
文件 -> 示例 -> IRremoteESP8266->IRsendDemo
但我们还需要blinker库的内容,所示具体代码如下所示;
#define BLINKER_WIFI //定义wifi模块
#include <Blinker.h>//包含Blinker头文件
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#define kIrled 2 //定义IO2
IRsend irsend(kIrled); //定义IO2为红外发射数据端
bool oState = false; //开关状态保存
char auth[] = "******"; //设备key(点灯科技软件,进入设备后,右上角可查看)
char ssid[] = "******"; //wifi 名称
char pswd[] = "******"; //wifi 密码
BlinkerButton TV("tv"); //定义"开关"数据键名
BlinkerButton VOLUME("volume"); //定义"音量增大"数据键名
void tv_callback(const String & state) { //按下开关按键
if (state == BLINKER_CMD_ON){ //如果按键按下后是打开
BLINKER_LOG("打开电视");
TV.print("on"); //记录是打开状态
irsend.sendNEC(0x20DF10EF); //发射电视开关键的红外数据(第二章获取的信号值)
delay(20);
oState = true; //开关状态保存,主要用于接入小爱
}
else if (state == BLINKER_CMD_OFF){ //如果按键按下后是关闭
BLINKER_LOG("关闭电视");
TV.print("off"); //记录是关闭状态
irsend.sendNEC(0x20DF10EF); //发射电视开关键的红外数据(第二章获取的信号值)
delay(20);
oState = false; //开关状态保存,主要用于接入小爱
}
}
void volume_callback(const String & state1) { //不判断不开关、按下即增大音量
BLINKER_LOG("增大音量");
irsend.sendNEC(0x80BFA15E);
delay(20);
}
void setup() { //开始运行一次的函数
irsend.begin(); //初始化红外发射模块
Blinker.begin(auth, ssid, pswd); //连接wifi,连接blniker
TV.attach(tv_callback); //把按键与函数对应起来
VOLUME.attach(volume_callback); //把按键与函数对应起来
}
void loop() { //不断循环运行的函数
Blinker.run(); //blinker一直运行
}
3.2 结果
观察点灯 blinker软件上的设备是否显示在线,然后点进去,点按开关键,将红外发射模块朝向电视机,点按软件上开关按键;
这样电视就能实现手机控制开关和音量增大的控制
这里只展示了简单的开关、增大音量的设置;具体可以自己增加按键;
在软件中需要添加按键,键名需要记录,要写入代码中;
而在代码中,需要增加
1、
BlinkerButton NAME("data"); //定义"按键"数据键名
//NAME 代表按键名词(主要用于后面对应函数)
//name 代表键名编号(主要用于对于手机软件上的按键数据键名)
//state需要变化,避免冲突
2、定义按键后执行任务
void name_callback(const String & state) {
//主要为打印,串口监视器显示
BLINKER_LOG("增大音量");
//括号内为红外数据,根据实际情况来写,0x必须写,代表十六进制
irsend.sendNEC(0x80BFA15E);
delay(20); //个人觉得需要稍稍延时
}
3、对应键码和按键任务,在函数setup中添加
NAME.attach(name_callback) //把按键与函数对应起来