硬汉嵌入式论坛

 找回密码
 立即注册
搜索
查看: 90|回复: 1
收起左侧

[有问必答] 悬赏:diy红外开机

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 9 小时前 | 显示全部楼层 |阅读模式
本帖最后由 useesp 于 2026-11-2 12:59 编辑

硬件:我家的海尔空调,
整机型号:KFR-35GW/07ZJL23A-DS
内机型号:KFR-35G/ZJL23A-DS

单片机: esp32 s3
电子元件: 红外接收模块,红外发射模块。


arduino代码实现:红外发射模块抓取我家的海尔空调遥控器开机信号后,用红外发模块(市面上有的,或者您搭建一个电路:使用电阻和红外发射管,三极管),
实现空调开机。

不接收的解决方式:用代码调用红外发射学习模块来实现开机。

我购买了红外学习模块,IR05T可以用代码实现,但是IR05T抓取的红外信号,导出后不能在其他的红外发射管来使用,只能用IR05T上面的发射管。
我的尝试:使用红外接收管可以抓取到信号,但是买了4次红外发射管一次都不能正常使用。

我希望:
1. 硬件:
搭建一个简单的红外发射模块(使用电阻和红外发射管,三极管一个),或者专门的红外发射模块(不可以是红外发射学习一体的那种模块),测试成功可用后,邮寄给我。
2. arduino代码
可以在esp32 s3上顺利运行。

悬赏:100元。

我从淘宝购买红外接收模块后,使用的代码(可以抓到开机的信号).
[C] 纯文本查看 复制代码
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// infrared receiver pin
#define IR_RX_PIN 17

// Receive buffer size
const uint16_t kCaptureBufferSize = 1024;

// Timeout duration
const uint8_t kTimeout = 50;

// IR receiver object
IRrecv irrecv(
    IR_RX_PIN,
    kCaptureBufferSize,
    kTimeout,
    true
);

decode_results results;

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println();
  Serial.println("================================");
  Serial.println(" Haier AC IR Capture");
  Serial.println(" ESP32-S3 + Infrared Module");
  Serial.println(" GPIO17");
  Serial.println("================================");

  irrecv.enableIRIn();

  Serial.println("IR receiver ready.");
  Serial.println("Point the original remote at the receiver on Infrared Module.");
  Serial.println("Press the POWER ON button.");
}

void loop() {

  if (irrecv.decode(&results)) {

    Serial.println();
    Serial.println("========== IR CAPTURE ==========");

    // Protocol name
    Serial.print("Protocol: ");
    Serial.println(typeToString(results.decode_type));

    // Number of bits
    Serial.print("Bits: ");
    Serial.println(results.bits);

    // Decoded value
    Serial.print("Value: ");
    Serial.println(uint64ToString(results.value, HEX));

    // Check for buffer overflow
    Serial.print("Overflow: ");
    Serial.println(results.overflow ? "YES" : "NO");

    // Complete decoded information
    Serial.println();
    Serial.println("========== DECODED RESULT ==========");

    Serial.println(resultToHumanReadableBasic(&results));

    // Print the complete state if the protocol supports AC state decoding
    if (hasACState(results.decode_type)) {
      Serial.println();
      Serial.println("========== AC STATE ==========");
      Serial.println(resultToSourceCode(&results));
    }

    // Raw infrared signal waveform
    Serial.println();
    Serial.println("========== RAW DATA ==========");

    Serial.println(resultToTimingInfo(&results));

    Serial.println("========== CAPTURE END ==========");

    // Resume infrared reception
    irrecv.resume();
  }
}


根据抓码的结果写下面的红外开机代码

[C] 纯文本查看 复制代码
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>

const uint16_t kIrLed = 18;   //  

IRsend irsend(kIrLed);

uint16_t rawData[229] = {
  3056, 3004,  2972, 4546,  520, 1698,  520, 580,  520, 1698,  520, 590,  518, 582,  518, 1700,
  520, 1700,  520, 588,  520, 1700,  520, 580,  520, 1700,  520, 588,  520, 580,  520, 580,
  520, 1698,  520, 588,  520, 580,  518, 582,  518, 580,  518, 590,  520, 580,  518, 580,
  518, 580,  520, 588,  520, 580,  518, 582,  518, 580,  518, 590,  518, 582,  518, 580,
  520, 580,  518, 590,  518, 580,  518, 1700,  518, 580,  518, 590,  518, 580,  518, 582,
  518, 582,  518, 590,  518, 580,  518, 582,  518, 1700,  518, 590,  518, 582,  518, 582,
  518, 580,  518, 592,  518, 582,  518, 582,  518, 582,  518, 590,  518, 582,  518, 582,
  518, 582,  518, 590,  518, 582,  518, 582,  518, 1702,  518, 590,  518, 582,  518, 582,
  518, 582,  518, 590,  518, 582,  518, 582,  518, 582,  518, 590,  518, 582,  518, 582,
  518, 582,  516, 590,  518, 582,  518, 582,  518, 582,  518, 590,  518, 582,  518, 582,
  518, 582,  518, 590,  518, 582,  518, 582,  518, 582,  518, 590,  518, 582,  516, 584,
  516, 582,  518, 590,  518, 582,  518, 582,  518, 582,  518, 592,  516, 582,  518, 582,
  518, 582,  516, 592,  516, 582,  518, 584,  516, 582,  518, 590,  518, 582,  518, 1700,
  518, 582,  516, 1710,  518, 1700,  518, 1702,  518, 582,  516, 592,  518, 1702,  516, 1702,
  518, 582,  516, 1712,  516
};

void setup() {
  Serial.begin(115200);
  delay(1000);

  irsend.begin();

  Serial.println("Sending Power ON (strong version)...");

  for (int i = 0; i < 5; i++) {          // 连续发送 5 次
    irsend.sendRaw(rawData, 229, 38);
    delay(80);
  }

  Serial.println("Finished sending 5 times");
}

void loop() {
  // 每 8 秒再发一次,方便你测试
  delay(8000);
  Serial.println("Sending again...");
  for (int i = 0; i < 3; i++) {
    irsend.sendRaw(rawData, 229, 38);
    delay(80);
  }
}

测试不成功。
回复

使用道具 举报

0

主题

49

回帖

49

积分

初级会员

积分
49
发表于 3 小时前 | 显示全部楼层
问 AI,或者直接冲 token
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-11-2 22:43 , Processed in 0.206420 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表