蓝牙是一种短距离通信系统,蓝牙系统分为两种不同的技术:经典蓝牙(ClassicBluetooth)和蓝牙低功耗(BluetoothLowEnergy)。
从整体结构上,蓝牙可分为控制器(Controller)和主机(Host)两大部分;
ESP32应用的三种场景:
场景一(ESP-IDF默认):在ESP32的系统上,选择BLUEDROID为蓝⽛牙主机,并通过VHCI(软件实现的虚拟HCI接⼝口)接⼝口,访问控制器器。
场景⼆:在ESP32上运⾏控制器器(此时设备将单纯作为蓝⽛控制器使⽤),外接⼀个运⾏蓝⽛主机的设备(如运⾏ BlueZ的LinuxPC、运⾏BLUEDROID的Android等)。
场景三:此场景与场景二类似,特别之处在于,在BQB(或其它认证)的控制器测试下,可以将ESP32作为DUT,用UART作为IO接口,接上认证测试的PC机,即可完成认证。
HCI接口选择
ESP32上,HCI只能同时使⽤用⼀个IO接口,即如使用UART,则放弃VHCI、SDIO等其他IO接口。在ESP-IDF(V2.1以后)中,可以在menuconfig中将蓝牙的HCIIO接口方式配置为VHCI或UART。
蓝牙运行环境
ESP-IDF的默认运行环境为双核FreeRTOS,ESP32的蓝牙可按照功能分为多个任务(task)运行,不同任务的优先级也有不同,其中优先级最高的为运行控制器的任务。控制器任务对实时性的要求较高,在FreeRTOS系统中的优先级仅次于IPC任务(IPC任务用于双核CPU的进程通信)。BLUEDROID(ESP-IDF默认蓝牙主机)共包含4个任务,分别运行B