mirror of
https://github.com/DuRuofu/ESP32-Guide.git
synced 2026-02-06 07:02:01 +08:00
code: 添加代码
This commit is contained in:
6
code/07.bluetooth/gatt_client/CMakeLists.txt
Normal file
6
code/07.bluetooth/gatt_client/CMakeLists.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
# The following lines of boilerplate have to be in your project's CMakeLists
|
||||
# in this exact order for cmake to work correctly
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(gatt_client_demo)
|
||||
119
code/07.bluetooth/gatt_client/README.md
Normal file
119
code/07.bluetooth/gatt_client/README.md
Normal file
@@ -0,0 +1,119 @@
|
||||
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S3 |
|
||||
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- |
|
||||
|
||||
# ESP-IDF Gatt Client Example
|
||||
|
||||
This example shows how to use ESP APIs to create a GATT Client.
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
```bash
|
||||
idf.py set-target <chip_name>
|
||||
```
|
||||
|
||||
To test this example, you first run the [gatt_server_demo](../gatt_server), which creates services and starts advertising. `Gatt_client_demo` will start scanning and connect to the `gatt_server_demo` automatically.
|
||||
|
||||
This example will enable gatt server's notification function once the connection is established and then the devices start exchanging data.
|
||||
|
||||
Please, check this [tutorial](tutorial/Gatt_Client_Example_Walkthrough.md) for more information about this example.
|
||||
|
||||
### Hardware Required
|
||||
|
||||
* A development board with ESP32/ESP32-C3/ESP32-H2/ESP32-C2/ESP32-S3 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.)
|
||||
* A USB cable for Power supply and programming
|
||||
|
||||
See [Development Boards](https://www.espressif.com/en/products/devkits) for more information about it.
|
||||
|
||||
### Build and Flash
|
||||
|
||||
Run `idf.py -p PORT flash monitor` to build, flash and monitor the project.
|
||||
|
||||
(To exit the serial monitor, type ``Ctrl-]``.)
|
||||
|
||||
See the [Getting Started Guide](https://idf.espressif.com/) for full steps to configure and use ESP-IDF to build projects.
|
||||
|
||||
### Settings for UUID128
|
||||
|
||||
This example works with UUID16 as default. To change to UUID128, follow this steps:
|
||||
|
||||
1. Change the UIID16 to UUID128. You can change the UUID according to your needs.
|
||||
|
||||
```c
|
||||
// Create a new UUID128 (using random values for this example)
|
||||
static uint8_t gatts_xxx_uuid128[ESP_UUID_LEN_128] = {0x06, 0x18, 0x7a, 0xec, 0xbe, 0x11, 0x11, 0xea, 0x00, 0x16, 0x02, 0x42, 0x01, 0x13, 0x00, 0x04};
|
||||
```
|
||||
By adding this new UUID128, you can remove the `#define` macros with the old UUID16.
|
||||
|
||||
2. Change the structure to:
|
||||
|
||||
```c
|
||||
static esp_bt_uuid_t xxx_uuid = {
|
||||
.len = ESP_UUID_LEN_128,
|
||||
.uuid = {.uuid128 = { 0 },},
|
||||
};
|
||||
```
|
||||
|
||||
3. Add the new UUID128 to the profile.
|
||||
|
||||
```c
|
||||
// Copy the new UUID128 to the profile
|
||||
memcpy(xxx_uuid.uuid.uuid128, gatts_xxx_uuid128, ESP_UUID_LEN_128);
|
||||
```
|
||||
|
||||
4. Edit the `ESP_GATTC_SEARCH_RES_EVT` in order to filter the new UUID128.
|
||||
|
||||
```c
|
||||
case ESP_GATTC_SEARCH_RES_EVT: {
|
||||
ESP_LOGI(GATTC_TAG, "SEARCH RES: conn_id = %x is primary service %d", p_data->search_res.conn_id, p_data->search_res.is_primary);
|
||||
ESP_LOGI(GATTC_TAG, "start handle %d end handle %d current handle value %d", p_data->search_res.start_handle, p_data->search_res.end_handle, p_data->search_res.srvc_id.inst_id);
|
||||
if (p_data->search_res.srvc_id.uuid.len == ESP_UUID_LEN_128) {
|
||||
if(memcmp(p_data->search_res.srvc_id.uuid.uuid.uuid128, gatts_xxx_uuid128, ESP_UUID_LEN_128) == 0){
|
||||
ESP_LOGI(GATTC_TAG, "service uuid128 found");
|
||||
get_server = true;
|
||||
gl_profile_tab[PROFILE_X_APP_ID].service_start_handle = p_data->search_res.start_handle;
|
||||
gl_profile_tab[PROFILE_X_APP_ID].service_end_handle = p_data->search_res.end_handle;
|
||||
} else {
|
||||
ESP_LOGE(GATTC_TAG, "service not found");
|
||||
}
|
||||
}
|
||||
break;
|
||||
```
|
||||
|
||||
## Example Output
|
||||
|
||||
```
|
||||
I (0) cpu_start: Starting scheduler on APP CPU.
|
||||
I (525) BTDM_INIT: BT controller compile version [1342a48]
|
||||
I (525) system_api: Base MAC address is not set
|
||||
I (525) system_api: read default base MAC address from EFUSE
|
||||
I (535) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
|
||||
I (945) GATTC_DEMO: REG_EVT
|
||||
I (955) GATTC_DEMO: scan start success
|
||||
I (1115) GATTC_DEMO: 08 ef 3b a7 04 41
|
||||
I (1115) GATTC_DEMO: searched Adv Data Len 9, Scan Response Len 15
|
||||
I (1115) GATTC_DEMO: searched Device Name Len 13
|
||||
I (1125) GATTC_DEMO: LG CM2760(41)
|
||||
I (1125) GATTC_DEMO:
|
||||
|
||||
I (1425) GATTC_DEMO: 08 ef 3b a7 04 41
|
||||
I (1425) GATTC_DEMO: searched Adv Data Len 9, Scan Response Len 15
|
||||
I (1425) GATTC_DEMO: searched Device Name Len 13
|
||||
I (1435) GATTC_DEMO: LG CM2760(41)
|
||||
I (1435) GATTC_DEMO:
|
||||
|
||||
I (1865) GATTC_DEMO: 38 68 a4 69 bb 7c
|
||||
I (1865) GATTC_DEMO: searched Adv Data Len 31, Scan Response Len 14
|
||||
I (1865) GATTC_DEMO: searched Device Name Len 0
|
||||
I (1875) GATTC_DEMO:
|
||||
|
||||
I (2185) GATTC_DEMO: 38 68 a4 69 bb 7c
|
||||
I (2185) GATTC_DEMO: searched Adv Data Len 31, Scan Response Len 14
|
||||
I (2185) GATTC_DEMO: searched Device Name Len 0
|
||||
I (2185) GATTC_DEMO:
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon.
|
||||
2
code/07.bluetooth/gatt_client/main/CMakeLists.txt
Normal file
2
code/07.bluetooth/gatt_client/main/CMakeLists.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
idf_component_register(SRCS "gattc_demo.c"
|
||||
INCLUDE_DIRS ".")
|
||||
19
code/07.bluetooth/gatt_client/main/Kconfig.projbuild
Normal file
19
code/07.bluetooth/gatt_client/main/Kconfig.projbuild
Normal file
@@ -0,0 +1,19 @@
|
||||
menu "Example Configuration"
|
||||
|
||||
config EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP
|
||||
bool "Dump whole adv data and scan response data in example"
|
||||
default n
|
||||
|
||||
config EXAMPLE_CI_ID
|
||||
int
|
||||
default 70
|
||||
help
|
||||
This config the example id for CI test. Only for internal used.
|
||||
|
||||
config EXAMPLE_CI_PIPELINE_ID
|
||||
int "The pipeline id for CI test"
|
||||
default 0
|
||||
help
|
||||
This config the pipeline id for CI test. Only for internal used.
|
||||
|
||||
endmenu
|
||||
510
code/07.bluetooth/gatt_client/main/gattc_demo.c
Normal file
510
code/07.bluetooth/gatt_client/main/gattc_demo.c
Normal file
File diff suppressed because it is too large
Load Diff
8
code/07.bluetooth/gatt_client/sdkconfig.defaults
Normal file
8
code/07.bluetooth/gatt_client/sdkconfig.defaults
Normal file
@@ -0,0 +1,8 @@
|
||||
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
||||
# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration
|
||||
#
|
||||
CONFIG_BT_ENABLED=y
|
||||
CONFIG_BT_BLE_50_FEATURES_SUPPORTED=n
|
||||
CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y
|
||||
# CONFIG_BT_LE_50_FEATURE_SUPPORT is not used on ESP32, ESP32-C3 and ESP32-S3.
|
||||
CONFIG_BT_LE_50_FEATURE_SUPPORT=n
|
||||
9
code/07.bluetooth/gatt_client/sdkconfig.defaults.esp32c2
Normal file
9
code/07.bluetooth/gatt_client/sdkconfig.defaults.esp32c2
Normal file
@@ -0,0 +1,9 @@
|
||||
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
||||
# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration
|
||||
#
|
||||
CONFIG_IDF_TARGET="esp32c2"
|
||||
CONFIG_BT_ENABLED=y
|
||||
# CONFIG_BT_BLE_50_FEATURES_SUPPORTED is not set
|
||||
CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y
|
||||
# CONFIG_BT_LE_50_FEATURE_SUPPORT is not set
|
||||
CONFIG_BT_LE_HCI_EVT_BUF_SIZE=257
|
||||
7
code/07.bluetooth/gatt_client/sdkconfig.defaults.esp32c3
Normal file
7
code/07.bluetooth/gatt_client/sdkconfig.defaults.esp32c3
Normal file
@@ -0,0 +1,7 @@
|
||||
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
||||
# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration
|
||||
#
|
||||
CONFIG_IDF_TARGET="esp32c3"
|
||||
CONFIG_BT_ENABLED=y
|
||||
# CONFIG_BT_BLE_50_FEATURES_SUPPORTED is not set
|
||||
CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y
|
||||
7
code/07.bluetooth/gatt_client/sdkconfig.defaults.esp32s3
Normal file
7
code/07.bluetooth/gatt_client/sdkconfig.defaults.esp32s3
Normal file
@@ -0,0 +1,7 @@
|
||||
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
||||
# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration
|
||||
#
|
||||
CONFIG_IDF_TARGET="esp32s3"
|
||||
CONFIG_BT_ENABLED=y
|
||||
# CONFIG_BT_BLE_50_FEATURES_SUPPORTED is not set
|
||||
CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35,7 +35,7 @@
|
||||
#define PROFILE_NUM 1
|
||||
#define PROFILE_APP_IDX 0
|
||||
#define ESP_APP_ID 0x55
|
||||
#define SAMPLE_DEVICE_NAME "ESP_GATTS_DEMO"
|
||||
#define SAMPLE_DEVICE_NAME "ESP_DuRuofu"
|
||||
#define SVC_INST_ID 0
|
||||
|
||||
/* The max length of characteristic value. When the GATT client performs a write or prepare write operation,
|
||||
|
||||
Reference in New Issue
Block a user