一、基本信息
- 调制方法:脉冲间距调制
- 载波频率:37.9KHz(38KHz)
二、电平宽度
- 起始码S:脉宽900us低电平,间距4500us高电平
- 数据码“1”:脉宽600us低电平,间距1600us高电平
- 数据码“0”:脉宽600us低电平,间距600us高电平
- 连接码C:脉宽600us低电平,间距20000us高电平
三、编码信息
- 数据码由两部分组成,前一部分包括36位,其中第36位与连接码合并,无所谓0/1,可认为是连接码;后一部分包括32位
- 一次指令发送中,包含以下结构:起始码+数据码1(36位)+连接码+数据码2(32位),具体如图所示

- 前36位数据码的结构如图

具体编码规则为:
(1)1-3位:模式

(2)4位:开关。开机:1;关机:0
(3)5-6位:风速

(4)7/37/41位:扫风。上下扫风:110;左右扫风:101;上下左右:111;无扫风:000
(5)8位:睡眠。睡眠:1;不睡眠:0
(6)9-12位:温度

(7)13-20位:睡眠定时

(8)21位:超强。超强:1;普通:0
(9)22位:灯光。开:1;关:0
(10)23/25位:健康与换气。健康:10;换气:01;健康+换气:11;普通:00
(11)24位:干燥辅热(制冷模式下为干燥,制热模式下为辅热)。干燥辅热:1;普通:0
(12)25位及以后:具体功能未知。29/31/34位为1,其余均为0
- 后32位数据码的结构如图
(1)7/37/41位:扫风。上下扫风:110;左右扫风:101;上下左右:111;无扫风:000
(2)45/46位:温度显示。不显示:00;显示:10;显示室内温度:01;显示室外温度:11
(3)63位:节能。开:1;关:0
(4)65-68位:校验码 = (模式 – 1) + (温度– 16) + 5 + 左右扫风 + 换气 + 节能 - 开关
(5)其他位:功能未知。均为0
- 关联规则
(1)自动模式下,只可以设置的项目有:风速1、2、3级、自动;上上下左右扫风;显示温度;灯光;睡眠定时(非睡眠)。其他项均不可以设置。此时温度不可设置,温度段的代码为:10011101。
(2)关机状态下,可以设置定时开机,代码与睡眠定时关机一样。也可以设置灯光。
(3)制冷模式下,可以设置的项有:温度;扫风;健康换气,节能(仅在此状态下可以设置);风速;定时;超强;睡眠;灯光;温度显示。
(4)除湿模式下,可以设置的项有:温度;扫风;健康换气;干燥;温度显示;定时;睡眠;灯光。
(5)通风模式下,可以设置的项有:温度;风速;健康换气;扫风;温度显示;定时;灯光。
(6)制热模式下,可以设置的项有:温度;风速;扫风;辅热;温度显示;定时;超强;睡眠;灯光。
Python语言拼码程序举例如下(python 2.7.11)
#coding=utf-8
#说明:格力空调红外拼码Python脚本程序
#对应的码库为格力9,inst值:100032
startLevel = (9000,4500) #起始码
linkLevel = (550,20000) #连接码
lowLevel = (550,550) #低电平
highLevel = (550,1660) #高电平
#模式标志
modeFlag = 4
def modeCodeFunc(m):
global modeFlag
modeCode = (lowLevel+lowLevel+lowLevel, #自动
highLevel+lowLevel+lowLevel, #制冷
lowLevel+highLevel+lowLevel, #加湿
highLevel+highLevel+lowLevel,#送风
lowLevel+lowLevel+highLevel) #制热
if m > modeCode.__len__()-1:
print "模式参数必须小于" +str(modeCode.__len__())
return modeCode[0]
modeFlag = m
return modeCode[m]
#开关
keyFlag = 0
def keyCodeFunc(k):
global keyFlag
keyCode = (lowLevel, #关
highLevel) #开
keyFlag = k
return keyCode[k]
#风速
fanSpeedFlag =0
def fanSpeedCodeFunc(f):
global fanSpeedFlag
fanSpeedCode = (lowLevel+lowLevel, #自动
highLevel+lowLevel, #一档
lowLevel+highLevel, #二档
highLevel+highLevel) #三档
if f>fanSpeedCode.__len__()-1:
print "风速参数必须小于"+str(fanSpeedCode.__len__())
return fanSpeedCode[0]
fanSpeedFlag = f
return fanSpeedCode[f]
#扫风
#fanScanFlag = 0
def fanScanCodeFunc(f):
fanScanCode = (lowLevel,highLevel)
fanScanFlag = f
if f>fanScanCode.__len__()-1:
print "扫风参数必须小于"+str(fanScanCode.__len__())
return fanScanCode[0]
return fanScanCode[f]
def getSleepCode(s):
sleepCode = (lowLevel,highLevel)
if s>sleepCode.__len__()-1:
print "睡眠参数必须小于"+str(sleepCode.__len__())
return sleepCode[0]
return sleepCode[s]
tempFlag = 16
def tempertureCodeFunc(t):
global tempFlag
tempFlag = t
tempCode = ()# lowLevel+lowLevel+lowLevel+lowLevel
dat = t - 16
#print dat
print bin(dat)
for i in range(0, 4, 1):
x = dat & 1
#print x,
if x == 1:
tempCode += highLevel
elif x == 0:
tempCode += lowLevel
dat = dat >> 1
return tempCode
#定时数据
def getTimerCode():
timerCode = lowLevel+lowLevel+lowLevel+lowLevel+\
lowLevel+lowLevel+lowLevel+lowLevel
return timerCode
#超强、灯光、健康、干燥、换气
def getOtherCode(strong, light, health, dry, breath):
otherFuncCode = ()
if True==strong:
otherFuncCode = highLevel
else:
otherFuncCode = lowLevel
if True==light:
otherFuncCode += highLevel
else:
otherFuncCode += lowLevel
if True==health:
otherFuncCode += highLevel
else:
otherFuncCode += lowLevel
if True==dry:
otherFuncCode += highLevel
else:
otherFuncCode += lowLevel
if True==breath:
otherFuncCode += highLevel
else:
otherFuncCode += lowLevel
return otherFuncCode
#前35位结束码后七位结束码
#所有按键都是
#000 1010
def getFirstCodeEnd():
firstCodeEnd = lowLevel+lowLevel+lowLevel+highLevel+lowLevel+highLevel+lowLevel
return firstCodeEnd
#连接码
def getLinkCode():
linkCode = lowLevel+highLevel+lowLevel+linkLevel
return linkCode
#上下扫风
fanUpAndDownFlag = 1;
fanLeftAndRightFlag = 1;
def fanUpAndDownCodeFunc(f):
global fanUpAndDownFlag
fanUpAndDownCode = (lowLevel+lowLevel+lowLevel+lowLevel,
highLevel+lowLevel+lowLevel+lowLevel)
fanUpAndDownFlag = f
fanScanCodeFunc(fanUpAndDownFlag or fanLeftAndRightFlag)
return fanUpAndDownCode[f]
#左右扫风
def fanLeftAndRightCodeFunc(f):
global fanLeftAndRightFlag
fanLeftAndRightCode =(lowLevel+lowLevel+lowLevel+lowLevel,
highLevel+lowLevel+lowLevel+lowLevel)
fanLeftAndRightFlag = f
fanScanCodeFunc(fanUpAndDownFlag or fanLeftAndRightFlag)
return fanLeftAndRightCode[f]
#0000
#0100
#0000
#0000
#0000
def getOtherFunc2():
otherFunc2 = lowLevel+lowLevel+lowLevel+lowLevel
otherFunc2 += lowLevel+highLevel+lowLevel+lowLevel
otherFunc2+= lowLevel+lowLevel+lowLevel+lowLevel+\
lowLevel+lowLevel+lowLevel+lowLevel+\
lowLevel+lowLevel+lowLevel+lowLevel
return otherFunc2
def getCheckoutCode():
#校验码 = (模式 – 1) + (温度 – 16) + 5 + 左右扫风 + 换气 + 节能 - 开关
# 取二进制后四位,再逆序
dat = (modeFlag - 1) + (tempFlag - 16) + 5 + fanLeftAndRightFlag + 0 + 0 - keyFlag
print(dat)
code = ()
for i in range(0, 4, 1):
x = dat & 1
if 1 == x:
code += highLevel
elif 0 == x:
code += lowLevel
dat = dat >> 1
#print code
return code
def getSecondCodeEnd():
secondCodeEnd = (550,40000)
return secondCodeEnd
if __name__ == "__main__":
print("格力空调遥控器红外编码-长码")
print("100032-格力9")
code = startLevel #起始码
code += modeCodeFunc(1) #模式:0自动,1制冷,2加湿,3送风,4加热
code += keyCodeFunc(1) #开关:0关,1开
code += fanSpeedCodeFunc(0) #风速:0自动,1一档,2二档,3三档
code += fanScanCodeFunc(0) #扫风:0关,1开-设置上下扫风和左右扫风的时候会自动设置为1
code += getSleepCode(0) #睡眠
code += tempertureCodeFunc(16) #温度
code += getTimerCode() #定时
code += getOtherCode(False,True,False,False,False) #其他-超强、灯光、健康、干燥、换气
code += getFirstCodeEnd() #剩余的编码
code += getLinkCode() #连接码
code += fanUpAndDownCodeFunc(0) #上下扫风
code += fanLeftAndRightCodeFunc(1) #左右扫风
code += getOtherFunc2() #固定码
code += getCheckoutCode() #校验码
code += getSecondCodeEnd() #结束码
print "电平码:"
print code