{"repo":"zhantss/ESP32-BLE5-NSController-Emulator","free":true,"listed":false,"github":"https://github.com/zhantss/ESP32-BLE5-NSController-Emulator","clone":"git clone https://github.com/zhantss/ESP32-BLE5-NSController-Emulator.git","description":"By analyzing public BLE communication data between an official controller and NS2 console, this project implements a compatible protocol stack that allows ESP32 to emulate controller behavior.","language":"C","stars":13,"topics":["automation","esp-idf-framework","esp32","game-controller","nintendo-switch-2"],"license":"MIT","category":"workflow-automation","readme_excerpt":"ESP32-BLE5-NSController-Emulator 中文 / English 项目概述 本项目是一个在 ESP32 系列设备 上模拟 Nintendo Switch Pro2 手柄 ，并连接 Nintendo Switch2 (NS2) 的开源项目。通过分析官方控制器与NS2主机之间的公开BLE通信数据，本项目实现了一个兼容的协议栈，使ESP32能够模拟控制器行为。所有协议实现均基于对合法获得的消费级硬件上BLE通信流量的独立观察与记录。未使用任何专有SDK、泄露文件或加密密钥。 项目采用 模块化设计 ，支持自定义传输层（Transport Layer）和协议层（Protocol Layer），便于连接不同的上位机（如 PC、手机、游戏主机等）来控制 ESP32 单片机。传输层负责字节流的收发，协议层负责解析和封装应用层数据，二者解耦使得项目可以灵活适配各种输入源和通信方式。 功能特性 - 完整模拟 Nintendo Switch Pro2 手柄 ：支持所有按钮、摇杆操作 - NS2 BLE 协议栈实现 ：模拟 NS2 手柄通信的可观测行为，包含配对、身份验证以及数据格式处理。 - 模块化架构 ： - 传输层 ：支持 UART、USB Serial/JTAG、BLE HID 等多种物理传输方式 - 协议层 ：支持 自定义二进制协议，当前已兼容部分手柄功能 EasyCon - TODO 可配置的控制器类型 ：通过 NVS 存储配置，支持动态切换不同手柄类型 - 调试友好 ：提供详细的日志输出和远程调试接口 硬件支持 已测试的 ESP32 型号 - ESP32-C61 ✅ 已通过完整测试，连接稳定 - ESP32-C6 ✅ 已通过基本测试，连接稳定 - ESP32-S3 ⚠️ 由乐鑫官方在主分支上提供了补丁文件，已通过基本测试，连接稳定 蓝牙协议栈要求 本项目基于 ESP-IDF 框架开发。理论上，任何使用 Apache NimBLE 开源堆栈的 ESP-IDF 固件都可以支持。但由于 NS2 控制器通讯协议突破了 BLE 最低连接间隔的规范（标准最低为 7.5ms，NS2 要求 5ms），需要对 NimBLE 协议栈进行修改。 快速开始 环境要求 - ESP-IDF 版本 ：必须使用 v5.5.2+ 版本 - 测试环境 ：当前发布的固件使用 v5.5.3 测试通过 - Python 依赖 ：ESP-IDF 标准工具链 获取代码 应用补丁（关键步骤） 由于 NS2 协议要求 5ms 的连接间隔，而标准 BLE 规范最低只允许 7.5ms，因此需要修改 NimBLE 协议栈的底层参数： 1. 备份原始文件 ： 2. 应用补丁 ： 注意：目前patch脚本仅提供 ESP32-C6/C61 支持，其他型号需要自行尝试或等待后续支持 编译和烧录 配置和配对 1. 首次启动后，设备将进入 BLE 广播模式 2. 在 NS2 主机上进入手柄配对模式 3. 会自动完成配对，界面中出现手柄图标，其中按键颜色与默认Pro2有区别(彩蛋) 4. 配对成功后，之后设备启动会自动进入唤醒广播模式，会将休眠中的NS2唤醒并自动重连 开发指南 项目结构 添加新的传输层 1. 在 main/include/transport/ 下创建新的头文件 2. 实现 transport ops t 接口中的所有函数 3. 在 transport.c 中注册新的传输层 4. 通过 Kconfig 配置启用新的传输层 添加新的协议层 1. 在 main/include/proto","default_branch":null,"files":null,"tree":[],"storefront":"/r/zhantss","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/zhantss/ESP32-BLE5-NSController-Emulator/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}