做了好久、参考了大量的资料才做出来的,改模块可以学习载波为20K-56KHZ的 红外遥控器,并且配有8路红外发射管,可全方位、无死角的控制家里的所有红外设备。
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 未知错误
采集过程:红外采集模块在接收到上位机发送的采集指令会执行采集过程,采集过程出现蓝灯急速闪烁(平时常亮),此时进行采集红外数据。当在规定的时间内没有进行学习是返回操作超时;采集数据量超过
zigbee网络传输上限时,发送数据超限错误;
发送红外过程:接收到红外数据后会计算校验和,如果计算结果和接受到的校验和不一致就会发送错误命令
3、支持指令及应用举例
3.1、 指令支持
第一种: zigbee网络传输专用指令
学习命令
7E440000FFFFFFFF053E09200100FF1D7A7E
0 1
2 3 4
5 6 7
8 9 10 11 12 13 14 15 16 17//字节编号,
7E
44 00 00 FF FF FF FF 05 3E 09 20 01 00 FF 1D 7A 7E//学习指令
当安卓软件连上
linux网关后,按下学习按钮,网关转换完协议发送学习指令到
zigbee协调器,协调器再发送给带有红外模块的
ZIGBEE终端节点,通过
8个红外发射即可实现全方位、无死角的控制。(实质也是串口发送,故直接用串口发送本段命令也正确)
第二种:字符格式
应为数据协议本身比较复杂,段时间内很难看懂,所以我做好了收发的简单字符指令,任何单片机或者
PC串口助手通过串口与本红外模块相连、发送简单字符到红外模块即可实现全部功能。总共
3条字符指令:
sCC // 学习指令
tCC //把刚学西的红外发射出来
fCC //把刚学习的红外数据通过串口发送出来
第三种:直接发送红外码制
即直接将学到的红外码通过串口发送出去。
3.2、 应用举例
1、网关发送学习命令(01):7E440000FFFFFFFF053E09200100FF1D7A7E:
节点号、学习指令、
0 1
2 3 4
5 6 7
8 9 10 11 12 13 14 15 16 17//字节编号,
7E 44 00 00 FF FF FF FF 05 3E 09 20 01 00 FF 1D 7A 7E//学习红外指令
Mcu返回学习到的红外码:
节点号
AA 55 01 00 8C 20 6F EE EE 29 86 0E 1C 06 BA 07 2F 05 DB 07 30
05 DC 0E 24 06 BA 0E 25 13 C6 0E 25 06 BA 07 2F 06 BA 07 2F 05 DB 07 30 05 DC
07 2F 05 DC 07 2F 05 DC 07 2F 05 DB 07 2F 05 DB 07 30 05 DC 07 2F 0C D1 0E 25
06 BA 07 2F 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 05 DC 07 2F 0C D1 0E 25 05 DC
07 2F 0C D1 07 30 06 BA 0E 25 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 05 DB 07 2F
05 DB 07 30 05 DC 07 2F 05 DC 07 2F 0C D2 00 34 46 E1 23 23 2A
说明:
Mcu返回的
data是学习到的按键键值,上位机可以存储到数据库中。在发送学习命令后用户需要及时对准红外接收管按下按键,否则
mcu会返回超时错误命令。超时时间可以在代码中设置,默认是
10秒。节点号用于区分设备类型。
2、通过PC串口助手发送: sCC
串口助手返回:
节点号
AA 55 01 00 8C 20
6F EE EE 29 86 0E 1C 06 BA 07 2F 05 DB 07 30
05 DC 0E 24 06 BA 0E 25 13 C6 0E 25 06 BA 07 2F 06 BA 07 2F 05 DB 07 30 05 DC
07 2F 05 DC 07 2F 05 DC 07 2F 05 DB 07 2F 05 DB 07 30 05 DC 07 2F 0C D1 0E 25
06 BA 07 2F 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 05 DC 07 2F 0C D1 0E 25 05 DC
07 2F 0C D1 07 30 06 BA 0E 25 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 05 DB 07 2F
05 DB 07 30 05 DC 07 2F 05 DC 07 2F 0C D2 00 34 46 E1 23 23 2A
通过PC串口助手发送: tCC
则红外模块把本次学习到的红外码发射出去
通过PC串口助手发送: fCC
则红外模块把本次到的红外数据通过串口显示出来
3、直接把学习到的红外码制直接发送至红外模块,则该模块将发射相应的红外
AA 55 01 00 8C 20 6F EE EE 29 86 0E 1C 06
BA 07 2F 05 DB 07 30 05 DC 0E 24 06 BA 0E 25 13 C6 0E 25 06 BA 07 2F 06 BA 07
2F 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 05 DC 07 2F 05 DB 07 2F 05 DB 07 30 05
DC 07 2F 0C D1 0E 25 06 BA 07 2F 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 05 DC 07
2F 0C D1 0E 25 05 DC 07 2F 0C D1 07 30 06 BA 0E 25 05 DB 07 30 05 DC 07 2F 05
DC 07 2F 05 DB 07 2F 05 DB 07 30 05 DC 07 2F 05 DC 07 2F 0C D2 00 34 46 E1 23
23 2A
应为公司的需求、主控芯片是用CC2530做的。在此贴上红外相关的函数库IR.C IR.H(内附详细注释),希望大家有时间可以移植到其他常用芯片
---------------------------------
第一次发帖哎,,原子大哥就给个酷。。谢谢。。。过会整理整理程序发上
一周热门 更多>