基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计_基于esp8266与点灯blinker-程序员宅基地

技术标签: 智能家居  红外发射接收  blinker库 点灯科技库 Arduino库  esp8266  iot  

实现步骤

1. 简介

…今天一起来学习做一个可以用手机控制的红外遥控器,还可根据需求定时开关电视,一键进入设定电视节目。或者在快到家时,提前开启家中的空调、窗帘等红外遥控装置,为本不支持智能控制的红外遥控设备接入智能家居。
主要需要的硬件有:,

模块 价格
ESP8266模块(直插式)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-library
    
    https://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) ->  VCC
   GND    ->  GND
   IO2    ->  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) ->   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.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,连接blniker
  TV.attach(tv_callback);           //把按键与函数对应起来
  BlinkerMIOT.attachPowerState(miotPowerState);   //语音指令与控制函数对应(开关指令)
  BlinkerMIOT.attachQuery(miotQuery);    //语音指令与控制函数对应(查询指令)
}

void loop() {
      //不断循环运行的函数
      Blinker.run();    //blinker一直运行
}

4.3 结果

继续上传程序后,设备上电。
我们可以打开点灯科技软件,点进设备 -> 右上角 的设置 -> 将设备名改成自己想要的名字,如’'十二",便于之后呼叫小爱控制时比较顺口。

在米家APP上,我 的 -> 其他平台设备 -> 添加 ->找到点灯科技 - > 绑定账号 ,
然后同步一下设备,发现了 设备“十二 ”,然后退出;

接下来,我们就可以找小爱同学,控制设备了;
例如:
“ 打开十二 ” 或者 “ 十二关闭 ” 或者 “ 十二打开了吗 “

至此,小爱同学控制红外遥控设备功能已经实现了,

设置模式的,大家可以到上方点科技官网(接入小爱同学)查看内容,具体内容差不多,也挺简单的。小度、天猫精灵的官网也有,方法也差不多。点灯科技的Ardunio库确实做的很不错;

第一次写博客,表达能力不足的地方请见谅。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42913193/article/details/107289008

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签