基于VSCode+PlatformIO环境的ESP8266的HX1838红外模块

以下是针对ESP8266开发板的红外遥控解码系统开发教程,基于VSCode+PlatformIO环境编写


一、概述

本实验通过ESP8266开发板实现:

  1. 红外遥控信号解码
  2. 自定义按键功能映射
  3. 串口监控输出
  4. 基础设备控制(LED)

硬件组成

  • NodeMCU ESP8266开发板
  • HX1838红外接收模块
  • 5mm LED灯
  • 杜邦线若干

开发环境

  • VSCode + PlatformIO
  • Arduino框架
  • IRremote库v4.0+

二、环境搭建

1. PlatformIO配置

创建platformio.ini配置文件:

cpp 复制代码
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps =
    Arduino-IRremote/IRremote@^4.0.0
monitor_speed = 115200

2. 库安装流程

  1. 在VSCode中按Ctrl+Shift+P打开命令面板
  2. 输入PlatformIO: Install Library
  3. 搜索安装IRremote by Armin Joachimsmeyer

三、硬件连接

接线示意图

红外接收器\] \[ESP8266

OUT ----------- P4
VCC ----------- 3V3
GND ----------- GND

LED灯\] \[ESP8266

长脚 ----------- P2
短脚 ----------- GND

四、代码实现

完整代码( src/main.cpp

cpp 复制代码
#include <Arduino.h>
#include <IRremote.hpp>

#define IR_RECV_PIN D4 // GPIO2
#define LED_PIN D1     // GPIO5

// 协议解码函数声明
const char* getProtocolString(decode_type_t protocol);
const char* getKeyName(uint32_t code);
void handleIRCommand();

// 自定义键码映射表
struct IrKeyMapping {
    uint32_t code;
    const char* name;
};

const IrKeyMapping keyMap[] = {
    {0xFFA25D, "POWER"},   // 电源键
    {0xFF629D, "VOL+"},    
    {0xFFE21D, "FUNC/STOP"},
    {0xFF22DD, "FAST BACK"},
    {0xFF02FD, "PAUSE"},
    {0xFFC23D, "FAST FORWARD"},
    {0xFFE01F, "DOWN"},
    {0xFFA857, "VOL-"},    
    {0xFF906F, "UP"},      
    {0xFF6897, "0"},
    {0xFF9867, "EQ"},      
    {0xFFB04F, "ST/REPT"},
    {0xFF30CF, "1"},
    {0xFF18E7, "2"},
    {0xFF7A85, "3"},
    {0xFF10EF, "4"},
    {0xFF38C7, "5"},
    {0xFF5AA5, "6"},
    {0xFF42BD, "7"},
    {0xFF4AB5, "8"},
    {0xFF52AD, "9"},
    {0xFFFFFFFF, "REPEAT"}
};

void setup() {
    Serial.begin(115200);
    IrReceiver.begin(IR_RECV_PIN);
    pinMode(LED_PIN, OUTPUT);
    Serial.println("\n红外遥控系统已启动");
}

void loop() {
    if (IrReceiver.decode()) {
        // 原始数据打印
        Serial.printf(
            "[%02X] 协议:%-6s 键值:0x%08lX -> %s\n",
            IrReceiver.decodedIRData.protocol,
            getProtocolString(IrReceiver.decodedIRData.protocol),
            IrReceiver.decodedIRData.decodedRawData,
            getKeyName(IrReceiver.decodedIRData.decodedRawData)
        );
        
        handleIRCommand();
        IrReceiver.resume();
    }
    delay(50);
}

// 协议类型转文字
const char* getProtocolString(decode_type_t protocol) {
    switch(protocol) {
        case NEC: return "NEC";
        case SONY: return "SONY";
        case RC5: return "RC5";
        case RC6: return "RC6";
        case DISH: return "DISH";
        case SHARP: return "SHARP";
        case JVC: return "JVC";
        case SAMSUNG: return "SAMSUNG";
        default: return "UNKNOWN";
    }
}

// 键码转名称
const char* getKeyName(uint32_t code) {
    for (auto &key : keyMap) {
        if (code == key.code) {
            return key.name;
        }
    }
    return "UNKNOWN";
}

// 执行控制命令
void handleIRCommand() {
    switch(IrReceiver.decodedIRData.decodedRawData) {
        case 0xFFA25D: // POWER键控制LED
            digitalWrite(LED_PIN, !digitalRead(LED_PIN));
            Serial.println("LED状态已切换");
            break;
            
        case 0xFF6897: // 数字0
            Serial.println("执行系统复位");
            ESP.restart();
            break;
    }
}

五、代码解析

1. 核心功能模块

  • 协议解码 :IrReceiver.begin()初始化红外接收
  • 数据解析 :IrReceiver.decode()获取解码数据
  • 协议处理 :通过decodedIRData结构体访问详细信息
  • 命令映射:自定义键码映射表实现灵活控制

2. 关键数据结构

cpp 复制代码
struct IrKeyMapping {
    uint32_t code;     // 原始键值(十六进制)
    const char* name;   // 自定义按键名称
};

六、使用示例

1. 编译上传

  1. 在VSCode中点击底部状态栏的✅图标编译项目
  2. 点击→图标下载到开发板

2. 串口监控

  1. 点击底部电源插头图标打开串口监视器,这里我用的vof

    1. 按下遥控器按键观察输出:

    3. 实际效果

    • 短按按键:显示按键信息
    • 长按按键:显示0xFFFFFFFF,重复码

    七、常见问题排查

    |----------------|-------------------------|
    | 现象 | 解决方案 |
    | 无任何输出 | 检查P4引脚连接,确认红外接收器VCC接5V |
    | 键值显示0xFFFFFFFF | 此为重复码,正常现象 |
    | 部分按键无法识别 | 修改keyMap数组中的对应键值 |
    | 接收距离短 | 确保接收器前无遮挡,更换遥控电池 |
    | 编译报错 | 清理编译缓存:pio run -t clean |

    八、学习资源

    1. IRremote库官方文档
    2. ESP8266引脚图
    3. PlatformIO使用指南

    通过本项目的实践,可以掌握:

    • PlatformIO项目管理技巧
    • 红外通信协议解析方法
    • ESP8266 GPIO控制
    • 嵌入式系统调试技能
    • 物联网设备开发基础

    建议同学们尝试扩展以下功能:

    1. 添加OLED屏幕显示按键信息
    2. 结合MQTT实现远程控制
    3. 开发WEB配置界面
    4. 实现红外信号学习功能
相关推荐
m0_疾风4 小时前
VSCODE
ide·vscode·编辑器
小妖6666 小时前
怎么开机自动启动vscode项目
ide·vscode·编辑器
爱串门的小马驹11 小时前
VScode编译调试debug,gpu的cuda程序,Nsight
vscode·gpu·cuda
qq. 280403398411 小时前
vim 的基本使用
linux·编辑器·vim
爱吃巧克力的程序媛11 小时前
Vim 中设置插入模式下输入中文
linux·编辑器·vim
今天又在摸鱼12 小时前
vscode实用配置
ide·vscode·编辑器
深色風信子16 小时前
Eclipse 插件开发 5.2 编辑器 获取当前编辑器
java·eclipse·编辑器·eclipse 编辑器获取·eclipse 插件
hbwhmama18 小时前
WIN11使用vscode搭建c语言开发环境
ide·vscode·编辑器
砖头拍死你18 小时前
搭建基于VsCode的ESP32的开发环境教程
ide·vscode·编辑器
隐-梵18 小时前
Android studio进阶开发(七)---做一个完整的登录系统(前后端连接)
android·数据库·ide·spring·okhttp·android studio