ESP32蓝牙系列一:初识ESP32的蓝牙

本文详细介绍了ESP32芯片在蓝牙应用中的三种模式,重点讲解了ESP-IDF中BLUEDROID的运行环境、RTOS集成、任务管理以及主机架构,包括BTU和BTC层的功能划分。
摘要由CSDN通过智能技术生成

蓝牙相关的概念不在啰嗦,说到蓝牙的应用芯片就不得不提ESP32的芯片,直接上ESP32的蓝牙结构图

一、蓝⽛牙主机与控制器器的几种情况

1、在 ESP32 的系统上,选择 BLUEDROID 为蓝牙主机,并通过 VHCI(软件实现的虚拟 HCI 接口)接口,访问控制器。此场景下,BLUEDROID 和控制器都运行在同一宿主上(即 ESP32 芯⽚片),不需要额外连接运行蓝牙主机的 PC 或其它主机设备。

2、在 ESP32 上运行控制器器(此时设备将单纯作为蓝牙控制器器使⽤用),外接⼀
个运行蓝⽛牙主机的设备(如运⾏ BlueZ 的 Linux PC、运⾏ BLUEDROID 的Android等)。此场景下,控制器和主机运行在不不同宿主上,与⼿手机、 PAD、 PC 的使⽤用方比较类似。
3、此场景与2,特别之处在于,在 BQB(或其它认证)的控制器测试下,可以将 ESP32 作为 DUT,用 UART 作为 IO 接口,接上认证测试的 PC 机,即可完成认证。

二、RTOS相关

1、ESP-IDF 的默认运行环境为双核 FreeRTOS, ESP32 的蓝牙可按照功能分为多个任务
(task) 运⾏,不同任务的优先级也有不同,其中优先级最⾼高的为运行控制器器的任务。控制器任务对实时性的要求较⾼高,在 FreeRTOS 系统中的优先级仅次于 IPC 任务(IPC 任务⽤于双核 CPU 的进程间通信)。 BLUEDROID(ESP-IDF 默认蓝牙主机)共包含 4 个任务,分别运行 BTC、 BTU、 HCI UPWARD,及 HCI DOWNWARD。

2、BLUEDROID 中有部分与系统相关的接⼝口需要进⾏OSI 适配,涉及到的功能包括 Timer
(Alarm)、 Task (Thread)、 Future Await/Ready (Semphore)、 Allocator/GKI (malloc/free)
等。
BLUEDROID 中将 FreeRTOS 的 Timer 封装成 Alarm,⽤用于启动定时器器,触发某些特定任
务。BLUEDROID 将原先的 Linux 下的 Thread 部分重新替换成 FreeRTOS 的任务,并使⽤用
FreeRTOS 的 Queue 来触发任务的运⾏(唤醒)。BLUEDROID 使⽤用 Future Await/Ready 功能来实现阻塞, Future Lock 将 FreeRTOS 的xSemphoreTake 包装成 future_await 函数,并将 xSemphoreGive 包装成 future_ready函数。值得注意的是, future_await 和 future_ready 不不能在同⼀一任务中调⽤用。BLUEDROID 将标准库中的 malloc/free 封装成 Allocator 的申请/释放内存的函数, GKI 功能也同样使⽤用 malloc/free 来作为 GKI_getbuf/GKI_freebuf 的核⼼心函数。

三、主机架构

在 ESP-IDF 中,使⽤经过大量修改后的 BLUEDROID 作为蓝牙主机 (Classic BT + BLE)。BLUEDROID 拥有较为完善的功能,支持常用的规范和架构设计,同时也较为复杂。经过大量量修改后, BLUEDROID 保留了⼤大多数 BTA 层以下的代码,几乎完全删去了 BTIF 层的代码,使⽤用了较为精简的 BTC 层作为内置规范及 Misc 控制层。修改后的 BLUEDROID 及其与控制器之间的关系如下图:

BLUEDROID 内部⼤大致分为 2 层: BTU 层和 BTC 层(除去 HCI ),每个层都有对应的任务来处理理。 BTU 层主要负责蓝牙主机底层协议栈的处理理,包括L2CAP、 GATT/ATT、 SMP、 GAP 以及部分规范等,并向上提供以“bta”为前缀的接⼝口;BTC 层主要负责向应⽤用层提供接⼝口⽀支持、处理理基于 GATT 的规范、处理理杂项等,并向应用层提供以“esp”为前缀的接⼝口。所有的 API 都在 ESP_API 层,开发者应当使用“esp”为前缀的蓝⽛牙 API(特殊的除外)。

三、蓝牙目录


 

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在上一期的免费项目:高性价比WIFI图传方案快速入门教程的介绍中,详细地介绍了ESP32-CAM模块的简单使用 ,其裁剪了官方图传和人脸识别的代码改造成简单的图传代码,由官方四个文件的代码缩减成一个文件的代码。目的就是让买家能快速上手这个源码。让这个源码复杂度降低很多,利于阅读和学习。 在这一期的免费项目:修改了上一期的项目的源码,实现嵌入式web server功能实现远程浏览器WIFI点灯的操作(PIN4的IO口集成了闪光灯LED,所以不用外接灯了,亮瞎眼的亮度),实现了将服务器嵌入到单片机,单片机wifi联网之后,局域网访问单片机主页(通过串口打印的网址)就可以在网页里面控制开发板的灯,该设计是ESP32-CAM物联网应用的一个巨大的尝试,本人浪费生命值写了两天代码,踩了很多坑,也学到很多,写了一共三个版本的代码,此版本的代码是最便宜的一个版本,呵呵,不会接线和操作的看上期的项目即可,这里不再重复说明了,重要的事情说一遍:我有收费版的代码,服务更周到。 下面请看模块运行效果图: 下面是实物图: 模块的原理图: 电脑接上串口CH340,CH340接上ESP32-CAM之后,打开串口调试助手,调试效果如下: 服务器返回消息: 真源码截图(绝对给力): 项目总结:这次是利用ESP32-CAM模块对物联网应用的一次巨大的尝试,在电路城目前好像还没有相关的教程,在B站虽然有类似的项目,但是根本没有源码,也没有教程,而且功能没有我这个那么强大,因为我这个嵌入式服务器是有反馈的,而且支持网页手动输入指令,开灯或者关灯指令发送之后服务器会给客户端一个响应的,代码都是自己手工完成的,也借鉴过很多相关的项目。只要掌握这个嵌入式服务器远程点灯的项目,那么其他类似的设计就可以举一反三了。需要注意的是这个版本的代码是没有任何注释的,代码冗余度也很大,收费版的代码更加精简和加入详细注释(最关键)和调试代码。如下所示: 后期的的项目会涉及到图像处理(颜色识别,人脸检测,人脸识别,颜色跟踪,智能小车,手机app客户端控制,云平台语音识别,云平台图像识别等等,私有云图像处理,私有云监控搭建)全部原创开源,敬请期待。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值