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

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

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

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

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

       然后是程序部分。

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

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

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这几个安静,解码得到的值如上所示。怎么知道解码的对不对?看遥控器的键值表。

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

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

完整工程源码,请关注公众号:单片机爱好者,回复关键字:ESP8266,即可获取。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据