RemoteMapper-ESP32 · 小米蓝牙语音遥控器 USB 复合硬件桥接固件

🎯 基于 ESP32-S3 N16R8 (16MB Flash + 8MB Octal PSRAM) 硬件方案
彻底解决 Windows 内核键盘驱动丢弃按键、物理键盘冲突、虚拟声卡 (VB-Cable) 依赖等问题!


🌟 核心特性与优势

  1. 🎙️ 真·免驱动 USB 物理麦克风 (UAC 1.0):
    • ESP32-S3 原生 USB OTG 模拟标准 16kHz 16-bit Mono 麦克风设备;
    • 遥控器语音键按下即说话,松开即停止,即插即用,无需安装任何第三方声卡驱动。
  2. ⌨️ 独立硬件级 USB HID 键盘 & 多媒体控制器:
    • 小米遥控器音量加(0x80)、音量减(0x81)直接转换为 PC 标准 Consumer Volume Up/Down;
    • 返回键(0xF1)转换为 Consumer AC Back / Esc(网页与播放器原生后退);
    • 电源键(Alt+Tab / 长按关屏)、主页键(Win+D)、菜单键(Space 播放暂停)、TV 键(F8 语音唤醒);
    • 与物理主键盘物理隔离,彻底规避软件钩子冲突。
  3. ⚡ 双核高吞吐实时 DSP 流水线:
    • Core 0:专门负责 NimBLE 5.0 协议栈、HOGP 按键监听、ATVV 语音流握手与 IMA-ADPCM 4-bit 解码 + Declip 尖峰消除 + 3-Tap FIR 低通平滑 + 动态 AGC;
    • Core 1:负责 TinyUSB 复合设备(UAC 麦克风音频泵、HID 键盘派发、按键手势状态机与 CDC 诊断串口)。
  4. 🛡️ 健壮的保活与看门狗机制:
    • 450ms 音频静音看门狗:防止由于蓝牙丢包导致的语音键状态卡住;
    • 自动重连与绑定恢复:NVS 存储配对信息,开机与遥控器唤醒时秒连。
  5. 🛠️ 完美规避 DWC2 Isochronous USB 缺陷:
    • 突破 TinyUSB 在 Arduino 预编译栈下缺乏 SOF 中断导致的 500Hz 丢帧降频魔咒;
    • 采用独创的 bInterval=2 / wMaxPacketSize=64 降频缓冲方案,实现 1000Hz 零抖动 16kHz 完美音质。

📁 目录结构

D:\tool\RemoteMapper-ESP32/
├── default_16MB.csv           # 16MB Flash 分区表
├── platformio.ini             # PlatformIO 编译与环境配置
├── build.bat                  # 一键编译脚本
├── flash.bat                  # 一键烧录脚本
├── monitor.bat                # 串口监控日志脚本
├── test.bat                   # 单元测试运行脚本
├── include/
│   ├── app_config.h           # 全局引脚、采样率、缓冲区容量宏定义
│   └── version.h              # 固件版本号
├── src/
│   ├── main.cpp               # FreeRTOS 双核主入口与任务调度
│   ├── audio/                 # ADPCM 解码、Declip、FIR 平滑、AGC 与环形缓冲区
│   ├── ble/                   # NimBLE Central、HOGP 监听与 ATVV 协议客户端
│   ├── usb/                   # TinyUSB UAC 麦克风与 HID 键盘/多媒体控制器
│   ├── keymap/                # 按键手势状态机与键码映射引擎
│   └── cli/                   # Serial CDC 诊断与 JSON 状态接口
└── test/
    └── native/                # 算法与状态机原生验证单元测试

🚀 编译与烧录

1. 运行单元测试

test.bat

2. 编译固件

build.bat

3. 烧录到 ESP32-S3

将 ESP32-S3 开发板通过 USB 数据线连接到电脑(注意插在 USB/OTG 接口):

flash.bat

4. 查看实时串口日志

monitor.bat

🐛 历史 Bug 与稳定性修复记录

如果你对底层原理感兴趣,欢迎阅读:

S
Description
适用于小米蓝牙遥控器2Pro的ESP32桥接器实现 完美解决Window下三键失效问题.
Readme
17 MiB
0 Stars 1 Watchers 0 Forks
Languages
C 58%
C++ 30.2%
Python 6%
PowerShell 4.1%
Batchfile 1.7%