一、介绍
该代码实现了一个低功耗蓝牙 (BLE) 通用属性 (GATT) 客户端,该客户端扫描附近的外围服务器并连接到预定义的服务。然后,客户端搜索可用特征并订阅已知特征,以便接收通知或指示。该示例可以注册应用程序配置文件并初始化一系列事件,这些事件可用于配置通用访问配置文件 (GAP) 参数以及处理扫描、连接到外围设备以及读写特性等事件
二、include
gattc_demo.c 中包含的头文件是:
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <stdio.h>
#include "nvs.h"
#include "nvs_flash.h"
#include "controller.h"
这些是 FreeRTOS 和底层系统组件运行所必需的,包括日志记录功能和将数据存储在非易失性闪存中的库。
#include "bt.h"
#include "esp_gap_ble_api.h"
#include "esp_gattc_api.h"
#include "esp_gatt_defs.h"
#include "esp_bt_main.h"
#include "esp_gatt_common_api.h"
- bt.h:从主机侧配置 BT 控制器和 VHCI。
- esp_bt_main.h:初始化并启用 Bluedroid 堆栈。
- esp_gap_ble_api.h:实现 GAP 配置,如广告、连接参数等。
- esp_gattc_api.h:实现 GATT Client 配置,如连接外设、搜索服务等。
三、入口函数
main 函数首先初始化非易失性 storage library。该库允许在闪存中保存键值对,并被一些组件(如 Wi-Fi 库)用于保存 SSID 和密码:
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK( ret );
四、BT 控制器和堆栈初始化
- 首先创建一个 BT 控制器配置结构来初始化 BT 控制器,该结构使用宏生成的默认设置命名。BT 控制器在控制器端实现主机控制器接口 (HCI)、链路层 (LL) 和物理层 (PHY)。BT 控制器对用户应用程序不可见,并处理 BLE 堆栈的较低层。控制器配置包括设置 BT 控制器堆栈大小、优先级和 HCI 波特率。创建设置后,BT 控制器将初始化并使用以下功能启用:
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
ret = esp_bt_controller_init(&bt_cfg);
- 接下来,在 BLE 模式下启用控制器。
ret = es