前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESP8266_23基于硬件定时器的红外遥控器解码

ESP8266_23基于硬件定时器的红外遥控器解码

作者头像
MCU起航
发布2020-06-29 14:24:16
1.2K0
发布2020-06-29 14:24:16
举报
文章被收录于专栏:单片机爱好者

遥控器,做为和物联网设备通信的设备之一,用途还是蛮多的。毕竟像遥控器这类设备,成本低,功能强,一次可以满足多种需要。所以,这一节,咱们研究下用ESP8266,连接一体式红外接收头,然后做红外解码的用法。

首先说需要准备什么:一个红外遥控器,一个一体式红外接收头(这里我用的是VS1838,你可以用你擅长的)就够了。如下所示。

要用这个遥控器,就要了解红外遥控编码的原理,因为这部分内容比较基础,这里就不再浪费时间了。不懂红外遥控器原理的童鞋,只能说明基础太薄弱,建议先把基础打好。

然后是接线,这个就比较简单了。ESP8266的所有GPIO都可以用来进行红外解码,这里我随便选了一个GPIO5。也就是说VS1838的数据输出脚,接到ESP8266的GPIO5。

然后是程序部分。

这里比较尴尬,因为根据我了解到的信息,安信可官方是有这部分源码的,我找了一下,确实也找到了。但是在编译的时候,出了一些莫名其妙的问题。总之,就是编译不过,为此,我还找了安信可的论坛发帖咨询,结果等了5天,毫无反应……………

老夫很是郁闷,于是一气之下,把51单片机里常用的红外解码程序移植了过来。因为这部分比较简单,看一下关键部分的源码就行了,如下:

代码语言:javascript
复制
void ICACHE_FLASH_ATTR system_done()
{
       wifi_station_disconnect();
       //配置PERIPHS_IO_MUX_GPIO5_U为GPIO模式
       PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5);
       GPIO_DIS_OUTPUT(GPIO_ID_PIN(5));          //设置为输入
       ETS_GPIO_INTR_DISABLE();                        //关闭中断
       ETS_GPIO_INTR_ATTACH(GPIO_intr_handler,NULL);   //设置中断处理函数
       //配置GPIO5为下降沿触发的方式
       gpio_pin_intr_state_set(GPIO_ID_PIN(5),GPIO_PIN_INTR_NEGEDGE);
       ETS_GPIO_INTR_ENABLE();                                //使能中断
       os_printf("inter init done!\r\n");

       //参数1:0,使用 FRC1 中断源,1,使用 NMI 中断源;参数2:0,不自动填充,1,自动填充
       hw_timer_init(0,1);
       hw_timer_set_func(HW_IRTIME);             //设置回调函数
       hw_timer_arm(278);                                  //启动定时器,设置定时时间,单位us
       os_printf("hw_timer init done!\r\n");
       os_timer_disarm(&PROCESS_timer);  //使用之前先关闭,设置回调函数
       os_timer_setfn(&PROCESS_timer, (os_timer_func_t *)IF_PROCESS, NULL);
       os_timer_arm(&PROCESS_timer, 500, 1);  //启动软件定时器,每隔0.5秒调用一次回调函数
}

这是系统初始化完成函数调用的回调函数,该函数中主要实现了三个功能:

1、端口初始化。选择GPIO5做为红外接收管脚,设置为输入、下降沿中断。设置中断相应的处理函数,跟51里面一样,就是irtime的一些处理。

2、硬件定时器初始化。单片机做红外解码的时候,用的比较多的一种方法就是设置一个定时器,让它每隔0.278ms中断一次,依次做为检测引导码和0、1信号的时间基准。这里初始化定时器的目的是一样的,让它每隔278us中断一次。

3、软件定时器初始化。前面的章节强调过,ESP8266里面不建议使用while循环。所以通过软件定时器,每隔0.5秒,判断一下红外数据的接收是否完成,如果完成了,那就进行相应的处理。

很简单,基本没有涉及到新的知识。

程序修改完成,保存、清理、编译、下载一条龙,然后重新上电。这里借助串口助手来查看效果。设备上电之后,效果如下所示:

如图所示,上电后先进行相应的初始化配置,然后就是解码的过程。我依次按下了2、4、6、8这几个安静,解码得到的值如上所示。怎么知道解码的对不对?看遥控器的键值表。

还是那句话,不同厂家的遥控器,键值表很有可能是不一样的,找卖家要。我这里的如下所示:

由此可见,红外解码没有问题。本节内容结束。

链接:

https://pan.baidu.com/s/13leQVCuyflRAQmqIFtfnPQ

提取码:g6by

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单片机爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
物联卡
物联卡(IoT Link)是基于三大运营商(移动、联通、电信)提供物联网专用号段(13 位)的移动通信接入业务。该业务支持短信、无线数据通信等基础通信服务,可用于各种物联网设备的应用场景,如车联网、智能家居、穿戴设备、共享单车、移动支付、环境监测和智慧农业等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档