ESP32S3 BLE_HID的编程实现

ESP32S3 BLE_HID的编程实现

BLE是低功耗蓝牙,HID是Human Interface Device,也就是人机接口设备。

主要用于无线连接并传输用户输入数据(如按键、触控、手势等)。


核心概念

  1. BLE(Bluetooth Low Energy)
    • 蓝牙4.0及以上版本引入的技术,专为低功耗设计,适合电池供电设备(如键盘、鼠标)。
    • 传输数据量小、连接速度快,功耗仅为传统蓝牙的1/10~1/100。
  2. HID(Human Interface Device)
    • 源自USB HID标准,定义了键盘、鼠标、游戏手柄等设备的通用通信协议。
    • BLE HID将这一协议无线化,无需物理线缆即可实现设备交互。

与传统蓝牙HID的区别

特性 传统蓝牙HID BLE HID
功耗 较高 极低
连接速度 较慢 快(毫秒级)
兼容性 依赖传统HID协议 基于GATT,更现代
适用设备 需较高数据速率(如音频) 低频输入设备(按键、点击)

协议实现

  • HID Service
    通过GATT(通用属性协议)定义服务,包含以下关键特性:
    • Report Map:描述设备功能(如按键映射)。
    • Input/Output Report:传输实际输入/输出数据。
    • Protocol Mode:切换Boot Protocol(兼容BIOS)或Report Protocol(标准模式)。

代码源自esp-idf例程ble_hidd_demo

执行流程

1 初始化NVS:(Non-Volatile Storage,非易失性存储)是 ESP-IDF 提供的一种存储机制,用于在设备的闪存中保存数据,即使设备断电后数据也不会丢失。nvs 通常用于存储配置信息、蓝牙配对信息等。释放经典蓝牙模式的内存
2 初始化BLE控制器->启用蓝牙控制器,设置为BLE模式->初始化Bluedroid协议栈->启用Bluedroid协议栈->初始化HID(Human Interface Device)配置文件
3 注册回调函数到GAP(Generic Access Profile)模块->注册回调函数到GAP(Generic Access Profile)模块-> 注册回调函数到HID模块->设置BLE安全参数->创建HID任务(用户或自动执行)
4 BLE广播(等待设备连接esp32s3的低功耗蓝牙)->设备连接BLE->触发连接事件 ->开始配对BLE
5 设备成功配对BLE ->设置连接成功标志位 ->进入人机交互任务
6 HID任务循环 ->判断连接状态 -> 发送指令(操作)+数据

配置项目

ble_hidd_demo_main.c:此文件是演示如何使用 HID 的示例(您可以使用它连接到智能手机作为消费者设备,然后使用按钮来增加或减少音量等,或者连接到 Windows 10 PC 作为键盘或鼠标)

hidd_le_prf_int.h:此头文件包含一些与 HID 配置文件相关的定义。

esp_hidd_prf_api.h & esp_hidd_prf_api.c:这些文件包含 HID 配置文件的 API

当您使用 HID 配置文件时,只需添加 esp_hidd_prf_api.h 包含文件,并使用 esp_hidd_prf_api.c 文件中定义的函数发送 HID 数据。

hid_dev.h & hid_dev.c:这些文件定义了 HID 规范相关的定义

hid_device_le_prf.c:此文件是 HID 配置文件的定义文件,它包含 HID 配置文件的主要功能。它主要包含如何创建 HID 服务。如果您发送和接收 HID 数据并将数据转换为键盘键、鼠标和消费者值,则将其转发到应用程序。

整体执行流程

蓝牙初始化:

在主函数中,会初始化蓝牙堆栈并注册 GAP 事件回调函数。

事件处理:

当蓝牙事件发生时,回调函数会根据事件类型执行相应的逻辑。

HID 功能演示:

hid_demo_task 任务会在系统初始化完成后运行,可能会模拟键盘、鼠标或其他 HID 设备的行为。