格力空调遥控器(YB0F2)红外编码规则

一、基本信息

  • 调制方法:脉冲间距调制
  • 载波频率:37.9KHz(38KHz)

二、电平宽度

  • 起始码S:脉宽900us低电平,间距4500us高电平
  • 数据码“1”:脉宽600us低电平,间距1600us高电平
  • 数据码“0”:脉宽600us低电平,间距600us高电平
  • 连接码C:脉宽600us低电平,间距20000us高电平

三、编码信息

  1. 数据码由两部分组成,前一部分包括36位,其中第36位与连接码合并,无所谓0/1,可认为是连接码;后一部分包括32位
  2. 一次指令发送中,包含以下结构:起始码+数据码1(36位)+连接码+数据码2(32位),具体如图所示
  3. 前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
  4. 后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
  5. 关联规则
    (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
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注