【学习向】ESP32的nimble和bluedriod有什么区别,我们又如何学习呢
面对nimble和bluedroid,可以根据设备支持及开发复杂度选择,Nimble更适合轻量级嵌入式开发。官方提供基础示例,可快速上手。Bluedroid则更加全面,功能复杂,支持经典蓝牙和ble。
文章目录
前言
大家在学习使用esp32的低功耗蓝牙功能的时候会发现,在官方历程里面是包含nimble以及bluedroid两种蓝牙协议栈,下面我们就来一起探讨一下他们二者之间的区别。
基本介绍
Nimble
Nimble是基于Apache MyNewt项目的开源蓝牙协议栈,专为嵌入式设备设计,采用模块化架构,代码量小且内存占用低。在esp官方文档里面的api指南部分有对代码详细的解析。
Nimble只支持ble(低功耗蓝牙)
Bluedroid
Bluedroid是Android系统默认的蓝牙协议栈,功能全面但复杂度高,资源消耗较大。假设我们需要连接xbox手柄到esp32上,就需要使用bluedroid协议栈进行开发。Bluedroid在ESP32中虽同样支持,但esp对此的官方文档较少,主要依赖Android社区的资源和经验。
Bluedroid不仅支持ble(低功耗蓝牙),同时还支持bt(经典蓝牙)
这边似乎是只有esp32支持经典蓝牙,esp32s3都只是支持低功耗蓝牙并不支持经典蓝牙
https://docs.espressif.com/projects/esp-idf/zh_CN/v5.5.1/esp32s3/api-reference/bluetooth/index.html
对于蓝牙协议栈的选择
Nimble的API设计更贴近嵌入式开发习惯,调试工具链与ESP-IDF深度集成。Bluedroid的调试需依赖Android开发经验,问题排查可能更复杂。如果没有安卓的项目经验可能会在开发上有点吃力。
此外,我们在选择蓝牙协议栈也需要关注自己的板子是否支持,常见的来说esp32是全面支持bt和ble的,但是esp32s3虽然有更加强大的性能,但是是不支持bt,而esp32s2是直接不支持蓝牙。具体大家要去官网查询型号
https://www.espressif.com.cn/zh-hans/products/hardware/esp32



关于nimble的学习

这里大家可以在官方历程里面选择API指南 -> 低功耗蓝牙 -> 快速入门
这里会使用历程中的/examples/bluetooth/ble_get_started/nimble/NimBLE_GATT_Server
是基于nimble蓝牙协议栈进行讲解。但是这里只会带我们入门学会使用gap和gatt的应用,这一部分乐鑫官方讲解非常详细,但是如果想要进一步的学习,是需要看其他更加针对性的历程
例如/examples/bluetooth/nimble,这里面有非常丰富的历程,以及对应文件的.md文件也有详细的说明,但是由于大部分都是demo的形式,如果自行修改历程观察现象进行学习会更加直观,最好先学习没有加入蓝牙安全的版本,了解框架,再加入蓝牙安全去进一步优化!
总结
总结下来普通嵌入式项目对于数据传输量不大,类似收发字符串或者hex数据,以及作为开关这一类项目推荐使用nimble的蓝牙,使用nimble可以加速开发进度。在进行nimble的学习可以先看官方文档的快速入门部分,学习主体架构,有一定了解之后再进行学习其他特定的demo,去修改历程观察现象。
更多推荐



所有评论(0)