基于ESP32-H2的蓝牙转红外遥控器:让传统空调秒变智能家居(立创开源项目)

news2026/3/18 4:20:41
基于ESP32-H2的蓝牙转红外遥控器让传统空调秒变智能家居最近在捣鼓智能家居发现家里的老空调、老电视还是得用红外遥控器没法用手机控制总觉得差点意思。网上找了一圈发现用Wi-Fi转红外的方案不少但大多功耗高得一直插着电不够灵活。正好手头有ESP32-H2的开发板它主打低功耗蓝牙BLE功耗比Wi-Fi低得多。我就琢磨着能不能用它做个蓝牙转红外的遥控器用锂电池供电随便往空调附近一贴手机一连就能控制续航还能挺久。说干就干这个开源项目就这么开始了。今天这篇教程我就带你从零开始复现这个“蓝牙转红外遥控器”。无论你是刚接触嵌入式的新手还是想了解ESP32-H2和BLE应用的开发者都能跟着一步步做出来。最终你会得到一个能用手机蓝牙控制、续航持久的万能红外遥控器让你家的传统电器秒变智能。1. 项目核心思路与硬件选型咱们先搞清楚这个项目要干什么以及为什么选这些芯片。1.1 项目要解决什么问题想象一下这个场景你躺在沙发上想开空调但遥控器不知道塞哪了。或者你下班路上想提前打开家里的空调。对于不支持Wi-Fi的老式空调、电视、机顶盒这些需求就很难实现。这个项目的目标就是做一个“翻译官”。它通过低功耗蓝牙BLE和你的手机连接接收手机App发来的控制指令比如“打开空调26度”。然后它内部的ESP32-H2芯片会把这些指令“翻译”成对应的红外遥控信号最后通过红外发射管发射出去控制你的空调。这样一来你的手机就变成了一个万能遥控器。为什么用BLE而不用Wi-Fi这是本项目的一个关键设计。Wi-Fi模块即使待机功耗也比BLE高不少。我们的设备计划用锂电池供电如果功耗太高可能一两天就得充电失去了便携的意义。BLE在保持连接时功耗极低可以让设备待机数周甚至数月这才是我们想要的。1.2 核心器件清单与作用根据开源资料我们需要以下核心芯片和元件。别担心我会解释每个是干嘛用的。器件型号主要功能为什么选它ESP32-H2-MINI-1 模块核心主控负责运行程序、处理BLE通信、生成红外信号。ESP32-H2是乐鑫推出的集成IEEE 802.15.4 (Zigbee) 和 Bluetooth 5.0 (BLE)的芯片功耗低且内置了专用的红外发射硬件外设不用软件模拟更稳定省电。TP4056 芯片锂电池充电管理。这是一款非常经典的单节锂电池线性充电芯片电路简单可靠能给我们的锂电池安全充电。RT6150B-33GQW 芯片电源管理提供升压和降压。锂电池电压是波动的约3.7V-4.2V但我们的主控和外围电路需要稳定的3.3V电压。这个芯片能把电池电压稳定地转换成3.3V输出。IR908-7C 红外发射管发射红外光信号。将电信号转换为不可见的红外光是执行遥控动作的“最终执行器”。这个型号是常用款你也可以根据发射距离和角度需求更换其他型号。提示ESP32-H2-MINI-1是一个模块它已经包含了ESP32-H2芯片、晶振、Flash内存和天线等必要外围电路我们直接用这个模块比单独用芯片焊接要简单稳定得多特别适合初学者。2. 电路设计要点解析虽然我们主要是做软件和固件开发但了解一些关键的电路原理能帮我们更好地调试和解决问题。这里我挑几个重点部分讲讲。2.1 电源电路如何让设备“吃饱喝足”整个设备的供电链条是这样的Type-C接口 - TP4056充电芯片 - 锂电池 - RT6150B升降压芯片 - 3.3V系统电源。充电部分TP4056当你插入Type-C线时5V电压进来TP4056开始工作按照恒流-恒压的方式给锂电池充电。芯片上的LED灯会指示充电状态比如红灯亮表示正在充电绿灯亮表示充满。这部分电路设计时主要就是根据你的电池容量选择合适的充电电流电阻公式在TP4056数据手册里有。供电部分RT6150B设备工作时电能从锂电池出来。锂电池电压不是恒定的满电约4.2V用久了会降到3.7V甚至更低。但ESP32模块和红外发射管都需要稳定的3.3V电压。RT6150B在这里就扮演了“稳压器”的角色无论电池电压是高于还是低于3.3V它都能输出稳定的3.3V给系统供电确保设备稳定工作。2.2 红外发射电路把电信号变成光信号这是执行控制的关键一步。ESP32-H2的专用红外外设RMT会生成一个非常精确的方波信号这个信号的频率通常是38kHz和波形对应了空调遥控器的编码。但是这个信号电流很弱不足以直接驱动红外发射管发出足够强的光光强不够遥控距离就短。所以我们需要一个简单的“驱动电路”通常用一个三极管如8050或MOS管。ESP32的引脚输出信号控制三极管的通断三极管再控制流过红外发射管的电流。这样就能用微弱的控制信号来开关一个较强的电流让红外管亮灭发射出能被空调接收到的信号。// 这是一个简化的概念性代码说明如何配置ESP32-H2的红外发射 #include “driver/rmt_tx.h” // 引入红外(RMT)发射驱动头文件 // 1. 定义红外发射的配置结构体 rmt_tx_channel_config_t tx_chan_config { .gpio_num GPIO_NUM_4, // 假设红外驱动电路接在GPIO4上 .clk_src RMT_CLK_SRC_DEFAULT, // 使用默认时钟源 .resolution_hz 1000000, // 设置计时器分辨率1MHz即1微秒一个计数 .mem_block_symbols 64, // 内存块大小 .trans_queue_depth 4, // 传输队列深度 .flags.invert_out false, // 不反转输出电平 }; // 2. 安装RMT发射通道 rmt_channel_handle_t tx_chan NULL; esp_err_t err rmt_new_tx_channel(tx_chan_config, tx_chan); // 3. 构造红外信号以NEC编码的“引导码”为例9ms高电平4.5ms低电平 rmt_symbol_word_t nec_leader_symbol[] { // 电平持续时间(微秒) 电平值(1高0低) {.duration0 9000, .level0 1, .duration1 4500, .level1 0}, // 引导码 // ... 这里还可以继续添加用户码、数据码等 }; // 4. 发送信号 rmt_transmit_config_t transmit_config { .loop_count 0, // 不循环发送一次 }; err rmt_transmit(tx_chan, nec_leader_symbol, sizeof(nec_leader_symbol), transmit_config);注意实际的红外编码非常复杂不同品牌、不同设备的编码格式NEC、RC5、Sony等和载波频率都可能不同。项目中需要集成一个红外编码库如IRremoteESP8266的适配版来处理各种格式。上面的代码只是展示ESP32-H2如何使用硬件RMT外设来生成精确的波形。3. 固件开发与功能实现硬件搭好了接下来就是给它注入“灵魂”——编写运行在ESP32-H2里的程序固件。我们的固件需要实现两大核心功能BLE通信和红外信号处理。3.1 建立BLE服务让手机能找到并控制设备BLE设备通过“服务Service”和“特征值Characteristic”来暴露自己的功能。我们可以把服务理解为一个功能模块特征值就是这个模块里具体可读或可写的参数。对于我们的遥控器至少需要两个核心服务电池服务Battery Service用来向手机报告电池电量。这是一个标准BLE服务手机上的蓝牙界面能直接识别并显示电量。自定义遥控服务我们创建一个自己的服务里面包含几个特征值比如红外码写入特征手机App通过向这个特征写入数据来发送想要发射的红外编码。设备状态特征设备通过这个特征通知手机当前状态如“发射成功”、“发射失败”。使用ESP-IDF乐鑫官方的开发框架来创建BLE服务非常方便。下面是一个极简的代码框架展示如何创建自定义服务。#include “esp_bt.h” #include “esp_gap_ble_api.h” #include “esp_gatts_api.h” // 定义我们的自定义服务UUID可以自己生成确保唯一即可 #define REMOTE_SERVICE_UUID 0xFEF0 #define IR_CODE_CHAR_UUID 0xFEF1 #define STATUS_CHAR_UUID 0xFEF2 static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) { switch (event) { case ESP_GATTS_REG_EVT: // 服务注册成功开始添加服务和特征 esp_ble_gatts_create_service(gatts_if, remote_service_uuid, 0, 2); break; case ESP_GATTS_CREATE_EVT: // 服务创建成功添加“红外码写入”特征 esp_ble_gatts_add_char(gatts_if, ir_char_uuid, ESP_GATT_PERM_WRITE, // 权限可写 ESP_GATT_CHAR_PROP_BIT_WRITE, // 属性可写 NULL, NULL); break; // ... 处理其他事件如连接、断开、写入请求等 case ESP_GATTS_WRITE_EVT: // 手机App发来了数据 // param-write.value 里就是红外编码数据 // 这里需要调用红外发射函数将数据发出去 ir_transmit(param-write.value, param-write.len); break; } } void app_main(void) { // 初始化NVS存储、蓝牙控制器、蓝牙栈 esp_err_t ret nvs_flash_init(); ret esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT); // 禁用经典蓝牙省内存 esp_bt_controller_init(bt_cfg); esp_bt_controller_enable(ESP_BT_MODE_BLE); esp_bluedroid_init(); esp_bluedroid_enable(); // 注册GATTS回调函数 esp_ble_gatts_register_callback(gatts_profile_event_handler); // 注册应用配置文件Profile esp_ble_gatts_app_register(APP_ID); // ... 其他初始化如红外RMT初始化 }3.2 红外信号学习与发射逻辑一个实用的万能遥控器必须能学习并存储各种设备的红外码。逻辑流程如下学习模式在手机App上点击“学习”设备进入学习状态。此时用原装遥控器对准设备的红外接收头项目若扩展可增加接收管按下按键设备记录下收到的红外原始波形。编码解析与存储设备将原始波形解析成具体的编码格式如NEC和参数地址码、命令码然后通过BLE上传给手机AppApp将其保存到云端或本地并给这个按键起个名字如“空调-开”。控制模式用户点击App上的“空调-开”按钮App通过BLE将之前存储的编码参数发送给设备。设备根据编码格式调用对应的红外发射函数将信号发射出去。注意ESP32-H2的RMT外设同样可以用于高精度的红外信号接收实现学习功能。这需要配置一个RMT接收通道并设置一个滤波器来过滤掉38kHz的载波得到原始的数字波形。3.3 实现Web远程控制与OTA升级开源资料里还提到了两个高级功能这大大提升了项目的实用性。Web远程控制原理是在一台常年开机的电脑或NAS上运行一个常驻的“桥接”服务程序。这个程序一方面通过电脑的蓝牙与我们的遥控器设备保持连接另一方面开启一个Web服务器。当你在公司打开这个Web页面点击按钮时请求会先发给电脑上的服务再由服务通过蓝牙转发给设备最终发射红外信号。这样就实现了跨互联网的远程控制。蓝牙OTA升级OTAOver-The-Air就是无线升级。设备固件有bug或者要加新功能时你不需要再用数据线连接电脑烧录。只需要在手机App里选择新的固件文件通过BLE一点点发送给设备设备在后台接收并写入到Flash的另一个区域然后重启并切换过去。ESP-IDF提供了完善的OTA组件配合BLE文件传输如使用GATT特性即可实现。4. 组装、调试与常见问题当PCB板打样回来元件都焊接好固件也编译完成后就进入最激动人心的调试阶段了。4.1 上电与基础测试焊接检查首先肉眼检查一遍有没有虚焊、连锡、焊反的元件。重点检查Type-C口、芯片、红外发射管这些有方向的器件。供电测试先不插主控模块只给板上电。用万用表测量RT6150B输出的3.3V是否正常。然后插入锂电池测量充电电路是否工作充电时TP4056对应的LED应亮起。固件烧录通过Type-C口连接电脑ESP32-H2模块会进入下载模式。使用乐鑫的Flash Download Tool或esptool.py命令行工具将编译好的固件bin文件烧录进去。4.2 功能调试与排坑蓝牙搜不到检查天线ESP32-H2-MINI-1模块是板载天线的确保天线区域没有被金属外壳完全屏蔽。检查供电用万用表测一下模块的3.3V引脚电压是否稳定且在3.2V-3.6V之间。电压不稳会导致蓝牙模块工作异常。检查固件确认固件里正确初始化了蓝牙并且设备名称广播出来了。可以用手机上的“BLE调试助手”类App扫描一下。红外遥控没反应用手机摄像头看这是最方便的初步检测方法。打开手机相机用遥控器或我们的设备红外发射管对准摄像头按键在手机屏幕里应该能看到发射管发出微弱的白光或紫光因为手机摄像头能感应到部分红外光。如果没亮说明驱动电路或代码没工作。检查驱动电路测量三极管或MOS管的控制脚连接ESP32引脚是否有高低电平变化。测量红外发射管两端是否有电压变化。检查编码和载波不同的设备红外载波频率可能不是标准的38kHz可能是40kHz或其它。需要确认学习到的或代码里设置的频率是否正确。可以用示波器探头接近非直接连接发射管看是否能测到38kHz左右的载波信号。功耗过高续航短检查BLE连接间隔BLE功耗与连接间隔Connection Interval密切相关。间隔越短功耗越高。在手机App或设备固件端可以尝试协商一个更长的连接间隔如100ms以上。检查休眠模式在无连接、无任务时ESP32-H2应进入深度睡眠Deep Sleep模式。检查固件是否配置了正确的唤醒源如BLE广播唤醒并成功进入了睡眠。排查硬件漏电断开ESP32模块测量整个板子在静态下的电流。如果还有几百微安以上的电流说明可能存在硬件漏电重点检查电源芯片及其外围电路。这个项目从想法到实现最有趣的地方在于它用一块小小的低功耗芯片就架起了手机智能世界和传统红外家电之间的桥梁。当你第一次用手机成功打开空调时那种成就感是非常棒的。希望这篇教程能帮你顺利做出自己的设备。硬件焊接细心点软件调试耐心点遇到问题多在开源社区里交流你一定能成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2421706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…