ESP32 芯片平台的蓝牙 Demo 使用方法)

@ESP32 芯片平台的蓝牙 Demo 使用方法

ESP32 芯片是集成了 2.4 GHz Wi-Fi 和蓝牙双模的 SoC 方案。之前玩转 ESP8266 芯片的大都是 Wi-Fi 开发者,升级到 ESP32 芯片平台时对 Wi-Fi 部分还比较熟悉操作,但对新增加的蓝牙部分可能还不太了解,所以本文目的就是演示一下,指引想应用 ESP32 芯片蓝牙功能的开发者们该如何入手。

ESP32 芯片的 Wi-Fi 功能本文就略过不提了,直接谈蓝牙部分。ESP32 支持蓝牙 v4.2 的完整标准,包括传统蓝牙 (BR/EDR) 和低功耗蓝牙 (BLE)。
那么怎么来测试蓝牙功能呢?
在我们的 ESP-IDF 1.0 中已经包含了三个 BLE demo,分别是:05_ble_adv、14_gatt_server 和 15_gatt_client。

首先,我们来看第一个 demo:05_ble_adv
这是一个发送广播 (advertising) 的 demo。
进入 ESP-IDF 目录后(请在 github.com/espressif/esp-idf 下载),可以直接执行 make clean 再执行 make。弹出 make menuconfig 的图形用户界面 (GUI) 之后,可打开 BT 选项,如下图所示:
ESP32 芯片平台的蓝牙 Demo 使用方法)
make flash 会编译源码,并且在编译好之后会烧录 BIN 文件。下图为烧录成功的打印信息:
ESP32 芯片平台的蓝牙 Demo 使用方法)
连上串口工具,会有如下打印:
ESP32 芯片平台的蓝牙 Demo 使用方法)
让我们来看看发生了什么?拿出安卓手机,打开 BLE 软件 BLEDeng (可以在应用商店下载),发现搜到了名为 ESP-BLE-HELLO 的设备,这个就是 05_ble_adv/main/app_bt.c demo 中设置的名字。
ESP32 芯片平台的蓝牙 Demo 使用方法)
ESP32 芯片平台的蓝牙 Demo 使用方法)
用户通过 05_ble_adv 下的 readme.rst,可以发现这个 demo 只是一个通过主机控制接口 (HCI) 直接控制蓝牙控制器发送广播的小程序。
ESP32 芯片平台的蓝牙 Demo 使用方法)
其次,我们来看一下蓝牙主机的 demo,例如 GATT。
ESP-IDF 的 examples 目录下面还有 14_gatt_server 和 15_gatt_client,这就是 GATT 的 demo。我们以 14_gatt_server 的 demo 为例,来进行测试。
进入 14_gatt_server 的界面,同样可以直接编译,如果弹出 make menuconfig 的 GUI,同样检查一下 BT_ENABLE 的选项,并打开它。有了 05_ble_adv 的 demo 编译和烧录的经验,这个程序很快就能编译好,并且烧录成功。打开串口工具,发现了如下打印:
ESP32 芯片平台的蓝牙 Demo 使用方法)
这个串口的打印,比 05_ble_adv 的 demo 多了一些 CREATE_SERVICE、ADD_CHAR、ADD_DESCR 的字眼,这个很明显就是创建了 GATT 的服务,添加了特性和描述。
此时,我们打开 LightBlue 软件,可以看到搜索到了设备 ESP_GATTS_DEMO。
ESP32 芯片平台的蓝牙 Demo 使用方法)
再连接 GATT Server,发现已经可以连接成功了,显示出一个为 0xFF 的通用唯一识别码 (UUID),这个 UUID 很明显是 demo 自定义的啦。
ESP32 芯片平台的蓝牙 Demo 使用方法)
我们再点进去这个 Service 看一下,发现可以读写特性,小编的截图已经是多次读取过特性和写过特性的
ESP32 芯片平台的蓝牙 Demo 使用方法)
这里的 READ 操作返回的 0xDEEDBEEF 是在代码的哪里呢?打开 demo 的代码,会发现程序的 123 行收到了 GATTS_READ_EVT,这个表示的就是收到了 GATT 的读请求事件,收到事件后,程序固定发送 0xdeedbeef 的值的响应,正好与手机 app 里看到的是一致的。
ESP32 芯片平台的蓝牙 Demo 使用方法)
说完读操作,再来看看写操作吧。
当小编写入特性值 0x8899 的时候,在最下面的串口 log 也可以看到 ESP32 已经接收到了正确的值,测试成功。
ESP32 芯片平台的蓝牙 Demo 使用方法)
bluelight explorer:
[1]:http://www.liangchan.net/soft/softdown.asp?softid=10488