• 方案介紹
    • 一、格力空調(diào)協(xié)議介紹
    • 二、代碼實(shí)現(xiàn)
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于STM32設(shè)計(jì)的格力空調(diào)遙控器

14小時(shí)前
302
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

一、格力空調(diào)協(xié)議介紹

格力空調(diào)的紅外控制協(xié)議被稱為格力紅外通訊協(xié)議或者格力紅外遙控協(xié)議。這個(gè)協(xié)議定義了一系列紅外信號(hào),可以用來控制格力空調(diào)的各種操作,例如開關(guān)、溫度控制、模式選擇、風(fēng)速控制等等。

格力空調(diào)的紅外控制協(xié)議是一種自定義協(xié)議,它并沒有像NEC、RC5、RC6等協(xié)議一樣被廣泛應(yīng)用。因此,不同型號(hào)的格力空調(diào)可能會(huì)有不同的紅外控制協(xié)議。如果想要使用紅外發(fā)送器控制格力空調(diào),需要先了解當(dāng)前空調(diào)使用的是哪種紅外控制協(xié)議。

一般來說,格力空調(diào)的紅外控制協(xié)議包含一個(gè)頭部和一系列數(shù)據(jù)位。頭部通常由一個(gè)起始位和一個(gè)引導(dǎo)位組成。數(shù)據(jù)位通常包括操作碼、溫度、模式、風(fēng)速等信息。

下面是一個(gè)格力空調(diào)紅外控制信號(hào)

Start Bit: 9000us
Lead-in: 4500us, 4500us
Data: 0x88, 0x20, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

在這個(gè)示例中,紅外控制信號(hào)的起始位持續(xù)時(shí)間為9000微秒。接下來是一個(gè)引導(dǎo)位,持續(xù)時(shí)間為4500微秒和4500微秒。引導(dǎo)位后面是一系列數(shù)據(jù)位,包括操作碼、溫度、模式、風(fēng)速等信息。在這個(gè)示例中,操作碼為0x88,表示將空調(diào)設(shè)置為制冷模式,并把溫度設(shè)置為32度。

要控制格力空調(diào),需要使用一個(gè)紅外發(fā)送器,將這個(gè)信號(hào)通過紅外光線發(fā)送到空調(diào)控制器。可以使用STM32F103ZET6的GPIO引腳控制紅外線發(fā)送管來發(fā)送這個(gè)信號(hào)。

image-20230720112624187

二、代碼實(shí)現(xiàn)

2.1 代碼實(shí)現(xiàn)

#include "stm32f10x.h"

// 定義紅外發(fā)送器引腳
#define IR_SENDER_GPIO_PORT GPIOA
#define IR_SENDER_GPIO_PIN GPIO_Pin_1

// 定義紅外發(fā)送器協(xié)議參數(shù)
#define IR_PROTOCOL_FREQ 38000            // 紅外協(xié)議頻率
#define IR_PROTOCOL_START_DURATION 9000   // 紅外協(xié)議起始位持續(xù)時(shí)間
#define IR_PROTOCOL_LEADIN_DURATION 4500  // 紅外協(xié)議引導(dǎo)位持續(xù)時(shí)間
#define IR_PROTOCOL_DATA_BIT_0_DURATION 560  // 紅外協(xié)議數(shù)據(jù)位0持續(xù)時(shí)間
#define IR_PROTOCOL_DATA_BIT_1_DURATION 1690 // 紅外協(xié)議數(shù)據(jù)位1持續(xù)時(shí)間

// 發(fā)送一個(gè)紅外協(xié)議信號(hào)
void IR_SendProtocol(uint32_t protocol)
{
    uint8_t i, j;
    uint32_t data_bit;

    // 發(fā)送起始位
    GPIO_SetBits(IR_SENDER_GPIO_PORT, IR_SENDER_GPIO_PIN);
    delay_us(IR_PROTOCOL_START_DURATION);

    // 發(fā)送引導(dǎo)位
    GPIO_ResetBits(IR_SENDER_GPIO_PORT, IR_SENDER_GPIO_PIN);
    delay_us(IR_PROTOCOL_LEADIN_DURATION);
    GPIO_SetBits(IR_SENDER_GPIO_PORT, IR_SENDER_GPIO_PIN);
    delay_us(IR_PROTOCOL_LEADIN_DURATION);

    // 逐位發(fā)送協(xié)議數(shù)據(jù)
    for (i = 0; i < 14; i++)
    {
        data_bit = (protocol >> i) & 0x01; // 獲取當(dāng)前位的值

        // 發(fā)送數(shù)據(jù)位
        GPIO_ResetBits(IR_SENDER_GPIO_PORT, IR_SENDER_GPIO_PIN);
        if (data_bit)
        {
            delay_us(IR_PROTOCOL_DATA_BIT_1_DURATION);
        }
        else
        {
            delay_us(IR_PROTOCOL_DATA_BIT_0_DURATION);
        }
        GPIO_SetBits(IR_SENDER_GPIO_PORT, IR_SENDER_GPIO_PIN);
        delay_us(IR_PROTOCOL_DATA_BIT_0_DURATION);
    }
}

// 控制格力空調(diào)開關(guān)
void IR_ControlPower(int on_off)
{
    uint32_t protocol;

    if (on_off)
    {
        // 開機(jī)
        protocol = 0x8820000200200000;
    }
    else
    {
        // 關(guān)機(jī)
        protocol = 0x8820000000200000;
    }

    IR_SendProtocol(protocol);
}

// 控制格力空調(diào)溫度
void IR_ControlTemperature(int temperature)
{
    uint32_t protocol;

    if (temperature < 16 || temperature > 31)
    {
        return; // 溫度范圍無效
    }

    // 溫度碼為0x20加上實(shí)際溫度值
    protocol = 0x8820002020000000 | (temperature - 16);

    IR_SendProtocol(protocol);
}

// 控制格力空調(diào)模式
void IR_ControlMode(int mode)
{
    uint32_t protocol;

    switch (mode)
    {
    case 0: // 制冷
        protocol = 0x8820000200200000;
        break;
    case 1: // 制熱
        protocol = 0x8820000400200000;
        break;
    case 2: // 自動(dòng)
        protocol = 0x8820000800200000;
        break;
    case 3: // 送風(fēng)
        protocol = 0x8820001000200000;
        break;
    default:
        return; // 模式無效
    }

    IR_SendProtocol(protocol);
}

// 控制格力空調(diào)風(fēng)速
void IR_ControlFanSpeed(int fan_speed)
{
    uint32_t protocol;

    switch (fan_speed)
    {
    case 0: // 自動(dòng)風(fēng)速
        protocol = 0x8820002000200000;
        break;
    case 1: // 低風(fēng)速
        protocol = 0x8820004000200000;
        break;
    case 2: // 中風(fēng)速
        protocol = 0x8820008000200000;
        break;
    case 3: // 高風(fēng)速
        protocol = 0x8820010000200000;
        break;
    default:
        return; // 風(fēng)速無效
    }

    IR_SendProtocol(protocol);
}

在代碼中,定義了一些常量來表示格力空調(diào)紅外控制協(xié)議的參數(shù),例如紅外協(xié)議頻率、起始位持續(xù)時(shí)間、引導(dǎo)位持續(xù)時(shí)間、數(shù)據(jù)位0和數(shù)據(jù)位1的持續(xù)時(shí)間。也定義了一些函數(shù)來控制格力空調(diào)的各種操作,例如控制開關(guān)、溫度、模式和風(fēng)速。這些函數(shù)調(diào)用了IR_SendProtocol()函數(shù)來發(fā)送適當(dāng)?shù)募t外信號(hào)。

IR_SendProtocol()函數(shù)中,先發(fā)送起始位和引導(dǎo)位。然后,逐位發(fā)送協(xié)議數(shù)據(jù),根據(jù)數(shù)據(jù)位的值發(fā)送適當(dāng)?shù)募t外信號(hào)。在代碼中,使用delay_us()函數(shù)來延遲一定的時(shí)間來模擬紅外信號(hào)的持續(xù)時(shí)間。

2.2 常見的控制碼

以下是一些常見的格力空調(diào)紅外控制協(xié)議:

【1】控制開關(guān)

// 開機(jī)
0x8820000200200000

// 關(guān)機(jī)
0x8820000000200000

【2】控制溫度

// 溫度16度
0x8820002020000000

// 溫度17度
0x8820002120000000

// 溫度18度
0x8820002220000000

// ...

// 溫度31度
0x8820003F20000000

【3】控制模式

// 制冷
0x8820000200200000

// 制熱
0x8820000400200000

// 自動(dòng)
0x8820000800200000

// 送風(fēng)
0x8820001000200000

【4】控制風(fēng)速

// 自動(dòng)風(fēng)速
0x8820002000200000

// 低風(fēng)速
0x8820004000200000

// 中風(fēng)速
0x8820008000200000

// 高風(fēng)速
0x8820010000200000

【5】控制掃風(fēng)

// 掃風(fēng)開
0x8820080000200000

// 掃風(fēng)關(guān)
0x8820100000200000

【6】控制節(jié)能模式

// 節(jié)能開
0x8820200000200000

// 節(jié)能關(guān)
0x8820400000200000

【7】控制睡眠模式

// 睡眠開
0x8821000000200000

// 睡眠關(guān)
0x8822000000200000

【8】控制定時(shí)開關(guān)機(jī)

// 定時(shí)開機(jī),時(shí)間為1小時(shí)
0x8824000000200000

// 定時(shí)開機(jī),時(shí)間為2小時(shí)
0x8828000000200000

// 定時(shí)開機(jī),時(shí)間為3小時(shí)
0x8830000000200000

// ...

// 定時(shí)開機(jī),時(shí)間為24小時(shí)
0x8878000000200000

// 取消定時(shí)開關(guān)機(jī)
0x8820000000400000

【9】控制清新功能

// 清新開
0x8820000002200000

// 清新關(guān)
0x8820000004200000

【10】控制快速冷熱

// 快速冷
0x8820000080200000

// 快速熱
0x8820000040200000

【11】控制干燥功能

// 干燥開
0x8820000001200000

// 干燥關(guān)
0x8820000002200000

【12】控制自清潔功能

// 自清潔開
0x8820000008200000

// 自清潔關(guān)
0x8820000010200000

【13】控制室內(nèi)外循環(huán)功能

// 室內(nèi)外循環(huán)開
0x8820020000200000

// 室內(nèi)外循環(huán)關(guān)
0x8820040000200000
  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載

相關(guān)推薦