news 2026/4/21 10:27:24

用ESP8266和IRremoteESP8266库,把旧空调改造成智能空调(附完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用ESP8266和IRremoteESP8266库,把旧空调改造成智能空调(附完整代码)

用ESP8266和IRremoteESP8266库打造智能空调控制器

家里的老空调还在兢兢业业工作,但每次都要找遥控器实在麻烦?通过ESP8266开发板和IRremoteESP8266库,我们可以轻松将传统空调升级为支持手机远程控制的智能设备。这个项目不仅成本低廉,还能让你体验到DIY智能家居的乐趣。

1. 项目准备与硬件连接

在开始之前,我们需要准备以下材料:

  • ESP8266开发板(如NodeMCU或Wemos D1 mini)
  • 红外发射二极管(建议使用940nm波长)
  • 面包板和杜邦线
  • 手机(用于红外信号采集)
  • 220Ω电阻(保护红外发射管)

硬件连接非常简单:

  1. 将红外发射管的正极(较长引脚)通过220Ω电阻连接到ESP8266的GPIO4引脚
  2. 将红外发射管的负极连接到ESP8266的GND引脚
  3. 通过Micro USB线为ESP8266供电

提示:如果找不到原装遥控器,可以使用手机上的万能遥控App作为替代方案来采集红外信号。

2. 开发环境搭建与库安装

我们需要配置Arduino IDE来支持ESP8266开发:

  1. 打开Arduino IDE,进入"文件"→"首选项"
  2. 在"附加开发板管理器网址"中添加:http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. 打开"工具"→"开发板"→"开发板管理器",搜索并安装"esp8266"
  4. 安装IRremoteESP8266库:打开"工具"→"管理库",搜索"IRremoteESP8266"并安装

验证安装是否成功:

#include <IRremoteESP8266.h> #include <IRsend.h> void setup() { Serial.begin(115200); Serial.println("IR库安装成功!"); } void loop() {}

上传这段代码后,打开串口监视器(波特率115200),如果看到"IR库安装成功!"的提示,说明环境配置正确。

3. 红外信号采集与解码

采集空调遥控器的红外信号是整个项目的关键步骤。我们使用IRrecvDumpV2示例程序来完成这项工作:

  1. 打开Arduino IDE,选择"文件"→"示例"→"IRremoteESP8266"→"IRrecvDumpV2"
  2. 将程序上传到ESP8266
  3. 打开串口监视器(波特率115200)
  4. 用遥控器对准红外接收头按下按键

你会看到类似这样的输出:

Protocol : COOLIX Code : 0xB29F40 (24 Bits) Power: On, Mode: 0 (Cool), Fan: 4 (Min), Temp: 24C

记录下Protocol和Code信息,这些将用于后续的控制程序。对于每个常用功能(开/关、温度调节、模式切换等),都需要单独采集并记录对应的红外编码。

4. 实现基础红外控制功能

有了红外编码后,我们可以编写控制程序了。以下是三种常用的控制方法:

4.1 原始信号发送法

这种方法直接发送采集到的原始红外信号:

#include <IRremoteESP8266.h> #include <IRsend.h> const uint16_t kIrLed = 4; IRsend irsend(kIrLed); uint16_t rawData[199] = {4418, 4488, 510, 1656, 534, 542, 536, 1632, 510, 1656, 510, 566, 510, 568, 510, 1658, 508, 568, 514, 564, 534, 1632, 512, 566, 510, 568, 518, 1674, 494, 1672, 486, 566, 512, 1656, 512, 1656, 512, 564, 516, 560, 518, 1650, 510, 1658, 534, 1632, 510, 1656, 510, 1656, 512, 566, 510, 1656, 512, 1654, 512, 566, 514, 564, 512, 566, 510, 566, 512, 566, 510, 566, 512, 1654, 514, 566, 534, 542, 512, 566, 510, 568, 512, 566, 512, 564, 512, 1656, 512, 566, 510, 1658, 510, 1658, 510, 1658, 508, 1656, 512, 1656, 510, 1656, 510, 5284, 4444, 4460, 512, 1656, 510, 566, 536, 1632, 512, 1656, 512, 566, 512, 566, 512, 1656, 514, 562, 512, 566, 512, 1656, 512, 566, 512, 566, 512, 1656, 510, 1658, 510, 566, 510, 1658, 510, 1656, 510, 566, 512, 566, 510, 1658, 510, 1656, 510, 1658, 510, 1656, 510, 1656, 512, 566, 512, 1656, 510, 1656, 510, 566, 512, 566, 512, 566, 510, 566, 512, 566, 516, 560, 512, 1656, 512, 566, 510, 566, 512, 566, 512, 566, 512, 566, 512, 566, 512, 1656, 512, 566, 510, 1656, 510, 1656, 512, 1658, 510, 1656, 510, 1656, 510, 1658, 510}; void setup() { irsend.begin(); } void loop() { irsend.sendRaw(rawData, 199, 38); // 发送原始红外信号 delay(5000); // 每5秒发送一次 }

4.2 协议控制法

如果空调使用标准协议(如COOLIX),可以使用更简洁的控制方式:

#include <IRremoteESP8266.h> #include <ir_Coolix.h> const uint16_t kIrLed = 4; IRCoolixAC ac(kIrLed); void setup() { ac.begin(); ac.on(); ac.setMode(kCoolixCool); ac.setFan(4); ac.setTemp(24); } void loop() { ac.send(); delay(5000); }

4.3 编码直接发送法

对于已知协议和编码的情况,可以直接发送编码:

#include <IRremoteESP8266.h> #include <IRsend.h> const uint16_t kIrLed = 4; IRsend irsend(kIrLed); void setup() { irsend.begin(); } void loop() { irsend.sendCOOLIX(0xB29F40); // 发送COOLIX协议编码 delay(5000); }

5. 进阶功能实现

5.1 通过WiFi远程控制

让ESP8266接入家庭WiFi网络,实现手机远程控制:

#include <ESP8266WiFi.h> #include <IRremoteESP8266.h> #include <IRsend.h> const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; const uint16_t kIrLed = 4; IRsend irsend(kIrLed); WiFiServer server(80); void setup() { Serial.begin(115200); irsend.begin(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } server.begin(); Serial.println("WiFi连接成功"); Serial.println(WiFi.localIP()); } void loop() { WiFiClient client = server.available(); if (client) { String request = client.readStringUntil('\r'); if (request.indexOf("/power") != -1) { irsend.sendCOOLIX(0xB29F40); // 发送开机命令 } else if (request.indexOf("/tempup") != -1) { irsend.sendCOOLIX(0xB29F41); // 温度+ } else if (request.indexOf("/tempdown") != -1) { irsend.sendCOOLIX(0xB29F42); // 温度- } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("控制命令已执行"); delay(1); client.stop(); } }

5.2 集成到Home Assistant

通过MQTT协议将控制器接入Home Assistant:

  1. 在Home Assistant中安装MQTT集成
  2. 修改ESP8266代码添加MQTT支持:
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <IRremoteESP8266.h> #include <IRsend.h> const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; const char* mqtt_server = "homeassistant.local"; const uint16_t kIrLed = 4; WiFiClient espClient; PubSubClient client(espClient); IRsend irsend(kIrLed); void callback(char* topic, byte* payload, unsigned int length) { String message; for (int i = 0; i < length; i++) { message += (char)payload[i]; } if (String(topic) == "home/ac/power") { irsend.sendCOOLIX(0xB29F40); } else if (String(topic) == "home/ac/temp") { int temp = message.toInt(); // 根据温度值发送对应的红外编码 } } void reconnect() { while (!client.connected()) { if (client.connect("ESP8266ACController")) { client.subscribe("home/ac/#"); } else { delay(5000); } } } void setup() { irsend.begin(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }

5.3 添加温度传感器实现自动控制

结合DHT22温度传感器,实现自动温控:

#include <DHT.h> #include <IRremoteESP8266.h> #include <IRsend.h> #define DHTPIN 5 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const uint16_t kIrLed = 4; IRsend irsend(kIrLed); void setup() { dht.begin(); irsend.begin(); } void loop() { float temp = dht.readTemperature(); if (temp > 26) { irsend.sendCOOLIX(0xB29F40); // 开启空调 } else if (temp < 22) { irsend.sendCOOLIX(0xB29F41); // 关闭空调 } delay(60000); // 每分钟检查一次温度 }

6. 项目优化与故障排除

6.1 提高红外信号发射强度

  • 使用多个红外发射管并联增加发射功率
  • 确保发射管正对空调红外接收窗口
  • 避免阳光直射等强光源干扰

6.2 常见问题解决

问题现象可能原因解决方案
空调无反应红外发射管接反检查发射管极性
控制不稳定电源不足使用独立5V电源供电
无法连接WiFi信号弱检查路由器距离或增加中继
编码识别错误遥控器协议不匹配尝试其他解码方式

6.3 电源管理优化

对于长期运行的设备,建议:

  • 使用5V/2A的电源适配器
  • 考虑添加电容稳压电路
  • 如需电池供电,选择18650电池+升压模块

7. 扩展应用场景

这个红外控制方案不仅适用于空调,还可以用于:

  • 电视、机顶盒等影音设备
  • 电风扇、空气净化器等家电
  • 投影仪、电动幕布等办公设备
  • 自定义红外遥控场景(如"影院模式"一键关闭灯光、拉上窗帘等)

通过简单的代码修改,你可以创建一个万能红外控制器,整合家中所有红外设备的控制功能。我在实际项目中发现,将ESP8266安装在空调附近的天花板上,配合广角红外发射管,可以获得最佳的控制效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 10:24:32

魔兽争霸III焕然一新:用WarcraftHelper插件解决8大经典痛点

魔兽争霸III焕然一新&#xff1a;用WarcraftHelper插件解决8大经典痛点 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在老电脑上卡…

作者头像 李华
网站建设 2026/4/21 10:24:06

WeChatExporter:你的微信记忆守护者,一键解锁被封存的聊天时光

WeChatExporter&#xff1a;你的微信记忆守护者&#xff0c;一键解锁被封存的聊天时光 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还记得那些深夜的长谈吗&#xff1…

作者头像 李华
网站建设 2026/4/21 10:23:39

CI/CD—可持续发布relaeas,apk——无相无界(2)—东方仙盟

自动构建CI/CD yml脚本Continuous Integration / Continuous Deployment 发布到releasename: Build & Upload to Releaseon:push:branches: [ main ]workflow_dispatch:jobs:build:runs-on: ubuntu-latestpermissions:contents: writesteps:- uses: actions/checkoutv4- n…

作者头像 李华
网站建设 2026/4/21 10:20:07

力扣(python3自用)2026.4.20

最近没有刷力扣&#xff0c;罪过&#xff0c;主要是跑实验太累了&#xff0c;今天做了一道题437.路径总和iii给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始&#…

作者头像 李华