mirror of
https://github.com/espressif/esp-idf.git
synced 2026-08-18 06:35:35 +03:00
docs(ble): add flow diagrams to bluedroid BLE examples
(cherry picked from commit 051077835c)
Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
This commit is contained in:
@@ -5,6 +5,55 @@
|
||||
|
||||
The purpose of the Apple Notification Center Service (ANCS) is to give Bluetooth accessories (that connect to iOS devices through a Bluetooth low-energy link) a simple and convenient way to access many kinds of notifications that are generated on iOS devices.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ ESP32 │ │ iOS Device │
|
||||
│ (ANCS Client)│ │ (ANCS Server)│
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Connection ─────────── │
|
||||
│ │
|
||||
│ 1. Start Advertising │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 2. iOS connects & pairs │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── Service Discovery ─────────── │
|
||||
│ │
|
||||
│ 3. Discover ANCS Service │
|
||||
│ (UUID: 7905F431-B5CE-4E99-A40F-4B1E122D00D0) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 4. Subscribe to Notification Source │
|
||||
│ (UUID: 9FBF120D-6301-42D9-8C58-25E699A21DBD) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 5. Subscribe to Data Source │
|
||||
│ (UUID: 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Notification Flow ─────────── │
|
||||
│ │
|
||||
│ 6. New notification on iOS │
|
||||
│ (Call, SMS, Email, App, etc.) │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ 7. Request notification details │
|
||||
│ (Write to Control Point) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 8. Receive notification attributes │
|
||||
│ (Title, Message, App, etc.) │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ ESP32 │ │ iOS Device │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,6 +5,52 @@
|
||||
|
||||
This example is to test the Bluetooth compatibility and mobile phones.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────┐ ┌──────────────────┐
|
||||
│ ESP32 BLE │ │ Mobile Phone │
|
||||
│ (Compatibility) │ │ (LightBlue App) │
|
||||
└────────┬─────────┘ └────────┬─────────┘
|
||||
│ │
|
||||
│ 1. Initialize BLE │
|
||||
│ 2. Create GATT Services │
|
||||
│ 3. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Test Scenarios ─────────── │
|
||||
│ │
|
||||
│ Scan & Discover │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ │
|
||||
│ Connection Request │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ │
|
||||
│ Service Discovery │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ │
|
||||
│ Read Characteristic │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ Read Response │
|
||||
│ ════════════════════════════════════════════>│
|
||||
│ │
|
||||
│ Write Characteristic │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ Write Confirmation │
|
||||
│ ════════════════════════════════════════════>│
|
||||
│ │
|
||||
│ Enable Notification │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ Notification Data │
|
||||
│ ════════════════════════════════════════════>│
|
||||
│ │
|
||||
│ Disconnection │
|
||||
│ <═══════════════════════════════════════════>│
|
||||
│ │
|
||||
┌────────┴─────────┐ ┌────────┴─────────┐
|
||||
│ ESP32 BLE │ │ Mobile Phone │
|
||||
└──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,11 +5,43 @@
|
||||
|
||||
This example demonstrates Eddystone-compatible BLE scanning of eddystone frame, including UID and URL.
|
||||
|
||||
Eddystone is an open beacon protocol specification from Google aimed at improving “proximity-based experiences”
|
||||
Eddystone is an open beacon protocol specification from Google aimed at improving "proximity-based experiences"
|
||||
with support for both Android and iOS smart device platforms.
|
||||
|
||||
Learn more on [Beacons](https://developers.google.com/nearby/notifications/get-started) and [Eddystone](https://github.com/google/eddystone).
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────┐ ┌──────────────────┐
|
||||
│ Eddystone Sender │ │Eddystone Receiver│
|
||||
│ (Advertiser) │ │ (this example) │
|
||||
└────────┬─────────┘ └────────┬─────────┘
|
||||
│ │
|
||||
│ Broadcasting Eddystone Frames │ 1. Initialize BLE
|
||||
│ │ 2. Start Scanning
|
||||
│ │
|
||||
│ ─────────── Scanning ─────────── │
|
||||
│ │
|
||||
│ Eddystone UID Frame │
|
||||
│ ═══════════════════════════════════════════>│
|
||||
│ │ 3. Detect Eddystone
|
||||
│ │ 4. Parse UID Frame:
|
||||
│ │ - Namespace ID
|
||||
│ │ - Instance ID
|
||||
│ │ - RSSI
|
||||
│ │
|
||||
│ Eddystone URL Frame │
|
||||
│ ═══════════════════════════════════════════>│
|
||||
│ │ 5. Parse URL Frame:
|
||||
│ │ - Decode URL
|
||||
│ │ - TX Power
|
||||
│ │
|
||||
┌────────┴─────────┐ ┌────────┴─────────┐
|
||||
│ Eddystone Sender │ │Eddystone Receiver│
|
||||
└──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,11 +5,43 @@
|
||||
|
||||
This example demonstrates Eddystone-compatible BLE sending of eddystone frame, including UID and URL and TLM.
|
||||
|
||||
Eddystone is an open beacon protocol specification from Google aimed at improving “proximity-based experiences”
|
||||
Eddystone is an open beacon protocol specification from Google aimed at improving "proximity-based experiences"
|
||||
with support for both Android and iOS smart device platforms.
|
||||
|
||||
Learn more on [Beacons](https://developers.google.com/nearby/notifications/get-started) and [Eddystone](https://github.com/google/eddystone).
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────┐ ┌──────────────────┐
|
||||
│ Eddystone Sender │ │ Eddystone Receiver│
|
||||
│ (Advertiser) │ │ (Scanner) │
|
||||
└────────┬─────────┘ └────────┬─────────┘
|
||||
│ │
|
||||
│ 1. Initialize BLE │
|
||||
│ 2. Configure Eddystone Frame: │
|
||||
│ - UID Frame (Namespace + Instance) │
|
||||
│ - URL Frame (Encoded URL) │
|
||||
│ - TLM Frame (Telemetry Data) │
|
||||
│ 3. Set Raw Advertising Data │
|
||||
│ 4. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Broadcasting ─────────── │
|
||||
│ │
|
||||
│ Eddystone Advertisement Packet │
|
||||
│ ═══════════════════════════════════════════>│
|
||||
│ (Broadcast periodically) │
|
||||
│ │
|
||||
│ │ Parse Frame:
|
||||
│ │ - UID: Namespace ID
|
||||
│ │ - URL: Decoded URL
|
||||
│ │ - TLM: Battery, Temp
|
||||
│ │
|
||||
┌────────┴─────────┐ ┌────────┴─────────┐
|
||||
│ Eddystone Sender │ │ Eddystone Receiver│
|
||||
└──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -13,6 +13,54 @@ This example implement a BLE HID device profile related functions, in which the
|
||||
Users can choose different reports according to their own application scenarios.
|
||||
BLE HID profile inheritance and USB HID class.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ BLE HID │ │ Host │
|
||||
│ Device │ │ (PC/Phone) │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Initialization ─────────── │
|
||||
│ │
|
||||
│ 1. Create HID Service │
|
||||
│ - HID Information Char │
|
||||
│ - Report Map Char │
|
||||
│ - Report Chars (Mouse/Keyboard/Consumer) │
|
||||
│ - HID Control Point Char │
|
||||
│ 2. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Connection & Pairing ─────────── │
|
||||
│ │
|
||||
│ Scan & Connect │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Pairing (Bonding) │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ Enable Report Notification │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── HID Data Transfer ─────────── │
|
||||
│ │
|
||||
│ Send Keyboard Report │
|
||||
│ (Key Press/Release) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Send Mouse Report │
|
||||
│ (X/Y Movement, Buttons) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Send Consumer Report │
|
||||
│ (Volume +/-, Media Control) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ BLE HID │ │ Host │
|
||||
│ Device │ │ (PC/Phone) │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,6 +5,61 @@
|
||||
|
||||
From welcoming people as they arrive at a sporting event to providing information about a nearby museum exhibit, iBeacon opens a new world of possibilities for location awareness, and countless opportunities for interactivity between iOS devices and iBeacon hardware.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ iBeacon System │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌──────────────────┐ ┌──────────────────┐
|
||||
│ iBeacon Sender │ │ iBeacon Receiver │
|
||||
│ (Advertiser) │ │ (Scanner) │
|
||||
└────────┬─────────┘ └────────┬─────────┘
|
||||
│ │
|
||||
│ ─────────── Sender Operation ─────────── │
|
||||
│ │
|
||||
│ 1. Initialize BLE │
|
||||
│ 2. Configure iBeacon Data: │
|
||||
│ - Proximity UUID (16 bytes) │
|
||||
│ - Major ID (2 bytes) │
|
||||
│ - Minor ID (2 bytes) │
|
||||
│ - TX Power (1 byte) │
|
||||
│ 3. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Broadcasting ─────────── │
|
||||
│ │
|
||||
│ iBeacon Advertisement Packet │
|
||||
│ ═══════════════════════════════════════════>│
|
||||
│ (Broadcast every ~100ms) │
|
||||
│ │
|
||||
│ │ ─── Receiver ───
|
||||
│ │
|
||||
│ │ 1. Start Scan
|
||||
│ │ 2. Receive Adv
|
||||
│ │ 3. Parse iBeacon:
|
||||
│ │ - UUID
|
||||
│ │ - Major/Minor
|
||||
│ │ - RSSI
|
||||
│ │ 4. Calculate
|
||||
│ │ Distance
|
||||
│ │
|
||||
┌────────┴─────────┐ ┌────────┴─────────┐
|
||||
│ iBeacon Sender │ │ iBeacon Receiver │
|
||||
└──────────────────┘ └──────────────────┘
|
||||
|
||||
|
||||
┌─────────────────────────────────┐
|
||||
│ iBeacon Packet Structure │
|
||||
├─────────────────────────────────┤
|
||||
│ Prefix: 9 bytes │
|
||||
│ UUID: 16 bytes │
|
||||
│ Major: 2 bytes │
|
||||
│ Minor: 2 bytes │
|
||||
│ TX Power: 1 byte │
|
||||
└─────────────────────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -7,6 +7,52 @@
|
||||
|
||||
**This example relies on the BLE controller. please use the chip modules listed under Supported Targets.**
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ BLE Multi-Connection Central │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌───────────────────┐
|
||||
│ Multi-Conn Cent │
|
||||
│ (GATTC + GATTS) │
|
||||
└─────────┬─────────┘
|
||||
│
|
||||
│ 1. Initialize GATT Client & Server
|
||||
│ 2. Set Random Address
|
||||
│ 3. Start Scanning
|
||||
│
|
||||
▼
|
||||
┌───────────────────────────────────────────────────────────────────────┐
|
||||
│ Scan for Peripherals │
|
||||
└───────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ Found peripheral?
|
||||
│
|
||||
├───────────────────┬───────────────────┬───────────────────┐
|
||||
▼ ▼ ▼ ▼
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ...
|
||||
│ Peripheral 1 │ │ Peripheral 2 │ │ Peripheral 3 │
|
||||
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
|
||||
│ │ │
|
||||
│ ─────────── For Each Peripheral ───────────
|
||||
│
|
||||
│ 4. Stop Scanning
|
||||
│ 5. Create Connection
|
||||
│ 6. Update Scheduling Length
|
||||
│ 7. Connection Established
|
||||
│ 8. Add to Peer List
|
||||
│ 9. Change Random Address
|
||||
│ 10. Resume Scanning
|
||||
│
|
||||
▼
|
||||
┌───────────────────────────────────────────────────────────────────────┐
|
||||
│ All peripherals connected (up to CONFIG limit) │
|
||||
│ Maintain multiple connections │
|
||||
└───────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -7,6 +7,45 @@
|
||||
|
||||
**This example relies on the BLE controller. Please use the chip modules listed under Supported Targets.**
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ BLE Multi-Connection Peripheral │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌───────────────────┐ ┌───────────────────┐
|
||||
│ Multi-Conn Prph │ │ Centrals │
|
||||
│ (GATT Server) │ │ (1, 2, 3, ...) │
|
||||
└─────────┬─────────┘ └─────────┬─────────┘
|
||||
│ │
|
||||
│ 1. Initialize GATT Server │
|
||||
│ 2. Create Service │
|
||||
│ 3. Set Random Address │
|
||||
│ 4. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Connection Loop ───────────
|
||||
│ │
|
||||
│ Central 1 connects │
|
||||
│ <───────────────────────────│
|
||||
│ │
|
||||
│ 5. Stop Advertising │
|
||||
│ 6. Connection Established │
|
||||
│ 7. Change Random Address │
|
||||
│ 8. Restart Advertising │
|
||||
│ │
|
||||
│ Central 2 connects │
|
||||
│ <───────────────────────────│
|
||||
│ │
|
||||
│ ... Repeat for each Central ...
|
||||
│ │
|
||||
▼ │
|
||||
┌───────────────────────────────────────────────────────────────────────┐
|
||||
│ Maintain multiple connections simultaneously │
|
||||
│ (Limited by CONFIG_BT_ACL_CONNECTIONS) │
|
||||
└───────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -9,6 +9,71 @@
|
||||
|
||||
This vendor-specific custom profile is implemented in [spp_client_demo.c](../ble_spp_client/main/spp_client_demo.c) and [spp_server_demo.c](../ble_spp_server/main/ble_spp_server_demo.c).
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ BLE SPP Data Flow │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
SPP Client SPP Server
|
||||
┌───────────┐ ┌───────────┐
|
||||
│ UART │ │ UART │
|
||||
│ Terminal │ │ Terminal │
|
||||
└─────┬─────┘ └─────┬─────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌───────────┐ ┌───────────┐
|
||||
│ uart_task │ │ uart_task │
|
||||
└─────┬─────┘ └─────┬─────┘
|
||||
│ │
|
||||
│ ─────────── Connection Phase ─────────── │
|
||||
│ │
|
||||
│ 1. Scan for SPP Server │ Advertising
|
||||
│ ───────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 2. Connect │
|
||||
│ ───────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 3. MTU Exchange (200 bytes) │
|
||||
│ <────────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ 4. Service Discovery │
|
||||
│ ───────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 5. Enable Notification (CCCD) │
|
||||
│ ───────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Data Exchange ─────────── │
|
||||
│ │
|
||||
│ UART Input ──> WriteNoRsp (SPP_DATA_RECV_CHAR) │
|
||||
│ ───────────────────────────────────────────────────> │──> UART Output
|
||||
│ │
|
||||
│ UART Output <── Notification (SPP_DATA_NOTIFY_CHAR) │
|
||||
│ <─────────────────────────────────────────────────── │<── UART Input
|
||||
│ │
|
||||
┌─────┴─────┐ ┌─────┴─────┐
|
||||
│ SPP Client│ │SPP Server │
|
||||
└───────────┘ └───────────┘
|
||||
|
||||
|
||||
┌─────────────────────────────────┐
|
||||
│ SPP Characteristics │
|
||||
├─────────────────────────────────┤
|
||||
│ SPP_DATA_RECV (0xABF1) │
|
||||
│ - Client writes data here │
|
||||
│ │
|
||||
│ SPP_DATA_NOTIFY (0xABF2) │
|
||||
│ - Server sends data here │
|
||||
│ │
|
||||
│ SPP_COMMAND (0xABF3) │
|
||||
│ - Command channel │
|
||||
│ │
|
||||
│ SPP_STATUS (0xABF4) │
|
||||
│ - Status notification │
|
||||
└─────────────────────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,6 +5,42 @@
|
||||
|
||||
For description of this application please refer to [ESP-IDF GATT CLIENT SPP Example](../ble_spp_client/README.md)
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
SPP Server SPP Client
|
||||
┌───────────┐ ┌───────────┐
|
||||
│ UART │ │ UART │
|
||||
│ Terminal │ │ Terminal │
|
||||
└─────┬─────┘ └─────┬─────┘
|
||||
│ │
|
||||
│ ─────────── Initialization ─────────── │
|
||||
│ │
|
||||
│ 1. Create SPP Service (UUID: 0xABF0) │
|
||||
│ 2. Add Characteristics │
|
||||
│ 3. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Connection ─────────── │
|
||||
│ │
|
||||
│ Scan & Connect │
|
||||
│ <─────────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Connection Established │
|
||||
│ ─────────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ ─────────── Data Exchange ─────────── │
|
||||
│ │
|
||||
│ UART Input ──> Notification (SPP_DATA_NOTIFY_CHAR) │
|
||||
│ ─────────────────────────────────────────────────────>│──> UART Output
|
||||
│ │
|
||||
│ UART Output <── WriteNoRsp (SPP_DATA_RECV_CHAR) │
|
||||
│ <─────────────────────────────────────────────────── │<── UART Input
|
||||
│ │
|
||||
┌─────┴─────┐ ┌─────┴─────┐
|
||||
│SPP Server │ │ SPP Client│
|
||||
└───────────┘ └───────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -6,6 +6,49 @@
|
||||
This is the demo used to test the BLE throughput, this demo should used with throughput server demo together.
|
||||
The throughput of BLE can up to 720-767 Kbps between to ESP32 board.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ Throughput │ │ Throughput │
|
||||
│ Client │ │ Server │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Connection Setup ─────────── │
|
||||
│ │
|
||||
│ 1. Scan for "THROUGHPUT_DEMO" │ Advertising
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 2. Connect │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 3. MTU Exchange (517 bytes) │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ 4. Enable Notification │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Throughput Test ─────────── │
|
||||
│ │
|
||||
│ Mode 1: Notify Test (Server → Client) │
|
||||
│ <═══════════════════════════════════════════════ │
|
||||
│ Continuous notifications (514 bytes/packet) │
|
||||
│ │
|
||||
│ Mode 2: Write Test (Client → Server) │
|
||||
│ ═══════════════════════════════════════════════> │
|
||||
│ Continuous writes (514 bytes/packet) │
|
||||
│ │
|
||||
│ ─────────── Statistics ─────────── │
|
||||
│ │
|
||||
│ Calculate: Bytes/s, bits/s │
|
||||
│ Expected: 600-767 Kbps │
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ Throughput │ │ Throughput │
|
||||
│ Client │ │ Server │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -6,6 +6,48 @@
|
||||
This is the demo used to test the BLE throughput, this demo should used with throughput client demo together.
|
||||
The throughput of BLE can up to 720-767 Kbps between to ESP32 board.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────┐ ┌──────────────────┐
|
||||
│ Throughput Server│ │ Throughput Client│
|
||||
│ (this example) │ │ │
|
||||
└────────┬─────────┘ └────────┬─────────┘
|
||||
│ │
|
||||
│ 1. Initialize BLE │
|
||||
│ 2. Create GATT Service │
|
||||
│ 3. Add Characteristic (Notify) │
|
||||
│ 4. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Connection Setup ─────────── │
|
||||
│ │
|
||||
│ Connection Request │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ │
|
||||
│ 5. Accept Connection │
|
||||
│ │
|
||||
│ MTU Exchange (517 bytes) │
|
||||
│ <═══════════════════════════════════════════>│
|
||||
│ │
|
||||
│ Enable Notification │
|
||||
│ <════════════════════════════════════════════│
|
||||
│ │
|
||||
│ ─────────── Throughput Test ─────────── │
|
||||
│ │
|
||||
│ Notification Data (large packets) │
|
||||
│ ════════════════════════════════════════════>│
|
||||
│ Notification Data (large packets) │
|
||||
│ ════════════════════════════════════════════>│
|
||||
│ ... (continuous data stream) ... │
|
||||
│ ════════════════════════════════════════════>│
|
||||
│ │ Calculate
|
||||
│ │ Throughput
|
||||
│ │
|
||||
┌────────┴─────────┐ ┌────────┴─────────┐
|
||||
│ Throughput Server│ │ Throughput Client│
|
||||
└──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,6 +5,65 @@
|
||||
|
||||
This example shows how to use ESP APIs to create a GATT Client.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ GATT Client │ │ GATT Server │
|
||||
│ (this example)│ │(gatt_server) │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Scanning Phase ─────────── │
|
||||
│ │
|
||||
│ 1. Start Scan │ Advertising
|
||||
│ ───────────────────────────────────────────────> │ "ESP_GATTS_DEMO"
|
||||
│ │
|
||||
│ 2. Found "ESP_GATTS_DEMO" │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── Connection Phase ─────────── │
|
||||
│ │
|
||||
│ 3. Connect │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 4. Connection Established │
|
||||
│ <─────────────────────────────────────────────────│
|
||||
│ │
|
||||
│ 5. MTU Exchange │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ ─────────── Service Discovery ─────────── │
|
||||
│ │
|
||||
│ 6. Discover Service (UUID: 0x00FF) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 7. Service Found │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ 8. Get Characteristic (UUID: 0xFF01) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Enable Notification ─────────── │
|
||||
│ │
|
||||
│ 9. Register for Notify │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 10. Write CCCD (Enable Notify) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Data Exchange ─────────── │
|
||||
│ │
|
||||
│ 11. Write Characteristic │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 12. Receive Notification │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ GATT Client │ │ GATT Server │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -5,6 +5,59 @@
|
||||
|
||||
This example shows how to use the ESP BLE security APIs to secure connect to and encrypt with peer devices.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ Security │ │ Security │
|
||||
│ Client │ │ Server │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Security Parameters Setup ───────── │
|
||||
│ │
|
||||
│ 1. Set IO Capability │
|
||||
│ 2. Set Auth Mode (Bonding, MITM, SC) │
|
||||
│ 3. Set Key Distribution │
|
||||
│ │
|
||||
│ ─────────── Connection Phase ─────────── │
|
||||
│ │
|
||||
│ 4. Scan for Server │ Advertising
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 5. Connect │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Connection Established │
|
||||
│ <─────────────────────────────────────────────────│
|
||||
│ │
|
||||
│ ─────────── Pairing & Encryption ─────────── │
|
||||
│ │
|
||||
│ 6. Start Encryption (esp_ble_set_encryption) │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ 7. Exchange Pairing Features │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ 8. Generate Keys (LTK, IRK, CSRK) │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ 9. Encrypt Link │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ 10. ESP_GAP_BLE_AUTH_CMPL_EVT │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── Secure Data Exchange ─────────── │
|
||||
│ │
|
||||
│ Encrypted GATT Operations │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ Security │ │ Security │
|
||||
│ Client │ │ Server │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -9,6 +9,56 @@ To test this example, you can run [gatt_security_client_demo](../gatt_security_c
|
||||
|
||||
Please, check this [tutorial](tutorial/Gatt_Security_Server_Example_Walkthrough.md) for more information about this example.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ Security │ │ Security │
|
||||
│ Server │ │ Client │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Initialization ─────────── │
|
||||
│ │
|
||||
│ 1. Set Security Parameters │
|
||||
│ - IO Capability │
|
||||
│ - Auth Requirements │
|
||||
│ - Key Size │
|
||||
│ 2. Create GATT Service │
|
||||
│ 3. Start Advertising │
|
||||
│ │
|
||||
│ ─────────── Connection ─────────── │
|
||||
│ │
|
||||
│ Scan & Connect │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── Security Request ─────────── │
|
||||
│ │
|
||||
│ ESP_GAP_BLE_SEC_REQ_EVT │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Send Security Response │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Pairing Process ─────────── │
|
||||
│ │
|
||||
│ Exchange Pairing Features │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ Key Generation & Distribution │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ Link Encrypted │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ ESP_GAP_BLE_AUTH_CMPL_EVT │
|
||||
│ ───────────────────────────────────────────────> │
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ Security │ │ Security │
|
||||
│ Server │ │ Client │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -13,6 +13,62 @@ To test this demo, we can run the [gatt_client_demo](../gatt_client), which can
|
||||
|
||||
Please, check this [tutorial](tutorial/Gatt_Server_Example_Walkthrough.md) for more information about this example.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ GATT Server │ │ GATT Client │
|
||||
│(this example)│ │(gatt_client) │
|
||||
└──────┬───────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ ─────────── Initialization ─────────── │
|
||||
│ │
|
||||
│ 1. Register GATT Server App │
|
||||
│ 2. Create Service (UUID: 0x00FF) │
|
||||
│ 3. Add Characteristic (UUID: 0xFF01) │
|
||||
│ 4. Add Descriptor (CCCD) │
|
||||
│ 5. Start Service │
|
||||
│ 6. Start Advertising "ESP_GATTS_DEMO" │
|
||||
│ │
|
||||
│ ─────────── Connection Phase ─────────── │
|
||||
│ │
|
||||
│ Scan & Connect │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Connection Established │
|
||||
│ ─────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ MTU Exchange │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ ─────────── Service Discovery ─────────── │
|
||||
│ │
|
||||
│ Service Discovery │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Return Service Info │
|
||||
│ ─────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ ─────────── Enable Notification ─────────── │
|
||||
│ │
|
||||
│ Write CCCD (0x0001) │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Notification Enabled │
|
||||
│ │
|
||||
│ ─────────── Data Exchange ─────────── │
|
||||
│ │
|
||||
│ Write Request │
|
||||
│ <─────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Send Notification │
|
||||
│ ─────────────────────────────────────────────────>│
|
||||
│ │
|
||||
┌──────┴───────┐ ┌──────┴───────┐
|
||||
│ GATT Server │ │ GATT Client │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -7,6 +7,56 @@ This example shows how to create a GATT service with an attribute table defined
|
||||
|
||||
Please, check this [tutorial](tutorial/Gatt_Server_Service_Table_Example_Walkthrough.md) for more information about this example.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ GATT Server Initialization Flow │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌───────────────────┐
|
||||
│ GATT Server │
|
||||
└─────────┬─────────┘
|
||||
│
|
||||
│ 1. Define Attribute Table (gatt_db[])
|
||||
│ ┌─────────────────────────────────────┐
|
||||
│ │ [0] Service Declaration │
|
||||
│ │ [1] Char Declaration │
|
||||
│ │ [2] Char Value │
|
||||
│ │ [3] CCCD (Notify Enable) │
|
||||
│ │ ... │
|
||||
│ └─────────────────────────────────────┘
|
||||
│
|
||||
│ 2. esp_ble_gatts_create_attr_tab()
|
||||
│ - Create all attributes at once
|
||||
│
|
||||
│ 3. ESP_GATTS_CREAT_ATTR_TAB_EVT
|
||||
│ - Receive handle table
|
||||
│
|
||||
│ 4. esp_ble_gatts_start_service()
|
||||
│
|
||||
│ 5. Start Advertising
|
||||
│
|
||||
▼
|
||||
┌───────────────────┐ ┌───────────────────┐
|
||||
│ GATT Server │ │ GATT Client │
|
||||
│ (Advertising) │ │ │
|
||||
└─────────┬─────────┘ └─────────┬─────────┘
|
||||
│ │
|
||||
│ Scan & Connect │
|
||||
│ <───────────────────────────────────────────│
|
||||
│ │
|
||||
│ Service Discovery │
|
||||
│ ───────────────────────────────────────────>│
|
||||
│ │
|
||||
│ Read/Write/Notify Operations │
|
||||
│ <──────────────────────────────────────────>│
|
||||
│ │
|
||||
┌─────────┴─────────┐ ┌─────────┴─────────┐
|
||||
│ GATT Server │ │ GATT Client │
|
||||
└───────────────────┘ └───────────────────┘
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
|
||||
@@ -3,34 +3,169 @@
|
||||
|
||||
# ESP-IDF Gatt Client Multi Connection Example
|
||||
|
||||
This example shows the usage of APIs to create a GATT multi-connection client. It can be used to connect to three GATT servers at the same time.
|
||||
This example demonstrates how to use the BLE GATT client APIs to create a multi-connection client that can connect to multiple GATT servers simultaneously. By default, it supports connecting to up to 3 GATT servers at the same time.
|
||||
|
||||
To test this example, please run [gatt_server_demo](../gatt_server) to create three GATT server devices, namely ESP_GATTS_DEMO_a, ESP_GATTS_DEMO_b and ESP_GATTS_DEMO_c, `Gatt_client_multi_connection_demo` will connect to these three gatt server demos, and then exchange data.
|
||||
## How It Works
|
||||
|
||||
Please, check this [tutorial](tutorial/Gatt_Client_Multi_Connection_Example_Walkthrough.md) for more information about this example.
|
||||
The example creates three GATT client profiles (A, B, C), each corresponding to one connection. It scans for devices with specific names, connects to them, discovers services, registers for notifications, and exchanges data with each server.
|
||||
|
||||
### Target Devices
|
||||
|
||||
The example searches for three GATT servers with the following names:
|
||||
- `ESP_GATTS_DEMO_a` → Profile A
|
||||
- `ESP_GATTS_DEMO_b` → Profile B
|
||||
- `ESP_GATTS_DEMO_c` → Profile C
|
||||
|
||||
You can use the [gatt_server](../gatt_server) example to create these server devices by modifying the device name.
|
||||
|
||||
## Flow Diagram
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ GATT Client Multi-Connection │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌──────────────────┐
|
||||
│ GATTC Client │
|
||||
│ (Multi-Connect) │
|
||||
└────────┬─────────┘
|
||||
│
|
||||
│ 1. Start Scanning
|
||||
│
|
||||
▼
|
||||
┌────────────────────────────────────────────────────────────────────────┐
|
||||
│ Scan for BLE Devices │
|
||||
│ Looking for: ESP_GATTS_DEMO_a, _b, _c │
|
||||
└────────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ Found device matching name?
|
||||
│
|
||||
├─────────────────────┬─────────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
|
||||
│ ESP_GATTS_DEMO_a│ │ ESP_GATTS_DEMO_b│ │ ESP_GATTS_DEMO_c│
|
||||
│ (Server A) │ │ (Server B) │ │ (Server C) │
|
||||
└───────┬────────┘ └───────┬────────┘ └───────┬────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌───────────────────────────────────────────────────────────────────────┐
|
||||
│ For Each Connected Device: │
|
||||
├───────────────────────────────────────────────────────────────────────┤
|
||||
│ 2. Stop Scanning │
|
||||
│ 3. Connect (esp_ble_gattc_enh_open) │
|
||||
│ 4. MTU Exchange │
|
||||
│ 5. Service Discovery (UUID: 0x00FF) │
|
||||
│ 6. Find Characteristic (UUID: 0xFF01) │
|
||||
│ 7. Register for Notification │
|
||||
│ 8. Write CCCD (Enable Notification) │
|
||||
│ 9. Write Test Data (35 bytes) │
|
||||
│ 10. Resume Scanning for remaining devices │
|
||||
└───────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ All 3 devices connected?
|
||||
▼
|
||||
┌────────────────────────────────────────────────────────────────────────┐
|
||||
│ Stop Scanning │
|
||||
│ Continue receiving notifications from all devices │
|
||||
└────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
|
||||
┌────────────────────────────────────┐
|
||||
│ Connection Sequence Detail │
|
||||
└────────────────────────────────────┘
|
||||
|
||||
Client Server
|
||||
│ │
|
||||
│ ─────────── Connection Phase ─────────── │
|
||||
│ │
|
||||
│ Connect Request │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Connection Established │
|
||||
│ <────────────────────────────────────────────────>│
|
||||
│ │
|
||||
│ MTU Exchange Request │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ MTU Exchange Response │
|
||||
│ <──────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── Service Discovery ─────────── │
|
||||
│ │
|
||||
│ Discover Services (UUID: 0x00FF) │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Service Found │
|
||||
│ <──────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ Get Characteristic (UUID: 0xFF01) │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Characteristic Found │
|
||||
│ <──────────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ─────────── Enable Notification ─────────── │
|
||||
│ │
|
||||
│ Register for Notify │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Write CCCD (0x0001 = Enable Notify) │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ ─────────── Data Exchange ─────────── │
|
||||
│ │
|
||||
│ Write Characteristic (35 bytes test data) │
|
||||
│ ────────────────────────────────────────────────> │
|
||||
│ │
|
||||
│ Notification (data from server) │
|
||||
│ <──────────────────────────────────────────────── │
|
||||
│ │
|
||||
```
|
||||
|
||||
## How to Use Example
|
||||
|
||||
Before project configuration and build, be sure to set the correct chip target using:
|
||||
### Hardware Required
|
||||
|
||||
* Four development boards with supported SoC:
|
||||
- One board for the GATT Client (this example)
|
||||
- Three boards for GATT Servers (using [gatt_server](../gatt_server) example)
|
||||
* Four USB cables for power supply and programming
|
||||
|
||||
See [Development Boards](https://www.espressif.com/en/products/devkits) for more information.
|
||||
|
||||
### Setup GATT Servers
|
||||
|
||||
1. Flash the [gatt_server](../gatt_server) example to three separate boards
|
||||
2. Modify each server's device name before flashing:
|
||||
- Server 1: Change `ESP_GATT_DEMO` to `ESP_GATTS_DEMO_a`
|
||||
- Server 2: Change `ESP_GATT_DEMO` to `ESP_GATTS_DEMO_b`
|
||||
- Server 3: Change `ESP_GATT_DEMO` to `ESP_GATTS_DEMO_c`
|
||||
|
||||
### Configure the Project
|
||||
|
||||
Set the correct chip target:
|
||||
|
||||
```bash
|
||||
idf.py set-target <chip_name>
|
||||
```
|
||||
|
||||
The code can be modified to connect to more devices (up to 4 devices by default). If you need to connect to more devices (more than 4 devices), you need to change `BT/BLE MAX ACL CONNECTIONS` in menuconfig.
|
||||
**Connecting More Than 4 Devices:**
|
||||
|
||||
### Hardware Required
|
||||
The default maximum number of ACL connections is 4. To connect more devices:
|
||||
|
||||
* A development board with ESP32/ESP32-C3/ESP32-C2/ESP32-H2/ESP32-S3 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.)
|
||||
* A USB cable for Power supply and programming
|
||||
```bash
|
||||
idf.py menuconfig
|
||||
```
|
||||
|
||||
See [Development Boards](https://www.espressif.com/en/products/devkits) for more information about it.
|
||||
Navigate to: `Component config` → `Bluetooth` → `Bluedroid Options` → `BT/BLE MAX ACL CONNECTIONS`
|
||||
|
||||
### Build and Flash
|
||||
|
||||
Run `idf.py -p PORT flash monitor` to build, flash and monitor the project.
|
||||
```bash
|
||||
idf.py -p PORT flash monitor
|
||||
```
|
||||
|
||||
(To exit the serial monitor, type ``Ctrl-]``.)
|
||||
(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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user