做了好久、参考了大量的资料才做出来的,改模块可以学习载波为20K-56KHZ的 红外遥控器,并且配有8路红外发射管,可全方位、无死角的控制家里的所有红外设备。附件内容分享的是zigbee转红外模块(8路红外发射1路红外学习模块)。 1、模块功能介绍 本zigbee转红外模块有两部分组成:zigbee传输节点+红外采集发射模 1.1、Zigbee红外传输节点介绍 1、 入网后向协调器上报节点短地址和节点号; 2、 双串口读取数据,其一、支持高达160字节数据读取和无线传输,完全满足红外数据要求;其二,支持小数据数据读取和无线传输。 1.2、红外采集发射模块具有以下功能: 1、 采用独立(非集成)红外接受和发射二极管; 2、 串口输入和输出数据(57600,N,8,1); 3、 自动分析载波频率(20KHz~56KHz); 4、 支持多种指令调试和控制; 5、 距离远达8~10米,全方位360度红外发射; 6、 支持学习市场上大部分红外遥控器和发射学习码制; 7、自动处理红外冗余数据,使数据量尽量减少; 8、支持数据校验和; 9、学习和发射支持灯光指示。 2、 红外数据采集及结构说明 2.1、MCU返回正确红外数据结构说明:当采集到正确的红外数据时,采集模块返回一下数据结构的红外数据,其中红外数据结构如下: typedef struct struct_sCommand { unsigned char head[2]; //数据头0Xaa,0x55 unsigned char command; //红外命令,0x01为学习命令0x00发射命令 unsigned int datalength; //数据长度,最大为150 unsigned char type; //节点号 unsigned char ir_hl; //载波周期 //数据长度 unsigned char data[DATALENGTH]; //红外数据 unsigned char checksum; //校验和 } sCommand; 其中: 数据头固定为:0xAA,0x55 学习成功红外命令:0x01 发射命令 :0x00 出错指令 :0x03 数据长度包含:节点号1Byte+载波周期1Byte+红外数据(datalength-2)Byte 校验和:1Byte,除了checksum前边所有的数据和。 2.2 、MCU返回错误结构说明出错指令:0x03 typedef struct struct_sCommand { unsigned char head[2]; //数据头0Xaa,0x55 unsigned char command; //红外命令 unsigned int datalength; //数据长度 unsigned char up_error; //上次出错 unsigned char down_error; //本次出错 unsigned char checksum; //校验和 } sCommand; 错误代码: RROR_TIMEOUT 0xF0 操作超时 ERROR_CHECKSUM 0xF1 校验失败 ERROR_FULL 0xF2 红外数据大于网络传输设定上限 ERROR_UNKNOWN 0xFF 未知错误 说明: 主控芯片是用CC2530做的。在此贴上红外相关的函数库IR.C IR.H(内附详细注释),希望大家有时间可以移植到其他常用芯片 更多分析,详见原文出处。 附件内容截图:
1