基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计
实现步骤
1. 简介
…今天一起来学习做一个可以用手机控制的红外遥控器,还可根据需求定时开关电视,一键进入设定电视节目。或者在快到家时,提前开启家中的空调、窗帘等红外遥控装置,为本不支持智能控制的红外遥控设备接入智能家居。
主要需要的硬件有:,
模块 | 价格 |
---|---|
ESP8266模块(直插式) | 6元左右 |
ESP8266烧录器 | 8元左右 |
红外模块(接收) | 2元左右 |
红外模块(发射) | 2元左右 |
杜邦线 (母母线) |
软件设备部分,我们需要下载Arduino IDE开发软件,可直接到Arduino官网下载,选择适合自己电脑的版本下载后安装即可。
1.1 arduino IDE ESP8266开发
额外我们还需要下载开发ESP8266的拓展模块(由于来源于网络,并不知原开发者是谁,故没有备注出处)
链接:https://pan.baidu.com/s/16_lap-AsPbv3wixJ7qbiSQ提取码:05tm
下载完成后,双击安装,等待进度条结束后,窗口会自动关闭,随后重启打开arduino IDE。选择如图所示开发板型号。
1.2 Blinker库、IRremoteESP8266(红外)库
点灯科技官方下载并安装blinker Arduino库链接及教程:
https://github.com/blinker-iot/blinker-library/archive/master.zip
国内gitee(码云)下载较快:
https://gitee.com/lp670907/blinker-libraryhttps://gitee.com/lp670907/IRremoteESP8266
点击右边橙色按钮(克隆/下载)-> 下载zip
Windows:将下载好的blinker库和IRremoteESP8266库分别解压到 我的电脑>文档>Arduino>libraries 文件夹中,重启Arduino IDE即可。
1.3 测试
将ESP8266 安装到烧录器上,插上电脑,Arduino IDE选择文件->示例->IRremoteESP8266->IRrecvDemo
选择左上角的箭头开始编译下载
然后等待一会,出现下方所示结果,即可开始进行开发。
2. 遥控解码
接下来,我们要获取原电视遥控的按键与其对应的红外编码
2.1 硬件与连接
我们将ESP8266 插到ESP8266 烧录器中,拿出三根杜邦线,分别连接ESP8266 烧录器的3.3V(VCC)、GND、IO2,另外一端连上红外接收模块的三个引脚;
3.3V(VCC) -> VCCGND -> GNDIO2 -> DAT(data)
如图所示:
随后连接电脑,开始下一步。
2.2 代码
上一章调试中,打开的实例的内容即是红外遥控的解码例程。但是对应的引脚不适用于这款esp模块,所以我们需要修改一下
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>const uint16_t kRecvPin = 2; //数据引脚选择(2 = IO2)IRrecv irrecv(kRecvPin);decode_results results;void setup() {Serial.begin(115200); //串口通讯波特率irrecv.enableIRIn(); // 初始化红外接收模块(开始接收)while (!Serial) //等待初始化完成 delay(50);Serial.println();Serial.print("IRrecvDemo is now running and waiting for IR message on Pin "); //打印红外接收模块正在运行Serial.println(kRecvPin); //打印红外接收端口
}void loop() {if (irrecv.decode(&results)) { //判断是否接收到红外信号serialPrintUint64(results.value, HEX); //打印红外信号数据(串口监视器查看)Serial.println("");irrecv.resume(); //接收下一个值}delay(100);
}
点击右上角的箭头(或项目->上传)烧录程序到esp模块中
2.3 结果
烧录完成后,打开工具 -> 串口监视器,将波特率调至115200,对着红外接收模块按动电视遥控按键,将会出现如图所示十六进制数据,记录保存各个按键所对应的数据。
3. 遥控控制
我们根据已经获取到的按键与其红外信号,开始进行控制设计
首先,我们需要手机下载软件 点灯 blinker ,注册登陆
点击右上方“+”号 -> Arduino -> wifi接入 -> 复制key 后,返回主界面,就会出现一个新的设备 。
点击 Arduino -> 开始使用 -> 点击右上角编辑 -> 点击一下删除标志 -> 下方组件中,点击按键 ,上方就会出现
进行配置 :点击按键 -> 数据键名填上tv,选择开关按键,样式设置选择中间的开关,显示文本填上开关,选择喜欢的图标颜色 -> 点击保存。
同理,我们再设置一个普通按键
添加一个组件按键,->配置为数据键名 volume ,显示文本为 音量加大;选择喜欢的图标颜色(也可选择修改图标),样式设置不变 -> 保存;
点击右上角锁定界面;
3.1 硬件与连接
下面进行硬件连接:与第二章相同,不过我们需要将红外模块换为发射模块;
(但可能因为是我的硬件有问题,红外发射模块连接到ESP模块时,无法烧写程序,需要烧录完再连接上;且每次上电时,如果已经连接了红外模块会导致无法运行;需要先上电再接上红外发射模块,具体大家可以试一试)
具体连接线连接方式相同;
3.3V(VCC) -> VCCGND -> GNDIO2 -> 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,连接blnikerTV.attach(tv_callback); //把按键与函数对应起来VOLUME.attach(volume_callback); //把按键与函数对应起来
}void loop() { //不断循环运行的函数Blinker.run(); //blinker一直运行
}
3.3 结果
观察点灯 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) //把按键与函数对应起来
4 接入小爱同学
在点灯科技官网可以看到,BLINKER连接小爱同学的操作主要有
点灯科技官网链接 https://www.diandeng.tech/doc/xiaoai
所以,我们的语音控制只能是“打开“与"关闭"的操作,或者是我们可根据其原来的模式控制来自定义成我们想要的操作,例如
将原 ” 电视模式 " 设置成固定的电视节目;
将原 ” 温馨 " 模式,设置成固定的空调温度,模式,风速、风向等;(空调一次红外信号可控制多种设置)
等等,自定义语音控制函数的操作即可实现自己想要的操作;、
4.2 代码
#define BLINKER_WIFI //定义wifi模块
#define BLINKER_MIOT_OUTLET //定义为小爱同学插座
#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"); //定义"开关"数据键名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 miotPowerState(const String & state) //小爱语音开关控制进入函数
{ if (state == BLINKER_CMD_ON){ //判断语音内容 为打开TV.print("on"); //点灯科技软件对应按键被打开BLINKER_LOG("电视打开"); BlinkerMIOT.powerState("on"); //反馈小爱同学按键状态已打开BlinkerMIOT.print(); //发送反馈irsend.sendNEC(0x20DF10EF); //发射电视开关键的红外数据(同上)delay(20); oState = true; //开关状态保存,用于小爱同学与BLINKER同步}else if (state == BLINKER_CMD_OFF){ //判断语音内容 为关闭TV.print("off"); //点灯科技软件对应按键被关闭BLINKER_LOG("电视关闭");BlinkerMIOT.powerState("off"); //反馈小爱同学按键状态已关闭BlinkerMIOT.print(); //发送反馈irsend.sendNEC(0x20DF10EF); //发射电视开关键的红外数据(同上)delay(20); oState = false; //开关状态保存,用于小爱同学与BLINKER同步}
}void miotQuery(int32_t queryCode)/小爱语音查询状态函数
{BlinkerMIOT.powerState(oState ? "on" : "off"); //可查询开关状态BlinkerMIOT.print();
}void setup() { //开始运行一次的函数irsend.begin(); //初始化红外发射模块Blinker.begin(auth, ssid, pswd); //连接wifi,连接blnikerTV.attach(tv_callback); //把按键与函数对应起来BlinkerMIOT.attachPowerState(miotPowerState); //语音指令与控制函数对应(开关指令)BlinkerMIOT.attachQuery(miotQuery); //语音指令与控制函数对应(查询指令)
}void loop() { //不断循环运行的函数Blinker.run(); //blinker一直运行
}
4.3 结果
继续上传程序后,设备上电。
我们可以打开点灯科技软件,点进设备 -> 右上角 的设置 -> 将设备名改成自己想要的名字,如’'十二",便于之后呼叫小爱控制时比较顺口。
在米家APP上,我 的 -> 其他平台设备 -> 添加 ->找到点灯科技 - > 绑定账号 ,
然后同步一下设备,发现了 设备“十二 ”,然后退出;
接下来,我们就可以找小爱同学,控制设备了;
例如:
“ 打开十二 ” 或者 “ 十二关闭 ” 或者 “ 十二打开了吗 “
至此,小爱同学控制红外遥控设备功能已经实现了,
设置模式的,大家可以到上方点科技官网(接入小爱同学)查看内容,具体内容差不多,也挺简单的。小度、天猫精灵的官网也有,方法也差不多。点灯科技的Ardunio库确实做的很不错;
第一次写博客,表达能力不足的地方请见谅。
基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计相关推荐
- 物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)
物联网系列⑤--基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学) 一.设计目标 二.电路设计 三.思路介绍 四.ESP8266代码 一.设计目标 使用点灯科技平台接入物联网,可通过手机点灯 ...
- 基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计(三)
3. 遥控控制 我们根据已经获取到的按键与其红外信号,开始进行控制设计 首先,我们需要手机下载软件 点灯 blinker ,注册登陆 点击右上方"+"号 -> Arduino ...
- 基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计(一)
实现步骤 1. 简介 -今天一起来学习做一个可以用手机控制的红外遥控器,还可根据需求定时开关电视,一键进入设定电视节目.或者在快到家时,提前开启家中的空调.窗帘等红外遥控装置,为本不支持智能控制的红外 ...
- 基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计(四)
4 接入小爱同学 在点灯科技官网可以看到,BLINKER连接小爱同学的操作主要有 点灯科技官网链接 https://www.diandeng.tech/doc/xiaoai 所以,我们的语音控制只能是 ...
- 基于点灯科技平台的智能开关设计
基于点灯科技平台的智能开关设计 一.总体方案设计 设计由WIFI模块.电压检测模块.STM32微控制器三部分组成,能够通过ESP8266WIFI模块与点灯科技云平台进行数据的交互,设计间通过UART串 ...
- NodeMCU连接天猫精灵第二集——开发环境、运行条件、工作代码(基于Blinker点灯科技)
NodeMCU连接天猫精灵第一集--硬件构架(基于Blinker点灯科技) 根据上面说的硬件部分已经搭建完成了,所以现在说一下软件开发,首先要有一个共识,NodeMCU是可以用Arduino IDE开 ...
- ESP8266+blinker(点灯科技)
目录 前言 一.准备材料 二.项目部署 三.代码调试 总结: 前言 blinker点灯科技真的是一款非常好用的物联网控制APP,它节省了你连接云端的程序,直接实现APP控制系统.接下来让我们看看怎么通 ...
- Blinker点灯科技绑定GitHub增加设备数量到10个
Blinker点灯科技绑定GitHub设备数量增加到10个 首先电脑登陆点灯科技管理后台 登陆后,鼠标移动到右上角的自己账户图标这里,点击-开发运维管理. 点击绑定GitHub账户. 由于GitHub ...
- 文末赠书5本 | 附源码 | 三等奖作品 | 基于RA4M2和阿里云物联网平台的智能卧室小管家
[RA4M2设计挑战赛]基于RA4M2和阿里云物联网平台的智能卧室小管家 摘要 本项目已RA4M2为主控,搭载了RT-Thread实时操作系统,配合Wi-Fi模块来提供网络通讯能力,外设接入了继电器. ...
- 基于Wemos D1避障WiFi小车及智能垃圾桶设计
基于Wemos D1避障WiFi小车及智能垃圾桶设计 一.实验器材 主控芯片 Wemos D1 其他器材 HC-SR04超声波.L9110s电机.ESP82660WiFi模块.蜂鸣器 所需设备 TCP ...
最新文章
- 小程序在wxml里转数字_2020年利用名片小程序开启数字化营销的方法
- 热力学第二定律中的悖论 | 集智百科
- 腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制
- SQLite在指定列后面插入字段_个人学习系列 - 防止MySQL重复插入数据
- 《Java 高并发》02 多线程的特性
- “OneNMP”-超高性价比的实用网管工具
- 联想z510笔记本拆机
- 计算机vb输入框函数,VB基本函数大全
- 好用的企业邮箱怎么选择?可用邮箱大全
- linux小企鹅输入法无法使用,助:小企鹅输入法安装成功,但无法使用!!!!先谢谢大家了!!...
- 【R语言】【1】初学R语言语法使用Rstudio编辑
- Vue + element-ui 实现分页功能完整流程
- android气泡组件,Android 聊天气泡
- html设置右缩进,word左右缩进怎么设置
- k8s1.18 StorageClass 使用rbd-provisioner提供ceph rbd持久化存储
- Python数据清洗与可视化——北京租房数据统计分析05
- ArcBlock ⑪ 月报 | 无惧寒冬 ABT 2019 区块链远征启程
- 中国卫生和无菌阀市场趋势报告、技术动态创新及市场预测
- sync.Pool 问题argument should be pointer-like to avoid allocations (SA6002)
- 免费报表XDOC从入门到精通(一)简介
热门文章
- java考勤系统数据库_java考勤管理系统数据库实现
- 上海交大校长张杰院士:大学,重新定义你的人生
- (windows)如何删除删不掉的文件
- (九)JMH的详细使用,以及压测dubbo
- 力天创见智慧商业解决方案
- 翻译: ChatGPT 的激发敬畏、恐惧、特技和试图绕过其护栏的尝试
- ssm中报错: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type a
- matlab中zeros()函数
- 常见DDOS攻击原理
- mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .