ESP32 ESP-IDF BLE gatt_client

陈拓 2021/12/12-2021/12/13

1. 简介

  • 官方文档

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/bluetooth/index.html

  • 官方例程

https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/bluetooth/bluedroid/ble/gatt_client

ESP-IDF Gatt Client Example

此示例演示如何使用ESP API创建GATT客户端。

2. 开发环境

《Win10启用Linux子系统安装Ubuntu》

https://blog.csdn.net/chentuo2000/article/details/112131624

《用乐鑫国内Gitee镜像搭建ESP32开发环境》

https://blog.csdn.net/chentuo2000/article/details/113424934

3. 构建项目

  • 复制官方例程

将官方例子项目复制到ESP-IDF开发工具之外,更名为esp32_gatt_client:

cp -r ~/esp/esp-idf/examples/bluetooth/bluedroid/ble/gatt_client ~/esp/esp32_gatt_client

  • 项目树

cd ~/esp/esp32_gatt_client

 

  • 刷新esp-idf环境

get_idf

  • 配置项目

idf.py menuconfig

保持默认值,退出。

  • 编译项目

idf.py build

  • 烧写项目

连接设备时我PC将USB-SERIAL识别为COM3。

idf.py -p /dev/ttyS3 -b 115200 flash

 

4. 测试

  • 模拟BLE设备

安装测试工具。在这里我们用nrf connect app。

在手机上安装这个工具软件,苹果安卓手机都可以。

安装好之后先设置一下。

1) 打开app,选择ADVERTISER

 

2) 按红色加号添加BLE设备

 

编辑广播包,点OK。

3) 启动广播

 

点击右边的灰色按钮。

4) 设置广播持续时间

 

5) 开始广播

 

右边的灰色按钮变成蓝色,开始广播。

可以添加多个蓝牙设备进行测试。

  • 查看串口信息

按一下开发板上的RST按钮:

看串口数据:

 

5. 显示广播包数据和扫描响应数据

默认是不显示广播包数据和扫描响应数据的,这由位于main目录下的Kconfig.projbuild设置项控制:

menu "Example Configuration"

    config EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP
        bool "Dump whole adv data and scan response data in example"
        default n

endmenu

EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP在程序中是数据输出的控制条件:

#if CONFIG_EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP
            if (scan_result->scan_rst.adv_data_len > 0) {
                ESP_LOGI(GATTC_TAG, "adv data:");
                esp_log_buffer_hex(GATTC_TAG, &scan_result->scan_rst.ble_adv[0], scan_result->scan_rst.adv_data_len);
            }
            if (scan_result->scan_rst.scan_rsp_len > 0) {
                ESP_LOGI(GATTC_TAG, "scan resp:");
                esp_log_buffer_hex(GATTC_TAG, &scan_result->scan_rst.ble_adv[scan_result->scan_rst.adv_data_len], scan_result->scan_rst.scan_rsp_len);
            }
#endif

要输出广播包数据和扫描响应数据,用idf.py menuconfig命令设置:

 

保存,退出。

看结果:

 

我们已经可以看到adv数据了。

6. 实现gatt client永久扫描

默认情况下30秒以后扫描就停止了,如果要实现永久扫描请看《ESP32开发笔记 如何实现 demo gatt client永久扫描》

https://blog.csdn.net/weixin_42788872/article/details/106527986

一文中的方法。

找到代码中的:

        uint32_t duration = 30;

改成:

        uint32_t duration = 0;

当duration的值为0时,将会永久扫描⽽而不不产⽣生超时。

猜你喜欢

转载自blog.csdn.net/chentuo2000/article/details/121900913