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

2023-11-10

一、格力空调协议介绍

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

格力空调的红外控制协议是一种自定义协议,它并没有像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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32设计的格力空调遥控器 的相关文章

  • 【一份老网工珍藏多年的网络配置笔记,很重要!】

    01 交换机 路由器的几种配置模式及模式转换 1 用户模式 登录到交换机 路由器 时会自动进入用户模式 提示符为 switchname gt 在该模式下只能够查看相关信息 对 IOS的运行不产生任何影响 2 特权模式 用户模式下 键入 en
  • 浅谈能耗系统在马来西亚连锁餐饮业的应用

    1 背景信息 Background 针对连锁餐饮业能耗高且能源管理不合理的问题 利用计算机网络技术 通讯技术 计量控制技术等信息化技术 实现能源资源分类分项计量和能源资源运行监管功能 清晰描述各分店总的用能现状 实时监测各供电回路的电压 电
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • C语言学前班

    C 语言学前班 10分钟入门 10天练习 哪有那么难 根本用不着科班通过上课学几个月 程序 数据结构 算法 数据结构 容器来存储要进行各种操作的数据 算法 对各种数据进行各种操作 加减乘除 增删改查 判 判断 排 排序 复 复位 输出结果来
  • Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses 解决方法

    mopondys iMac zyc flutter doctor Doctor summary to see all details run flutter doctor v Flutter Channel dev v1 16 2 on M
  • NVisionXR for ARCore内测版开放申请

    NVisionXR for ARCore引擎能够帮助开发者快速开发原生ARCore应用 只要你懂基本的Android开发 直接使用Android Studio 即可实现动画模型渲染 粒子特效 音视频播放 灯光渲染等功能 NVisionXR引
  • java线程池的使用

    线程池概述 线程池 Thread Pool 是一种基于池化思想管理线程的工具 使用线程池可以带来诸多好处 降低资源消耗 通过池化技术复用已创建的线程 减少线程创建和销毁的损耗 提高响应速度 任务到达时 特定情况下无需再创建线程 便于管理 j
  • hangfire+bootstrap ace 模板实现后台任务管理平台

    前言 前端时间刚开始接触Hangfire就翻译了一篇官方的教程 翻译 山寨 Hangfire Highlighter Tutorial 后来在工作中需要实现一个异步和定时执行的任务管理平台 就结合bootstrap ace模板和hangfi
  • echarts中多y轴图像(柱,折)

    先看看效果吧 var myChart echarts init document getElementById demo echarts zyyh 放入的id var colors e6bcff a3ffcd fefefe option c
  • C++之explicit的作用介绍

    1 C 中的关键字explicit主要是用来修饰类的构造函数 被修饰的构造函数的类 不能发生相应的隐式类型转换 只能以显示的方式进行类型转换 类构造函数默认情况下声明为隐式的即implicit 隐式转换即是可以由单个实参来调用的构造函数定义
  • 147. 精读《@types react 值得注意的 TS 技巧》

    1 引言 从 types react 源码中挖掘一些 Typescript 使用技巧吧 2 精读 泛型 extends 泛型可以指代可能的参数类型 但指代任意类型范围太模糊 当我们需要对参数类型加以限制 或者确定只处理某种类型参数时 就可以
  • 2022年江西省中职组“网络空间安全”赛项模块B-Web渗透测试

    2022年中职组山西省 网络空间安全 赛项 B 8 Web渗透测试任务书 B 8 Web渗透测试解析 不懂可以私信博主 一 竞赛时间 420分钟 共计7小时 吃饭一小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第 阶段
  • 【MySQL】数据库基本操作:创建删除数据库(Create/Drop),表增删改查

    数据库基本操作 1 启动服务 DOS命令 net start mysql 回车 2 登录MySQL数据库 mysql uroot proot 回车 3 查看MySQL中数据库 show databases 4 创建数据库 create da
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(八)

    马上就又到了程序员们躁动不安 蠢蠢欲动的季节 这不 金三银四已然到了家门口 元宵节一过后台就有不少人问我 现在外边大厂面试都问啥 想去大厂又怕面试挂 面试应该怎么准备 测试开发前景如何 面试 一个程序员成长之路永恒绕不过的话题 每每到这个时
  • GAN生成MNIST数据-PyTorch

    摘抄别处 供自己学习用 直接上代码 代码如下 coding utf 8 import torch autograd import torch nn as nn from torch autograd import Variable from
  • ssm框架整合的配置笔记

    ssm框架整合的配置笔记 打开idea工具新建maven maven环境配置 项目后面下一步下一步就行了 整个的项目Java代码我就不发了 主要是帮助大家快速的搭下配置文件基本信息方便快速复制使用 2 1 pop xml中导入依赖 juni
  • Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)

    本文为原创 如果转载请注明出处 http blog csdn net zhyl8157121 article details 8169172 其实之前发过一篇这样的博文http blog csdn net zhyl8157121 artic
  • MongoDB 或者 redis 可以替代 memcached 吗?

    mongodb和memcached不是一个范畴内的东西 mongodb是文档型的非关系型数据库 其优势在于查询功能比较强大 能存储海量数据 mongodb和memcached不存在谁替换谁的问题 和memcached更为接近的是redis
  • 计算机网络思维导图

    转载 原文 http www jingyile cn 496 2 复习计算机网络时画的一些思维导图 希望可以加深自己的理解 教材 计算机网络 第7版 谢希仁编著 第一章 概述 P0 计算机网络 lt 思维导图 gt 第二章 物理层 P1 计
  • TortoiseGit保存git的账号密码

    TortoiseGit保存git的账号密码 问题 电脑安装了git和TortoiseGit 但是每次commit pull push时都需要输入密码 而且是无限弹密码框 输入密码之后 还继续弹框 之前看了许多解决方案都不太行 例如 1 修改
  • pyecharts与matplotlib在使用时的区别和优缺点对比

    目录 简介 pyecharts 以下简介来源于官网 Matplotlib 个人总结 认知 举例 简介 pyecharts 以下简介来源于官网 echarts是一个由百度开源的数据可视化 凭借着良好的交互性 精巧的图表设计 得到了众多开发者的
  • 神经网络 Embedding层理解; Embedding层中使用预训练词向量

    1 Embedding层理解 高维稀疏特征向量到低维稠密特征向量的转换 嵌入层将正整数 下标 转换为具有固定大小的向量 把一个one hot向量变为一个稠密向量 参考 https zhuanlan zhihu com p 52787964
  • 基于STM32设计的格力空调遥控器

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