(红外遥控)STM32+红外模块控制格力空调

这篇具有很好参考价值的文章主要介绍了(红外遥控)STM32+红外模块控制格力空调。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 文章来源地址https://www.toymoban.com/news/detail-814926.html

其他红外介绍不多说了,下面介绍一下我使用stm32控制格力空调所遇到问题。

1.红外实现过程中遇到的问题

   网上大部分对格力空调红外编码的介绍都是

    起始码(S)+35位数据码+连接码(C)+32位数据码

 

0的电平宽度为:620us低电平+540us高电平,

1的电平宽度为:620us低电平+1620us高电平

起始码S电平宽度为:9000us低电平+4500us高电平

连接码C电平宽度为:620us低电平+20000us高电平

以上是在接受端的定义,要注意分辨。发射端是相反的

红外发射端的波形。

格力空调红外协议,stm32,嵌入式硬件,单片机,智能家居

红外接受端是以下这种

格力空调红外协议,stm32,嵌入式硬件,单片机,智能家居

两者是不同的。网上大多是第二种容易产生误解。

格力空调的编码如下图——

格力空调红外协议,stm32,嵌入式硬件,单片机,智能家居

网上的格式都大同小异对红外的编码产生的影响不大。

根据实际的使用,我发现我所使用的遥控器是如下这中格式,末尾的连接码不可缺少。

起始码(S)+35位数据码+连接码(C)+32位数据码+连接码(C)

而且红外遥控器会以两倍的连接码时间间隔发送两次命令。

以上是我实现红外过程中遇到的问题。

2.实现方法

使用stm32的pwm功能发出38kHz的载波,然后控制占空比以达到高低电平的实现。

//38kHz初始化
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	//打开定时器2的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//打开GPIOA的时钟			/*注意:只有部分端口才有PWM功能*/

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_InternalClockConfig(TIM2);	//设置定时器2的时钟源为内部时钟源
	
	TIM_TimeBaseInitTypeDef TimBaseInitStructure;		//设置时基单元
	TimBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;		
	TimBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; 	//设置计数模式为向上计数
	TimBaseInitStructure.TIM_Period = 101-1;		//ARR(自动重装器,设置计数峰值)
	TimBaseInitStructure.TIM_Prescaler = 19-1;		//PSC(预分频器,设置计时频率)
	TimBaseInitStructure.TIM_RepetitionCounter = 0;	//设置计数重装值
	TIM_TimeBaseInit(TIM2, &TimBaseInitStructure);
	
	TIM_OCInitTypeDef TIM_OCInitStructure;		//设置输出比较单元
	TIM_OCStructInit(&TIM_OCInitStructure);		//先对TIM_OCInitStructure所有成员赋值,之后只会对部分成员重新赋值,防止出现部分成员未赋值情况
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;	//设置输出比较模式为PWM1模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	//输出比较极性(设置REF,有效电平为高电平)
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//输出状态使能
	TIM_OCInitStructure.TIM_Pulse = 0;		//CRR(输出比较值)
	TIM_OC2Init(TIM2,&TIM_OCInitStructure);	//使用输出比较通道2
  TIM_Cmd(TIM2,ENABLE);	//定时器2使能

编码格式的实现

typedef struct{
    // Byte 0
    uint8_t Mode      :3;
    uint8_t Power     :1;
    uint8_t Fan       :2;
    uint8_t SwingAuto :1;
    uint8_t Sleep     :1;
    // Byte 1
    uint8_t Temp        :4;
    uint8_t TimerHalfHr :1;
    uint8_t TimerTensHr :2;
    uint8_t TimerEnabled:1;
    // Byte 2
    uint8_t TimerHours:4;
    uint8_t Turbo     :1;
    uint8_t Light     :1;
    uint8_t anion     :1;  // model==YAW1F
    uint8_t Powersv   :1;
    // Byte 3
    uint8_t unknown0        :2;//00
    uint8_t TempExtraDegreeF:1;
    uint8_t UseFahrenheit   :1;
    uint8_t unknown1        :4;  // value=0b0101
    // Byte 4
    uint8_t SwingV      :4;
    uint8_t SwingH      :3;
    uint8_t unknown2     :1; //0
    // Byte 5
    uint8_t DisplayTemp :2;
    uint8_t IFeel       :1;
    uint8_t unknown3    :3;  // value = 0b100 
    uint8_t WiFi        :1;  //0
    uint8_t unknown4    :1;    //0
    // Byte 6
    uint8_t unknown5   :8;  //00000000
    // Byte 7
    uint8_t unknown6    :2; //00
    uint8_t Econo       :1;
    uint8_t unknown7    :1;//0
    uint8_t Sum         :4;
  }Protocol;
//红外码初始化

 以及发送过程,发送都是逆序的即从低向高为发送。

void IR_Send38kHz(uint16_t time,FunctionalState NewState){
	if(NewState == 1){
		TIM_SetCompare2(TIM2,0);
	  Delay_us(time);}
	else
	{
		TIM_SetCompare2(TIM2,50);
	  Delay_us(time);
	}
};

void IR_SendGreeH(void){
    TIM_SetCompare2(TIM2,50);
	  Delay_us(GreeBitMark);
	  TIM_SetCompare2(TIM2,0);
	  Delay_us(GreeOneSpace);
};

void IR_SendGreeL(void){
    TIM_SetCompare2(TIM2,50);
	  Delay_us(GreeBitMark);
	  TIM_SetCompare2(TIM2,0);
	  Delay_us(GreeZeroSpace);
};

void IR_SendMsg(uint8_t cnt,uint8_t data){
     while(cnt--){
	   if(data&0x01){
     IR_SendGreeH();
		 data=data>>1;}
		 else{
		 IR_SendGreeL();
		 data=data>>1;
		 }
	 }
};

特别注意校验码的计算,网上有很多公式。下面我给出一种

校验码 = [(模式 – 1) + (温度 – 16) + 5 +左右扫风+换气+节能]取二进制后四位;

 

参考博客

GitHub - crankyoldgit/IRremoteESP8266: Infrared remote library for ESP8266/ESP32: send and receive infrared signals with multiple protocols. Based on: https://github.com/shirriff/Arduino-IRremote/

【智能电表】格力空调遥控器红外协议_格力空调红外协议-CSDN博客

格力空调遥控器红外编码透析(长码)_格力空调红外编码-CSDN博客

[LPC54102]红外编码与解码——GREE格力遥控 - NXP MCU - 电子工程世界-论坛 (eeworld.com.cn)

 

 

 

到了这里,关于(红外遥控)STM32+红外模块控制格力空调的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作

    STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作

    今日学习一下红外遥控的解码使用,红外遥控在日常生活必不可少,它的解码与使用也是学习单片机的一个小过程,我们将通过实践来实现它。 文章提供源码、测试工程下载、测试效果图。 目录 红外遥控原理:  红外遥控特点: 红外发射装置:  红外接收示意图:  NEC协议

    2024年02月11日
    浏览(9)
  • STM32单片机WIFI智能语音家居窗户窗帘空调灯控制系统OLED显示
  • 【STM32篇】驱动MXL90614红外测温模块

    【STM32篇】驱动MXL90614红外测温模块

    本次实验使用的测温模块型号GY-906-DCC模块,测距为10cm左右。 MLX90614 是一款红外非接触温度计。TO-39 金属封装里同时集成了红外感应热电堆探测器芯片和信处理专用集成芯片。 由于集成了低噪声放大器、17 位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温

    2024年04月28日
    浏览(7)
  • 【stm32单片机基础】红外NEC协议解码

    【stm32单片机基础】红外NEC协议解码

    红外通信协议是一种基于红外线的传输技术,广泛使用的家电遥控器几乎都是采用的红外线传输技术,由于红外线为不可见光,对环境影响很小,红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。红外遥控的编码方式目前广泛使用的是: PWM(脉冲宽度调制)的

    2024年02月01日
    浏览(8)
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)

    5.39 综合案例2.0 - STM32蓝牙遥控小车2(语音控制)

    点 击 跳 转 点击跳转HaaS506官方最新案例 用语音识别当stm32智能车的遥控器,还能这样玩 用STM32单片机做了一辆蓝牙控制的麦轮小车,分享一下小车的原理和制作过程。 控制部分分为手机APP,语音模块控制,Haas506开发板三种。 本文介绍语音模块控制的方法以及小车的制作。

    2024年02月16日
    浏览(20)
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车4(体感控制)

    5.39 综合案例2.0 - STM32蓝牙遥控小车4(体感控制)

    点 击 跳 转 点击跳转HaaS506官方最新案例 用STM32单片机做了一辆蓝牙控制的麦轮小车,分享一下小车的原理和制作过程。 控制部分分为手机APP,语音模块控制,Haas506开发板(遥感 + 体感)三种。 本文介绍Haas506(体感)控制的方法以及小车的制作。 器件说明 器件 数量 说明 STM32F

    2023年04月11日
    浏览(10)
  • 智能小车红外测速模块的使用方法(基于STM32的标准库)

    智能小车红外测速模块的使用方法(基于STM32的标准库)

    基于STM32标准库编程实现智能小车的红外测速所需掌握的知识: (1)外部中断的配置 (2)定时器的配置 (3)串口的配置 红外测速的核心思路 : (1)红外测速模通电后,会发出红外线,利用测速盘对红外线进行遮光,使测速模块连接STM32的中断引脚触发中断。每次发生中

    2024年02月04日
    浏览(12)
  • 基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

    基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

            前言: 本文主要是为了 日常普通场合 下测距做的 对比实验 ,本实验主要包含 2种模块 : 超声波测距模块 (HC-SR04)和 红外测距模块 (SHARP GP2Y0A21YK0F)。两种模块不管是测距原理和编程实验方式都是不相同的,其测距效果也存在很大差异。感兴趣的读者朋友,

    2023年04月27日
    浏览(20)
  • STM32作品设计:蓝牙彩灯V1.4(WS2812全彩、声控、光控、人体红外、小科语音控制、手机APP、蓝牙无线升级)

    STM32作品设计:蓝牙彩灯V1.4(WS2812全彩、声控、光控、人体红外、小科语音控制、手机APP、蓝牙无线升级)

    @ biliblil视频链接:https://www.bilibili.com/video/BV14L411V78b/ 资料可联系作者:2809786963 实物链接:https://m.tb.cn/h.5hxssok?tk=vEQCWYHTKs0 CZ0001 1、手机APP控制亮度、颜色 2、多种显示模式:闪烁、渐变、呼吸、流水 3、拾音灯模式(随音起舞) 4、手机设置:光控模式、声控模式、声光控模式

    2024年02月11日
    浏览(20)
  • STM32控制JQ8400语音播报模块

    STM32控制JQ8400语音播报模块

    时间记录:2024/2/7 标示 说明 ONE LINE 一线操作引脚 BUSY 忙信号引脚,正在播放语音时输出高电平 RX 串口两线操作接收引脚 TX 串口两线操作发送引脚 GND 电源地引脚 DC-5V 电源引脚,3.3-5V DAC-R DAC输出右声道引脚 DAC-L DAC输出左声道引脚 SPK- 喇叭-引脚 SPK+ 喇叭+引脚 (1)时序图 (

    2024年04月11日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包