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 设备的行为。

ESP32S3 BLE_HID的编程实现的更多相关文章

  1. ESP32-S3 搭建 micropython 开发环境,固件编译,烧录

    简述 上手了一块乐鑫科技官方推出的ESP32-S3-DevKitC-1开发板,发现 ESP32-S3 的综合性能较比前两代有着非常明显的提升,wifi与蓝牙功能,更充足的外设扩展能力,可以看出其在未来 ...

  2. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  3. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  4. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  5. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  6. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  7. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  8. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  9. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  10. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

随机推荐

  1. q-analog 学习笔记(待整修)

    联考题考这个不会就来学了 首先给出对其的定义. 对于一个对象 \(u\),构造关于 \(q\) 的某表达式 \(f(q)\),使得: \[\lim_{q\to 1}f(q)=u \] 然而这个可能没有 ...

  2. Luogu P8112 [Cnoi2021] 符文破译 题解 [ 蓝 ] [ KMP ] [ 线性 dp ] [ 决策单调性 dp ]

    符文破译:KMP + dp 的好题. 暴力 dp 不难打出一个暴力 dp:设计 \(dp_i\) 表示当前前 \(i\) 位全部完成了匹配,所需的最小分割数. 转移也是简单的,我们在 KMP 的过程中 ...

  3. 如何配置 maven 编译插件的 JDK 版本

    普通maven项目配置编译器版本 参考maven官方文档 Setting the -source and -target of the Java Compiler maven有2种方法设置编译JDK版 ...

  4. QT5笔记: 26. 多窗体应用程序设计

  5. CentOS7脚本检测SpringBoot项目JAR包变化后自动重启

    #!/bin/bash # 文件目录 fileDir=/usr/local/project/back logDir=/usr/local/project/logs # 设置需要检测的文件路径 file ...

  6. .NET周刊【2月第4期 2025-02-23】

    国内文章 [翻译] 为什么 Tracebit 用 C# 开发 https://www.cnblogs.com/liuliu-66/p/-/why-tracebit-is-written-in-c-sh ...

  7. 多机器的键鼠互通——Synergy/Deskflow配置记录

    Synergy (1.14.6) 情况一样,那么感觉就是机器之间TCP连接有问题,测试不同 一些测试命令 ss -tlnp | grep 24800 # 查看端口情况 sudo lsof -i :24 ...

  8. go cobra Error: required flag(s) "pkg-name" not set

    Cobra 是一个 Golang 包,它提供了简单的接口来创建命令行程序.同时,Cobra 也是一个应用程序,用来生成应用框架,从而开发以 Cobra 为基础的应用. 使用 cobra init 命令 ...

  9. IvorySQL 4.0 之兼容 Oracle 包功能设计思路解读

    日前,IvorySQL 4.0 发布,该版本新增了兼容 Oracle 包功能的新特性. 为了大家能够更好地理解和使用 IvorySQL 4.0,本文将简要介绍实现此功能时的设计思路. Oracle 的 ...

  10. 如何在linux中查看cpu信息、机器硬件型号

    # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz (看到有8 ...