ESP32-C3 学习测试 蓝牙 篇(一、认识 ESP-IDF 的蓝牙框架、简单的了解蓝牙协议栈)

简介: 在我们前面 ESP32-C3 的教程中,从基本的外设,到wifi,到最后使用MQTT连接云平台完成了一个简单的项目,我们已经掌握了ESP32-C3 的大部分功能了。但是作为一款蓝牙芯片,蓝牙的使用是必不可少的,今天我们就开始对 ESP32-C3 蓝牙的使用进行学习测试。 蓝牙部分已经不敢叫教学了,为了搞清楚ESP-IDF的那些示例程序到底是关于什么内容,因为自己也是边学习边测试花了大量时间补充蓝牙的基本知识,希望小伙伴指出不足之处!...更新说明,ESP32-C3只支持BLE
在我们前面 ESP32-C3 的教程中,从基本的外设,到wifi,到最后使用MQTT连接云平台完成了一个
简单的项目,我们已经掌握了ESP32-C3 的大部分功能了。
但是作为一款蓝牙芯片,蓝牙的使用是必不可少的,今天我们就开始对 ESP32-C3 蓝牙的使用进行学习测试。 
蓝牙部分已经不敢叫教学了,为了搞清楚ESP-IDF的那些示例程序到底是关于什么内容,
因为自己也是边学习边测试花了大量时间补充蓝牙的基本知识,希望小伙伴指出不足之处!

...更新说明,ESP32-C3只支持BLE                                     2022/5/19

前言

从本文开始我们来进行 ESP32-C3 的蓝牙的学习测试。

ESP32-C3学习 蓝牙 篇系列博文连接:
测试使用的开发板:
自己画一块ESP32-C3 的开发板(第一次使用立创EDA)(PCB到手)
测试使用的开发环境:
ESP32-C3 VScode开发环境搭建(基于乐鑫官方ESP-IDF——Windows和Ubuntu双环境)

首先我们来看看ESP32-C3 的官方关于关于蓝牙部分的基本介绍:
在这里插入图片描述
ESP32-C3 增加了对 Bluetooth LE 5.0 协议的支持,包含 Coded PHY (Long Range) 和扩展广播 (extended advertisement) 功能。它通过引入 FEC 编解码等技术,虽然增加了数据冗余度,但是大幅度增加了设备通信距离(通常为 100 米)。此外,ESP32-C3 还支持蓝牙 Mesh (Bluetooth Mesh) 协议,这使它成为了控制本地网络设备,以及直接与其他 Bluetooth LE 5.0 传感器设备进行通信的强大候选设备之一。

但是说到蓝牙学习,查看一下官方的文档介绍:乐鑫官方ESP32-C3 蓝牙API介绍
在这里插入图片描述

这么多蓝牙API,难道都得学会了怎么用?

所以这里就得明白这些示例的含义,然后学会了哪些API的使用,才能做基本的应用!

用起来才是学习的最终目的嘛!

想着我们可以先看看IDF中蓝牙的例子有哪些,一看吓一跳,我的个天(截了2个屏幕还不够放的……):
在这里插入图片描述

反正看完,头有点大,蓝牙协议的认识,还是当时学习 NRF52832 的时候认真了解过一段时间,但是当时还是因为 NRF52832 在一些项目上已经没有了价格优势,所以也暂停了一段时间,刚接触个蓝牙5.0的框架,还没结合实际代码深入了解。

虽然每个例子都有说明是干什么用的,如下图:
在这里插入图片描述
但是如果连基本的蓝牙协议专有名词都不知道,还是无法明白!

因为专栏的目的是为了能够做一些小的项目,所以还是参考了多方面的资料,就本文的目的,就是争取把ESP32-C3 使用的 ESP-IDF 中 蓝牙的这些 示例程序是干什么了解清楚 。有了基本的了解,我们才知道去学习哪个示例,可以用来干什么!

所以本文应该会不定期的根据自己慢慢学习测试总结的结果进行更新维护!

1、蓝牙基本介绍

介绍这一块我就不班门弄斧了,把一些看到的觉得好的文章拿过来推荐给大家!因为蓝牙这一块的理论,专有名词不是一句两句就能说得清楚的:

在我的另一篇博文中,有一些关于蓝牙的基本介绍:

蓝牙5.0简介、nRF52832 BLE样例工程框架及main函数初始化流程简析

推荐几篇很好的文章:

ESP32 蓝牙开发:原理简述

蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)

三种蓝牙架构实现方案(蓝牙协议栈方案)

现在最火的蓝牙5、蓝牙低功耗和经典蓝牙,你知道他们的区别吗?

还有前人写的ESP32的蓝牙博文:

ESP32学习笔记十七之蓝牙通信-Bluetooth

esp32系列(5):esp32 蓝牙架构学习

这里总结性的说明几个重要的点:

1.1 经典蓝牙(BT) 和 低功耗蓝牙(BLE)

蓝牙分为 经典蓝牙(Classic Bluetooth) BT和 蓝牙低功耗(Bluetooth Low Energy) BLE

也可以称为 蓝牙BR/EDR 和 BLE:
在这里插入图片描述
如果要深入了解 经典蓝牙 与 蓝牙BLE的区别,对于本文下面章节《1.3 蓝牙协议栈》的内容也得有一定的了解,或者在上面的推荐文章中,已经掌握了基本的一些理论基础:

比较蓝牙BR / EDR和BLE之间的异同。一个好的起点是协议的物理层(PHY)。PHY包含用于调制和解调模拟信号并将其转换为数字符号的电路。BR / EDR和BLE不同的PHY的四个特性包括信道方案,功耗,延迟和吞吐量。

  • 信道

蓝牙BR / EDR和BLE都在2.4GHz ISM频段内通信,但它们划分频段的信道数不同。蓝牙BR / EDR将频段划分为间隔1 MHz的79个频道。BLE采用更简单的发射器和接收器,因此它将频带划分为间隔2 MHz的40个通道。

  • 功率

BLE低功耗蓝牙的特点就是功耗低,至于功耗的具体数值,随着新版本的不停发布,这里就不给具体数值。

  • 延迟

BLE优于蓝牙BR / EDR的另一个特点是延迟。蓝牙BR / EDR大约需要100 ms才能准备好发送数据。从发射器接收数据到接收器可用数据时,还有100毫秒的延迟。在某些情况下,这会导致相当明显的延迟。它还会导致更高的功耗,因为发送数据所需的额外时间会导致更多的电池消耗。
BLE提供更低的延迟,只需3 ms即可准备发送数据。此外,从发送器接收数据到接收器可用时的等待时间仅为6 ms。这样可以更快地发送数据并节省电力。

  • 吞吐量

终于有了一个经典蓝牙的优势之处,相对来说,低功耗蓝牙的吞吐量肯定会小于经典蓝牙的。
但是到了蓝牙5.0以后,BLE的速度有了大量提升……

应用领域:

经典蓝牙:
1.传声音
蓝牙耳机、蓝牙音箱。移动的如耳机、便携音箱都是基于经典蓝牙协议的。

2.传大量数据
例如某些工控场景,使用Android或Linux主控,外挂蓝牙遥控设备的,
可以使用经典蓝牙里的SPP协议,当作一个无线串口使用。速度比BLE传输快多了。
这里要注意的是,iPhone没有开放

蓝牙BLE
耗电低,数据量小,如遥控类(鼠标、键盘),传感设备(心跳带、血压计、温度传感器、共享单车锁、智能锁、防丢器、室内定位)
1、健康医疗用品
2、定位应用
3、近距离数据采集
4、智能家居应用
5、移动扩展设备
6、汽车电子设备

双模蓝牙:
双模蓝牙是包含经典蓝牙协议,也包含BLE蓝牙协议的双协议模块:
如智能电视遥控器、降噪耳机等。很多智能电视配的遥控器带有语音识别,需要用经典蓝牙才能传输声音。
如果做复杂的按键,例如原本键盘表上没有的功能,经典蓝牙的HID按键协议就不行了,得用BLE做私有协议。
很多降噪耳机上通过APP来调节降噪效果,也是通过BLE来实现的私有通信协议。

在 ESP32-C3 芯片上,只支持 BLE。

关于这个问题,当初我说两者都支持,因为 ESP-IDF 中有经典蓝牙和BLE的示例都有,而且没有深入的测试了解,经过留言区小伙伴的提醒,查阅了相关的资料,确定 ESP32-C3,只支持 BLE。

官方的介绍芯片时是说,ESP32-C3 支持 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE),在《ESP32-C3 系列芯片技术规格书》中也只提到,ESP32-C3 具有 低功耗蓝牙子系统,支持 Bluetooth 5 和 Bluetooth mesh。其中还有一张图也可以说明问题:
在这里插入图片描述

1.2 蓝牙 Mesh和 蓝牙BLE

蓝牙Mesh是一种 网络技术。蓝牙Mesh网络依赖于 蓝牙BLE。

低功耗蓝牙技术是蓝牙Mesh使用的无线通信协议栈。

蓝牙Mesh基于蓝牙BLE低功耗广播

蓝牙Mesh采用蓝牙低功耗广播的方式就行信息发送和接受,将信息从网络当中的某一个节点转发至目的节点,在蓝牙Mesh组网中,这种广播模式也称为网络泛洪。

在ESP32-C3芯片上,ESP-IDF 提供了 蓝牙 Mesh 网络的API,可以直接应用。

1.3 蓝牙协议栈

蓝牙的协议栈我在另一篇博文也介绍过,因为进一步的学习让自己对蓝牙的知识更进一步,这里再来说明一次,还是以BLE协议为主,因为在今后的应用中BLE应该是用得最多的:
在这里插入图片描述
这里我用一张表格总结一下,看起来更加的直观:
在这里插入图片描述

1.4 蓝牙芯片方案的实现

结合蓝牙协议栈的内容,配合上面的推荐文章《三种蓝牙架构实现方案(蓝牙协议栈方案)》,我们可以来说明一下,一般厂家蓝牙方案是怎么设计的:

对于BR/EDR 蓝牙设备类型,Controller 通常包含 无线电处理、基带、链路管理、和可选择的HCI接口层;
对应LE Controller 主要包含LE PHY、链路层、和可选择的HCI;

如果把 BR/EDR Controller 和 LE Controller设 计到一个Controller,就是我们常说的双模蓝牙。

如下图:
在这里插入图片描述
在单芯片方案中,Controller 和 Host,profiles,和应用层都在同一片芯片中;
在网络控制器模式中,Host 和 Controller 是在一起运行的,但是应用 和 profiles 在另外一个器件上,比如 PC 或者其他微控制器,可以通过 UART, USB进行操作;
在双芯片模式中,Controller 运行在一个控制器,而应用层,profiles和 Host 是运行在另外一个控制器上。

对于我们的ESP32-C3芯片而言,我认为是下图这种(有错误清指出!!)
在这里插入图片描述

即便上面的推荐资料全部看完了,也有不少同学还是会犯迷糊,概念多,协议多,体现到代码上到底哪些是我们需要学习使用修改的呢? 这个先别急,我们再来把 ESP-IDF 蓝牙框架了解一下!

2、ESP32-C3 ESP-IDF 蓝牙框架

回到我们需要使用的 ESP-IDF本身,官方的对于蓝牙API的说明如下:
在这里插入图片描述

我们上文已经更新了说明,ESP32-C3 只支持BLE,虽然ESP-IDF有传统蓝牙和BLE,但是在 ESP32-C3 上面只能运行与 BLE 有关的示例。

经过上面那么多理论知识的洗礼,我们再回头看看 ESP-IDF 蓝牙 API:
在这里插入图片描述
整体的结构我们已经差不多能够明白了,那么我们从 ESP-IDF Examples 的例程来看一看实际的例程分别是关于什么的。

2.1 基于Bluedroid 的示例

第一部分 Bluedroid 堆栈中的ble 部分:
在这里插入图片描述
我们前面说过,GATT用来规范 attribute 中的数据内容,并运用 group(分组)的概念对 attribute 进行分类管理。为主从设备交互数据提供 Profile、Service、Characteristic 等概念的抽象、管理。所以在这个示例程序中,关于GATT的示例是非常多的。

除此之外,包括我们经常能见到的蓝牙串口透传,使用的就是 SPP协议。

蓝牙Ibeacon 模式,是作为信标用于蓝牙定位的一种协议。

鼠标键盘,其他外设HID设备的延时,也提供了对应的例子。

第二部分 ble_50 部分:
在这里插入图片描述
对于示例中的这部分,居然没有说明,这里也就不过多解释。

第三部分 经典蓝牙 classic_bt 部分:
在这里插入图片描述
我们前面介绍过,经典蓝牙与蓝牙ble的应用领域的时候介绍过:经典蓝牙的应用领域有蓝牙耳机、蓝牙音箱,那么在ESP-IDF 经典蓝牙部分,这两个部分的示例代码都提供了!

还有SPP协议,蓝牙串口相关的,接收端,发送端,都单独的有自己的使用示例;

在最后可以使用hfp_ag 和 hfp_hf 示例与音频网关(AG)设备(例如智能手机)通信。

第四部分 coex 部分:
在这里插入图片描述
经典蓝牙和BLE共存,在前面我们提到过,如果把 BR/EDR Controller 和 LE Controller设 计到一个Controller,就能实现双模蓝牙,我们也说过ESP32-C3 是有两种类型的 Controller 。

2.2 基于 ESP-BLE-MESH的示例

上面介绍完成,到了esp_ble_mesh部分,我们还是一个一个看下去:
在这里插入图片描述
乐鑫的IDF中,居然就直接有和阿里精灵连接的例子。

2.3 基于 hci 的示例

在这里插入图片描述
前面介绍过,HCI主要用于两个MCU实现BLE协议栈的场合,规范两者之间的通讯协议和命令。
Controller 和 HCI相关的东西,现在不太好说明!

2.4 基于 Apache NimBLE的示例

Apache NimBLE 的堆栈仅支持 BLE,所以这部分也是和BLE有关的示例:
在这里插入图片描述
对于这部分的说明,ESP-IDF给出的 readme 都是比较详细的,或许是因为在代码占用和运行时,NimBLE 对内存的要求较低?

2.5 其他和蓝牙有关的示例

在这里插入图片描述
The Human Interface Device (HID)定义了蓝牙在人机接口设备中的协议、特征和使用规程。典型的应用包括蓝牙鼠标、蓝牙键盘、蓝牙游戏手柄等。该协议改编自USB HID Protocol。
蓝牙HID 是属于蓝牙协议里面的一个profile(应用层)。

结语

至此,对于 ESP32-C3来说, ESP-IDF中所有的蓝牙示例简单来说是干什么的都过了一遍,对于一块知识的学习,还是得先把基础打好,像蓝牙协议这么多专有名词,专业术语的知识来说,还是很有必要花足够的时间去对基础知识进行学习!

这篇文章是 ESP32-C3 蓝牙篇的开始,只是对我们将要对面的东西做了一个介绍,让自己让大家认识一下。

对于ESP-IDF使用来说,蓝牙篇章入门的资料少之又少,我学习查找资料几天,甚至都没有找到过确实的介绍 ESP-IDF 中示例介绍的文章 = =! 所以期间头很大,自己对蓝牙协议的理解也没那么深,所以在写博文的时候举步维艰,目前基本上没办法写出自己的理解,质量还请大家理解。文中的错误与不足在今后我会随时更新。同时希望有懂蓝牙的大佬多多指点。

ESP32-C3 蓝牙接下来的学习更新可能会没以前那么快,因为所有的示例,我都会尽量去跑一跑测试下,然后用来干嘛的?怎么用的?有什么意义?尽量都搞清楚了才会更新,希望大家理解!谢谢!

相关文章
|
15天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
65 8
|
22天前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
11天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
45 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
16天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
38 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
21天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
24天前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
50 7
|
21天前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
21天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
31 4
|
21天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
22天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
22 1