Bluedroid vs NimBLE

🔹 对比:Bluedroid vs NimBLE

1. 协议栈体积 & 内存占用

  • Bluedroid:体积大,RAM 占用也大(几十 KB 到上百 KB)。
  • NimBLE:轻量级,内存占用大概是 Bluedroid 的一半甚至更少。

👉 内存少 ≠ 功耗低,但 NimBLE 的轻量化确实让 CPU 空闲时间更长。


2. 功耗管理能力

  • Bluedroid

    • 功能全面,但设计更早,对低功耗优化一般。
    • Light Sleep 下可能会维持较高的 wakeup 频率,功耗相对偏高。
  • NimBLE

    • 专门为 低功耗 IoT 设备 设计,和 FreeRTOS 的 tickless idle、modem sleep 配合更好。
    • 连接保持时的 平均电流更低

3. 实际应用场景

  • 如果你跑的是 HID 键盘/鼠标

    • Bluedroid 更合适,因为它有完整的 HID profile。
    • 虽然功耗比 NimBLE 高一点,但 HID 设备通常唤醒频率低(按键才触发),所以差别不大。
  • 如果你跑的是 传感器 / 广播型设备(Beacon、心率带、温湿度等)

    • NimBLE 更省电,因为它的连接维护和广播调度更高效。

4. 官方数据(Espressif 提供的典型情况)

  • Bluedroid BLE 连接保持:大概 300~500 µA
  • NimBLE BLE 连接保持:可能降低到 100~300 µA

⚠️ 注意:具体功耗还是取决于 连接参数 (conn interval, latency, timeout)是否开启 modem sleep/light sleep,协议栈只是其中一部分。


✅ 总结

  • Bluedroid:功能全(支持 HID),功耗比 NimBLE 稍高,但在键盘/鼠标这种低流量场景里问题不大。
  • NimBLE:轻量化,功耗更低,但 HID profile 不完整,兼容性差。

👉 如果你要做 BLE 键盘 → 用 Bluedroid(功耗已经足够低,重点是稳定性和兼容性)。
👉 如果你要做 低功耗传感器/广播设备 → 用 NimBLE(省电优势明显)。


理论上是的 ✅——把 HID Profile 写完整,任何协议栈都能让主机识别为键盘/鼠标
但问题在于 NimBLE 下实现完整 HID Profile 比看上去复杂得多,原因如下:


1️⃣ HID Profile 要求严格

一个标准 BLE 键盘/鼠标 HID Profile 至少包含:

组件描述必要性
HID Service (0x1812)根服务,告诉主机这是 HID 设备必须
HID Information设备版本、语言、标志必须
Report Map描述所有 Input/Output Report 格式必须
Input Report按键/鼠标数据必须
Output ReportLED/其他控制必须
Control Point协议切换、复位等推荐
Protocol ModeBoot Mode / Report Mode推荐,兼容旧主机
Battery Service电量指示可选,但 iOS/macOS 喜欢有

一点小错误都可能让 Windows、iOS、macOS 不识别你的设备。


2️⃣ NimBLE 不提供封装

  • NimBLE 只提供 GATT server / client 接口。

  • 你必须手动:

    • 写 Report Map 二进制数据(Boot Mode、Keycodes、Modifier Bits 等)
    • 正确配置 Characteristic 属性(Read / Notify / Write / Encrypted)
    • 实现 Protocol Mode 切换逻辑
    • 处理主机发来的 Output Report(LED 灯)

这部分逻辑在 Bluedroid 里已经封装好了,开发者只需调用 esp_hidd_profile_init()


3️⃣ 兼容性陷阱

即使你“写完 HID Profile”,仍然可能出现问题:

  1. iOS/macOS 安全要求高

    • 必须加密 + Bonding,否则 HID 被拒绝。
  2. Windows 对 Report Map 格式要求严格

    • 比如 Boot Mode 必须正确,否则 CapsLock/NumLock 灯不亮。
  3. 不同主机对 Consumer Report(音量、多媒体键)支持不同

    • 你的 HID Report 不符合某些主机规范,就无法使用。

4️⃣ 总结

  • 理论上:写完整 HID Profile 就行。

  • 实际操作难点

    1. Report Map 编写复杂,容易出错
    2. Characteristic 属性、权限、加密、Bonding 细节要严格
    3. 各操作系统对 HID 兼容性要求不同

所以大部分开发者在 BLE 键盘/鼠标场景下,还是用 Bluedroid 的 HID Profile,稳定、少坑。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94310.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(纯新手教学)计算机视觉(opencv)实战八——四种边缘检测详解:Sobel、Scharr、Laplacian、Canny

边缘检测详解:Sobel、Scharr、Laplacian、Canny边缘检测是图像处理和计算机视觉中的重要步骤,主要用于发现图像中亮度变化剧烈的区域,即物体的轮廓、边界或纹理特征。OpenCV 提供了多种常用的边缘检测算子,本教程将通过四种方法带…

PyTorch 环境配置

目录一、安装 CUDA二、安装 PyTorch1. 创建虚拟环境2. 安装 PyTorch三、在 PyCharm 上创建一个 PyTorch 项目参考文章: 【2025年最新PyTorch环境配置保姆级教程(附安装包)】 【超详细 CUDA 安装与卸载教程(图文教程)】…

鸿蒙中冷启动分析:Launch分析

启动的分类(热身环节) 启动动类型触发条件系统开销 & 速度主要优化方向冷启动应用进程不存在(首次启动或进程被杀后启动)最高,需创建进程、加载资源、初始化所有组件主要优化目标,减少主线程任务&…

告别盲目排查,PolarDB+DAS Agent智能运维新突破

1.概述 周五下午6点正准备下班,数据库CPU突然爆满,业务告警响成一片,DBA却要手动翻查CPU/内存/负载等多个监控指标,还要查询是否有新增慢SQL,死锁等问题?” 这可能是数据库DBA最闹心的场景了,…

Linux------《零基础到联网:CentOS 7 在 VMware Workstation 中的全流程安装与 NAT 网络配置实战》

(一)Linux的发行版Centos安装与配置 下载Linux发行版本Centos:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云点击CentOS-7-x86_64-DVD-2009.torrent ,CentOS-7-x86_64-DVD-2009.torrent是官方提供的 BT 种子文件(176.1 KB&a…

iOS App 混淆工具实战,教育培训类 App 的安全保护方案

随着在线教育、企业培训、知识付费平台的兴起,越来越多的 iOS 应用需要保护自己的课程资源和核心逻辑。然而,教育类 App 面临的最大风险并非传统的外挂或刷分,而是 视频盗链、题库数据泄露、源码逻辑被二次利用。 在这种场景下,合…

RabbitMQ:SpringAMQP Topic Exchange(主题交换机)

目录一、案例需求二、基础配置三、代码实现TopicExchange与DirectExchange类似,区别在于RoutingKey可以是多个单次的列表,并且以.分割。 Queue与Exchange指定BindingKey时可以使用通配符: #:代指0个或多个单词。*:代…

(纯新手教学)计算机视觉(opencv)实战六——图像形态学(腐蚀、膨胀、开运算、闭运算、梯度、顶帽、黑帽)

图像形态学在图像处理中,形态学(Morphology) 是一种基于图像中物体形状的处理方法,通常用于二值图像和灰度图像。它通过腐蚀、膨胀等基本操作,结合开运算、闭运算、梯度运算、顶帽、黑帽等派生操作,来实现去…

学习嵌入式第三十五天

文章目录网络(续上)1.函数接口2.相关功能实现1.TCP连接2.UDP习题网络(续上) 1.函数接口 sendto 原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, sockle…

为什么给数据表加了索引,写入速度反而变慢了

为数据表增加索引后之所以会导致写入(包括插入、更新、删除)操作的速度变慢,其根本原因在于索引本质上是一个独立的、需要与主表数据保持实时同步的“数据结构”。这一机制的核心逻辑涵盖五个方面:因为索引本质上是一个“独立的数…

.NET Core 中采用独立数据库的SAAS(多租户)方法

介绍多租户是指一种软件架构,其中软件的单个实例在服务器上运行并为多个租户提供服务。在基于 SAAS 的平台中,租户是指使用该平台开展业务运营的客户。每个租户都拥有独立的数据、用户帐户和配置设置,并且与其他租户隔离。多租户允许有效利用…

运维日常工作100条

这是一份非常详细和实用的“运维日常工作100条”清单。它涵盖了从日常巡检、变更管理、故障处理到安全、优化和文档等运维工作的方方面面,可以作为运维工程师的日常工作指南和检查清单。 运维日常工作100条 一、日常巡检与监控 (20条) 检查核心监控大盘:查看整体业务健康状态…

OpenHarmony子系统介绍

OpenHarmony子系统OpenHarmony子系统1. AI业务子系统2. 方舟运行时子系统3. ArkUI框架子系统4. DFX子系统5. DeviceProfile子系统6. XTS子系统7. 上传下载子系统8. 主题框架子系统9. 事件通知子系统10. 位置服务子系统11. 元能力子系统12. 全局资源调度子系统13. 全球化子系统1…

博士招生 | 英国谢菲尔德大学 招收计算机博士

内容源自“图灵学术博研社”gongzhonghao学校简介谢菲尔德大学(The University of Sheffield)是英国久负盛名的公立研究型大学,也是罗素集团成员之一。在 2026 年 QS 世界大学排名中,谢菲尔德大学位列第92位,其中计算机…

如何理解面向过程和面向对象,举例说明一下?

面向过程和面向对象是两种不同的编程思想,核心区别在于解决问题的视角不同:前者关注 “步骤和过程”,后者关注 “对象和交互”。面向过程的核心思想是把问题拆解成一系列步骤,通过函数实现每个步骤,然后按顺序调用这些…

深入了解评估与微调中使用的Graders:原理、实现与最佳实践

深入了解评估与微调中使用的Graders 在模型评估与微调(Fine-tuning)过程中,Graders(评分器)是衡量模型输出与参考答案之间表现的重要工具。本文将系统介绍Grader的类型、技术实现及如何在实际项目中融入稳定且高质量的…

行缓存(line buffer)在图像卷积中的工作方式

上面这张图配合文字,展示了行缓存(line buffer)在图像卷积中的工作方式:上半部分是一个按行扫描输入的图像块(示例为 99,编号 1–81)。 蓝色表示已被写入行缓存并按队列等待的数据,绿…

【数据分享】中国371个城市的坡度矢量数据和excel数据

今天要说明数据就是中国371个城市的坡度矢量数据和excel数据。数据介绍在城市发展的进程中,地形地貌始终是影响规划决策的关键因素,而坡度作为表征地表倾斜程度的核心指标,更是贯穿于城市建设、生态保护等诸多环节。本文将全面解读中国 371 个…

《WINDOWS 环境下32位汇编语言程序设计》第7章 图形操作(1)

图形设备接口GDI(Graphics Device Interface)是Win32的一个重要组成部分,其作用是允许Windows的应用程序将图形输出到计算机屏幕、打印机或其他输出设备上。GDI实际上是一个函数库,包括直线、画图和字体处理等数百个函数。7.1 GDI…

数据结构-HashMap

在 Java 键值对(Key-Value)集合中,HashMap 是使用频率最高的实现类之一,凭借高效的查找、插入性能,成为日常开发的 “利器”。本文将从 HashMap 的底层原理、核心特点、常用方法到遍历方式、使用注意事项,进…