做了好久、參考了大量的資料才做出來的,改模塊可以學習載波為20K-56KHZ的 紅外遙控器,并且配有8路紅外發(fā)射管,可全方位、無死角的控制家里的所有紅外設備。附件內容分享的是zigbee轉紅外模塊(8路紅外發(fā)射1路紅外學習模塊)。
1、模塊功能介紹
本zigbee轉紅外模塊有兩部分組成:zigbee傳輸節(jié)點+紅外采集發(fā)射模
1.1、Zigbee紅外傳輸節(jié)點介紹
- 1、 入網(wǎng)后向協(xié)調器上報節(jié)點短地址和節(jié)點號;
- 2、 雙串口讀取數(shù)據(jù),其一、支持高達160字節(jié)數(shù)據(jù)讀取和無線傳輸,完全滿足紅外數(shù)據(jù)要求;其二,支持小數(shù)據(jù)數(shù)據(jù)讀取和無線傳輸。
1.2、紅外采集發(fā)射模塊具有以下功能:
- 1、 采用獨立(非集成)紅外接受和發(fā)射二極管;
- 2、 串口輸入和輸出數(shù)據(jù)(57600,N,8,1);
- 3、 自動分析載波頻率(20KHz~56KHz);
- 4、 支持多種指令調試和控制;
- 5、 距離遠達8~10米,全方位360度紅外發(fā)射;
- 6、 支持學習市場上大部分紅外遙控器和發(fā)射學習碼制;
- 7、自動處理紅外冗余數(shù)據(jù),使數(shù)據(jù)量盡量減少;
- 8、支持數(shù)據(jù)校驗和;
- 9、學習和發(fā)射支持燈光指示。
2、 紅外數(shù)據(jù)采集及結構說明
2.1、MCU返回正確紅外數(shù)據(jù)結構說明:
當采集到正確的紅外數(shù)據(jù)時,采集模塊返回一下數(shù)據(jù)結構的紅外數(shù)據(jù),其中紅外數(shù)據(jù)結構如下:
typedef struct struct_sCommand
{
unsigned char head[2]; //數(shù)據(jù)頭0Xaa,0x55
unsigned char command; //紅外命令,0x01為學習命令0x00發(fā)射命令
unsigned int datalength; //數(shù)據(jù)長度,最大為150
unsigned char type; //節(jié)點號
unsigned char ir_hl; //載波周期 //數(shù)據(jù)長度
unsigned char data[DATALENGTH]; //紅外數(shù)據(jù)
unsigned char checksum; //校驗和
} sCommand;
其中:
數(shù)據(jù)頭固定為:0xAA,0x55
學習成功紅外命令:0x01
發(fā)射命令 :0x00
出錯指令 :0x03
數(shù)據(jù)長度包含:節(jié)點號1Byte+載波周期1Byte+紅外數(shù)據(jù)(datalength-2)Byte
校驗和:1Byte,除了checksum前邊所有的數(shù)據(jù)和。
2.2 、MCU返回錯誤結構說明
出錯指令:0x03
typedef struct struct_sCommand
{
unsigned char head[2]; //數(shù)據(jù)頭0Xaa,0x55
unsigned char command; //紅外命令
unsigned int datalength; //數(shù)據(jù)長度
unsigned char up_error; //上次出錯
unsigned char down_error; //本次出錯
unsigned char checksum; //校驗和
} sCommand;
錯誤代碼:
RROR_TIMEOUT 0xF0 操作超時
ERROR_CHECKSUM 0xF1 校驗失敗
ERROR_FULL 0xF2 紅外數(shù)據(jù)大于網(wǎng)絡傳輸設定上限
ERROR_UNKNOWN 0xFF 未知錯誤
說明:
主控芯片是用CC2530做的。在此貼上紅外相關的函數(shù)庫IR.C IR.H(內附詳細注釋),希望大家有時間可以移植到其他常用芯片
更多分析,詳見原文出處。
附件內容截圖: