跳到主要内容

NEC 红外 IR 遥控收发

一、实现功能

通过红外模块接收遥控发来的数据,或者模拟遥控数据通过红外发送出去,基于前面的接收和发送功能,进而可以实现对其他遥控的复制模拟。

注意1:上述接收或发送的红外信号都是基于目前应用最广泛的NEC红外遥控编解码协议。遥控码为3字节的数据,遥控器(电视、空调等)的每个按键都有一个独立的遥控码。

注意2:除了NEC编解码协议外,市面上常见的红外遥控的编码协议还有SONY,飞利浦的等,甚至有的厂家的遥控器是私有协议,所以不是市面上所有遥控器编码都是NEC的,这点需要注意。我们在这里主要是为了实现红外遥控信号的收发,而不是为了复制遥控器,对于兼容市面上所有的遥控器那是不可能的。

二、模块介绍

product0

  • 能够接收并解析目前大多数主流的红外发遥控编码(NEC编码)芯片发送的红外信号,比如:uPD6121,uPD6122,TC9012,PT2221,PT2222,SC6121,SC6122,SC9012等。
  • 同时也能够发送任意基于NEC编码格式的遥控数据。

三、接线图

layout

四、材料清单

名称推荐购买链接(或者您可以自己制作)模块硬件资料
红外收发模块模块购买链接下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

五、完整代码

当按下Core开发板上的按键BTN1时发送固定的遥控码(0x01, 0x02, 0x03),当按下按键BTN2时则发送上一次接收到的遥控码(复制功能)。

--使能print函数直接输出到电脑串口终端上
LIB_UsbConfig("CDC")
--设置红外无线模块占用TX0、RX0引脚,并使能红外接收和发送
LIB_IRConfig("UART0")
--设置按键BTN1(占用D10口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN1","D10","L")
--设置按键BTN2(占用D11口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN2","D11","L")
--初始化遥控编码, table类型变量
code1 = {0x01,0x02,0x03} --按键1按下时发送的固定遥控码
code2 = {0xaa,0xaa,0xaa} --按键2按下时默认发送的遥控码
--开始大循环
while(GC(1) == true)
do
--查询按键BTN1是否短按过,如果按过则发送固定遥控码0x01,0x02,0x03
if LIB_ButtonQuery("BTN1") == 1 then
LIB_IRSend(code1)
end
--查询按键BTN2是否短按过,如果按过则发送刚刚收到的遥控码(复制遥控功能)
if LIB_ButtonQuery("BTN2") == 1 then
LIB_IRSend(code2)
end
--查询是否收到红外遥控数据,如果收到就复制收到的遥控码至code2中
recv_flag,recv_tab = LIB_IRRecv()
if recv_flag == 1 then
code2[1] = recv_tab[1]
code2[2] = recv_tab[2]
code2[3] = recv_tab[3]
--打印收到的遥控码数据
print(string.format("%02X %02X %02X", code2[1],code2[2],code2[3]))
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

六、代码实验结果

result0

result1

从上图可以看出,当我们按下遥控的任意两个按键时,串口调试助手打印出了两次遥控发射过来的遥控码。

从上图所看不见的,下面通过文字来描述:

  • 当按下Core开发板上的BTN1按键时,会模拟发送0x01,0x02,0x03遥控码

  • 当按下Core开发板上的BTN2按键时,会发送刚刚最后一次收到的0x00,0xEF,0X16遥控码