基于STM32设计的格力空调遥控器

2023-10-21 12:59

本文主要是介绍基于STM32设计的格力空调遥控器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、格力空调协议介绍

格力空调的红外控制协议被称为格力红外通讯协议或者格力红外遥控协议。这个协议定义了一系列红外信号,可以用来控制格力空调的各种操作,例如开关、温度控制、模式选择、风速控制等等。

格力空调的红外控制协议是一种自定义协议,它并没有像NEC、RC5、RC6等协议一样被广泛应用。因此,不同型号的格力空调可能会有不同的红外控制协议。如果想要使用红外发送器控制格力空调,需要先了解当前空调使用的是哪种红外控制协议。

一般来说,格力空调的红外控制协议包含一个头部和一系列数据位。头部通常由一个起始位和一个引导位组成。数据位通常包括操作码、温度、模式、风速等信息。

下面是一个格力空调红外控制信号:

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

在这个示例中,红外控制信号的起始位持续时间为9000微秒。接下来是一个引导位,持续时间为4500微秒和4500微秒。引导位后面是一系列数据位,包括操作码、温度、模式、风速等信息。在这个示例中,操作码为0x88,表示将空调设置为制冷模式,并把温度设置为32度。

要控制格力空调,需要使用一个红外发送器,将这个信号通过红外光线发送到空调控制器。可以使用STM32F103ZET6的GPIO引脚控制红外线发送管来发送这个信号。

image-20230720112624187

image-20230720112701039

二、代码实现

2.1 代码实现

#include "stm32f10x.h"// 定义红外发送器引脚
#define IR_SENDER_GPIO_PORT GPIOA
#define IR_SENDER_GPIO_PIN GPIO_Pin_1// 定义红外发送器协议参数
#define IR_PROTOCOL_FREQ 38000            // 红外协议频率
#define IR_PROTOCOL_START_DURATION 9000   // 红外协议起始位持续时间
#define IR_PROTOCOL_LEADIN_DURATION 4500  // 红外协议引导位持续时间
#define IR_PROTOCOL_DATA_BIT_0_DURATION 560  // 红外协议数据位0持续时间
#define IR_PROTOCOL_DATA_BIT_1_DURATION 1690 // 红外协议数据位1持续时间// 发送一个红外协议信号
void IR_SendProtocol(uint32_t protocol)
{uint8_t i, j;uint32_t data_bit;// 发送起始位GPIO_SetBits(IR_SENDER_GPIO_PORT, IR_SENDER_GPIO_PIN);delay_us(IR_PROTOCOL_START_DURATION);// 发送引导位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);// 逐位发送协议数据for (i = 0; i < 14; i++){data_bit = (protocol >> i) & 0x01; // 获取当前位的值// 发送数据位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);}
}// 控制格力空调开关
void IR_ControlPower(int on_off)
{uint32_t protocol;if (on_off){// 开机protocol = 0x8820000200200000;}else{// 关机protocol = 0x8820000000200000;}IR_SendProtocol(protocol);
}// 控制格力空调温度
void IR_ControlTemperature(int temperature)
{uint32_t protocol;if (temperature < 16 || temperature > 31){return; // 温度范围无效}// 温度码为0x20加上实际温度值protocol = 0x8820002020000000 | (temperature - 16);IR_SendProtocol(protocol);
}// 控制格力空调模式
void IR_ControlMode(int mode)
{uint32_t protocol;switch (mode){case 0: // 制冷protocol = 0x8820000200200000;break;case 1: // 制热protocol = 0x8820000400200000;break;case 2: // 自动protocol = 0x8820000800200000;break;case 3: // 送风protocol = 0x8820001000200000;break;default:return; // 模式无效}IR_SendProtocol(protocol);
}// 控制格力空调风速
void IR_ControlFanSpeed(int fan_speed)
{uint32_t protocol;switch (fan_speed){case 0: // 自动风速protocol = 0x8820002000200000;break;case 1: // 低风速protocol = 0x8820004000200000;break;case 2: // 中风速protocol = 0x8820008000200000;break;case 3: // 高风速protocol = 0x8820010000200000;break;default:return; // 风速无效}IR_SendProtocol(protocol);
}

在代码中,定义了一些常量来表示格力空调红外控制协议的参数,例如红外协议频率、起始位持续时间、引导位持续时间、数据位0和数据位1的持续时间。也定义了一些函数来控制格力空调的各种操作,例如控制开关、温度、模式和风速。这些函数调用了IR_SendProtocol()函数来发送适当的红外信号。

IR_SendProtocol()函数中,先发送起始位和引导位。然后,逐位发送协议数据,根据数据位的值发送适当的红外信号。在代码中,使用delay_us()函数来延迟一定的时间来模拟红外信号的持续时间。

2.2 常见的控制码

以下是一些常见的格力空调红外控制协议:

【1】控制开关

// 开机
0x8820000200200000// 关机
0x8820000000200000

【2】控制温度

// 温度16度
0x8820002020000000// 温度17度
0x8820002120000000// 温度18度
0x8820002220000000// ...// 温度31度
0x8820003F20000000

【3】控制模式

// 制冷
0x8820000200200000// 制热
0x8820000400200000// 自动
0x8820000800200000// 送风
0x8820001000200000

【4】控制风速

// 自动风速
0x8820002000200000// 低风速
0x8820004000200000// 中风速
0x8820008000200000// 高风速
0x8820010000200000

【5】控制扫风

// 扫风开
0x8820080000200000// 扫风关
0x8820100000200000

【6】控制节能模式

// 节能开
0x8820200000200000// 节能关
0x8820400000200000

【7】控制睡眠模式

// 睡眠开
0x8821000000200000// 睡眠关
0x8822000000200000

【8】控制定时开关机

// 定时开机,时间为1小时
0x8824000000200000// 定时开机,时间为2小时
0x8828000000200000// 定时开机,时间为3小时
0x8830000000200000// ...// 定时开机,时间为24小时
0x8878000000200000// 取消定时开关机
0x8820000000400000

【9】控制清新功能

// 清新开
0x8820000002200000// 清新关
0x8820000004200000

【10】控制快速冷热

// 快速冷
0x8820000080200000// 快速热
0x8820000040200000

【11】控制干燥功能

// 干燥开
0x8820000001200000// 干燥关
0x8820000002200000

【12】控制自清洁功能

// 自清洁开
0x8820000008200000// 自清洁关
0x8820000010200000

【13】控制室内外循环功能

// 室内外循环开
0x8820020000200000// 室内外循环关
0x8820040000200000

这篇关于基于STM32设计的格力空调遥控器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/254575

相关文章

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类