做了好久、参考了大量的资料才做出来的,改模块可以学习载波为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