yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
ESP32 Core Board📖
1. ESP32 Introduction
  • 1. ESP32S3 Overview
  • 2. Environment Setup Introduction
  • 3. Dev Board Introduction
2. ESP-IDF Development Tutorial
1. Before Development
  • 1. Environment Setup (Windows)
  • 2. Environment Setup (Linux)
  • 3. Build and Flash
2. Basic Peripherals
  • 1. LED Control
  • 2. Button Detection
  • 3. Peripheral Interrupts
  • 4. ESP_TIMER
  • 5. GPTIMER
  • 6. Watchdog Timer
  • 7. DMA
  • 8. ADC
  • 9. PWM Breathing LED
  • 10. RGB LED Effects
3. Serial Communication and Storage System
  • 1. Serial UART Communication Experiment
  • 2. I2C_OLED Display Experiment
  • 3. SPI Bus Communication Experiment
  • 4. PSRAM External Memory Experiment
  • 5. Flash Read and Write Experiment
  • 6. USB Emulated Mass Storage Experiment
4. FreeRTOS operating system
  • 1.FreeRTOS Core Concepts Theory
  • 2.Task Creation and Management
  • 3.Queue
  • 4.Binary Semaphore
  • 5.Mutex
  • 6.Event Groups
  • 7.Software Timer
  • 8.Task Scheduler
  • 9.Low Power Mode
  • 10.Deadlock
  • 11.Priority Inversion
5. Network Protocols and Wireless Communication
  • 1. WIFI Network Basics
  • 2. WIFI STA Mode
  • 3. WIFI AP Mode
  • 4. UDP Client Experiment
  • 5. UDP Server Experiment
  • 6. TCP Client Experiment
  • 7. TCP Server Experiment
  • 8. Socket Programming Basics
  • 9. HTTP Client Experiment
  • 10. HTTP Server Experiment
  • 11. MQTT IoT Communication Protocol
  • 12. WIFI OTA Upgrade
  • 13. Bluetooth Fundamentals
  • 14. Bluetooth Slave Mode
  • 15. Bluetooth Master Mode
6. Audio Applications
  • 1.I2S Microphone Recording and U-Disk Playback
  • 2.I2S Audio Playback Experiment
  • 3.Repeater Experiment
7. Xiaozhi AI Voice
  • 1. Burn Xiaozhi Firmware
  • 2. Network and Configuration
  • 3. AI Agent Settings
  • 4. Program Analysis
  • 5. Free Chat
3. Arduino Development Course
1. Before Development
  • 1. Environment Setup
  • 2. Build and Flash
2. Basic Peripherals
  • 1. LED Control
  • 2. Button Detection
  • 3. Peripheral Interrupts
  • 4. ESP_TIMER
  • 5. GPTIMER
  • 6. Watchdog Timer
  • 7. ADC
  • 8. PWM Breathing LED
  • 9. RGB LED Effects
3. Serial Communication and Storage System
  • 1. Serial UART Communication
  • 2. I2C OLED Display
  • 3. SPI Bus Communication
  • 4. Flash Read and Write
  • 5. USB Emulated Mass Storage
4. Network Protocols and Wireless Communication
  • 1. WIFI Network Basics
  • 2. WIFI STA Mode
  • 3. WIFI AP Mode
  • 4. UDP Server Experiment
  • 5. UDP Client Experiment
  • 6. TCP Client Experiment
  • 7. TCP Server Experiment
  • 8. HTTP Client Experiment
  • 9. HTTP Server Experiment
  • 10. MQTT IoT Communication Protocol
  • 11. WIFI OTA Upgrade
  • 12. Bluetooth Fundamentals
  • 13. Bluetooth Slave Mode
  • 14. Bluetooth Master Mode
5. Audio Applications
  • 1.I2S Microphone Recording and U-Disk Playback
  • 2.I2S Audio Playback Experiment
  • 3.Repeater Experiment
4. MicroPython Development Course
1. Before Development
  • 1. Environment Setup
  • 2. Build and Flash
  • 3. Thonny IDE
2. Basic Peripherals
  • 1. LED Control
  • 2. Button Detection
  • 3. Peripheral Interrupts
  • 4. TIMER_IT
  • 5. Watchdog Timer
  • 6. ADC
  • 7. PWM Breathing LED
  • 8. RGB LED Effects
3. Serial Communication and Storage System
  • 1. Serial UART Communication Experiment
  • 2. I2C_OLED Display Experiment
  • 3. SPI Bus Communication Experiment
  • 4. Flash Read and Write Experiment
  • 5. Print Storage
4. Network Protocols and Wireless Communication
  • 1. WIFI Network Basics
  • 2. WIFI STA Mode
  • 3. WIFI AP Mode
  • 4. UDP Client Experiment
  • 5. UDP Server Experiment
  • 6. TCP Client Experiment
  • 7. TCP Server Experiment
  • 8. HTTP Client Experiment
  • 9. HTTP Server Experiment
  • 10. MQTT
  • 11. Bluetooth Fundamentals
  • 12. Bluetooth Slave Mode
  • 13. Bluetooth Master Mode
5. Audio Applications
  • 1. I2S Audio Playback Experiment
  • 2. Repeater Experiment
Download
  • Code
  • Hardware_Info
  • 3D_Model_File
  • Software_Tools
  • VMware
  • VM_File
Download ZIP

Welcome to ESP32 Core Board repository

12. Bluetooth Fundamentals

Bluetooth Fundamentals


Bluetooth Fundamentals1. Bluetooth Overview1.1 What is Bluetooth1.2 Bluetooth Version Evolution1.3 Bluetooth Frequency Bands and Channels1.4 Bluetooth vs WiFi2. Bluetooth Protocol Stack Architecture2.1 Dual-Mode Architecture2.2 Host and Controller Layers2.3 Layer Details3. Classic Bluetooth vs Bluetooth Low Energy3.1 Core Differences3.2 Why BLE Has Low Power Consumption4. BLE Core Concepts4.1 GAP — Generic Access ProfileFour GAP Device RolesAdvertising PDU TypesAdvertising Data Format4.2 ATT — Attribute ProtocolAttribute StructureGATT Operations and Permission Mapping4.3 GATT — Generic Attribute ProfileUUID StructureCCCD — Client Characteristic Configuration Descriptor4.4 Notify vs Indicate Comparison4.5 BLE Connection Parameters5. BLE Advertising and Connection Process5.1 Complete Lifecycle5.2 Advertising Interval and Discovery Latency5.3 BLE 5.0 Extended Advertising6. SM — Security Manager6.1 Pairing Methods6.2 Three Phases of Pairing7. Classic Bluetooth Profiles Introduction8. ESP32-S3 Bluetooth Hardware Features8.1 Bluetooth and WiFi Coexistence — 2.4GHz Resource Arbitration8.2 Coexistence Configuration9. ESP-IDF Bluetooth Protocol Stack Selection9.1 Bluedroid vs NimBLE9.2 Protocol Stack Selection9.3 Bluedroid menuconfig Key Configuration10. Common Troubleshooting


1. Bluetooth Overview

1.1 What is Bluetooth

Bluetooth is a short-range wireless communication technology operating in the 2.4 GHz ISM band (2400~2483.5 MHz) for data exchange between devices over short distances. The name originates from the 10th-century Nordic King Harald Bluetooth (Harald Blåtann), symbolizing the unification of communication between different devices.

Key ParameterDescription
Frequency Band2.4000 ~ 2.4835 GHz (ISM unlicensed band)
ModulationGFSK (Gaussian Frequency Shift Keying), BLE 1M / 2M Physical Layer
Frequency HoppingAdaptive Frequency Hopping (AFH), 1600 hops/s (Classic Bluetooth) / Pseudorandom hopping (BLE)
Communication RangeTypical 10m (Class 2, 0~4 dBm), Max 100m (Class 1, +20 dBm)
Network TopologyPoint-to-Point (Piconet) / Broadcast / Mesh (BLE Mesh)

The Bluetooth name comes from Danish King Harald "Bluetooth" Gormsson, who unified the tribes of the Scandinavian Peninsula - just as Bluetooth technology aims to unify short-range communication protocols between different devices.

1.2 Bluetooth Version Evolution

VersionYearKey FeaturesMax Speed
1.0 / 1.0B1999First commercial version, serious interoperability issues721 kbps
1.1 / 1.22001~2003AFH adaptive frequency hopping, reduced WiFi interference721 kbps
2.0 + EDR2004Enhanced Data Rate (EDR), π/4-DQPSK / 8DPSK modulation2.1 Mbps
2.1 + EDR2007Secure Simple Pairing (SSP), reduced pairing complexity2.1 Mbps
3.0 + HS2009Introduced 802.11 (WiFi) as high-speed channel24 Mbps
4.02010BLE first introduced, low power mode, coin battery can last months1 Mbps (BLE)
4.1 / 4.22013~2014BLE enhancement: LE Secure Connections, Data Length Extension1 Mbps
5.020162M PHY, LE Long Range (Coded PHY), Advertising Extensions2 Mbps
5.12019AoA / AoD direction finding (centimeter-level)2 Mbps
5.22020LE Audio, LC3 codec, Isochronous Channels2 Mbps
5.3 / 5.42021~2023Channel classification enhancement, Periodic advertising enhancement, PAwR2 Mbps

ESP32-S3 supports BLE 5.0 and Classic Bluetooth (BR/EDR), theoretical max speed: ~1400 kbps application layer throughput with BLE 2M PHY.

1.3 Bluetooth Frequency Bands and Channels

The 2.4GHz ISM band is divided into different channel grids based on Bluetooth type:

2.4000 GHz                                                2.4835 GHz
   │                                                          │
   ├─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┤
   │  0  │  1  │  2  │ ... │     │     │     │ ... │ 78  │     │  ← BR/EDR: 79 channels, 1MHz spacing
   ├──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┤
   │00│01│02│... │09│10│11│12│13│14│15│16│17│18│19│...│35│36│39│  ← BLE: 40 channels, 2MHz spacing
   └──┴──┴──┴──┴──┴──┴─┬┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
                        │
            37 data channels (0~36)  ← Adaptive Frequency Hopping
             3 advertising channels (37@2402, 38@2426, 39@2480 MHz)
Bluetooth TypeNumber of ChannelsChannel SpacingHopping Rate
BR/EDR (Classic Bluetooth)791 MHz1600 hop/s
BLE (Bluetooth Low Energy)40 (37 data + 3 advertising)2 MHzAdaptive pseudorandom

BLE places advertising channels deliberately at 2402 / 2426 / 2480 MHz - these three frequencies avoid the most commonly used WiFi channels 1, 6, 11 (2412 / 2437 / 2462 MHz), reducing mutual interference with WiFi at the physical layer.

1.4 Bluetooth vs WiFi

ComparisonBluetooth (BLE 5.0)WiFi (802.11n)
Frequency Band2.4 GHz2.4 GHz / 5 GHz
Channel Bandwidth2 MHz20 / 40 MHz
Max Application Layer Speed~1.4 Mbps~50 Mbps (ESP32-S3)
Power ConsumptionExtremely low (μA level sleep)Relatively high (mA level continuous reception)
Connection Establishment3 ms100 ms ~ several seconds
Typical Communication Range10~100m30~100m
Network TopologyPoint-to-Point / Broadcast / MeshStar (AP + STA)
Use CasesWearables, sensors, audioInternet, video streaming, OTA
IP Protocol StackNone (requires upper layer encapsulation like 6LoWPAN)Native TCP/IP

2. Bluetooth Protocol Stack Architecture

2.1 Dual-Mode Architecture

ESP32-S3 supports dual-mode Bluetooth - the same chip can run Classic Bluetooth (BR/EDR) and Bluetooth Low Energy (BLE) simultaneously, both sharing the RF front-end but with independent protocol stacks:

xxxxxxxxxx
┌────────────────────────────────────────────────────────────┐
│                      Application Layer                     │
├──────────────────────────┬─────────────────────────────────┤
│  ┌──────────────────┐    │    ┌──────────────────┐         │
│  │  Classic Bluetooth Profiles │    │    BLE Profiles  │         │
│  │  SPP / A2DP / HID│    │    │  HID / HRS / BAS │         │
│  └────────┬─────────┘    │    └────────┬─────────┘         │
│           │              │             │                   │
│  ┌────────┴─────────┐    │    ┌────────┴─────────┐         │
│  │   GAP (BR/EDR)   │    │    │   GAP (BLE)      │         │
│  └────────┬─────────┘    │    └────────┬─────────┘         │
│           │              │             │                   │
│  ┌────────┴─────────┐    │    ┌────────┴─────────┐         │
│  │  SDP / RFCOMM    │    │    │  GATT            │         │
│  └────────┬─────────┘    │    │  ATT             │         │
│           │              │    │  SM (Security)   │         │
│  ┌────────┴─────────┐    │    └────────┬─────────┘         │
│  │       L2CAP      │    │    ┌────────┴─────────┐         │
│  └────────┬─────────┘    │    │     L2CAP        │         │
│           │              │    └────────┬─────────┘         │
│           ├──────────────┼─────────────┤                   │
│           │          HCI (Host Controller Interface)       │
│           └──────────────┼─────────────┘                   │
├──────────────────────────┼─────────────────────────────────┤
│  ┌────────┴─────────┐    │    ┌──────────────────┐         │
│  │   Link Manager   │    │    │   Link Layer     │         │
│  │   (LM)           │    │    │   (LL)           │         │  ← Controller
│  ├──────────────────┤    │    ├──────────────────┤         │
│  │      Baseband    │    │    │   Physical Layer │         │
│  ├──────────────────┤    │    │   (PHY)          │         │
│  │   RF / Antenna   │    │    └──────────────────┘         │
│  └──────────────────┘    │                                 │
└──────────────────────────┴─────────────────────────────────┘

2.2 Host and Controller Layers

The Bluetooth protocol stack is divided into two major parts, communicating through HCI (Host Controller Interface):

LayerSub-modulesResponsibilities
HostGAP / GATT / ATT / SM / L2CAP / SDP / RFCOMMProtocol logic, security management, service discovery
HCIUART / USB / SDIO transportStandard communication interface between Host and Controller
ControllerLink Layer / Baseband / PHY / RFRF control, baseband processing, frequency hopping, physical layer modulation/demodulation

On ESP32-S3, Host and Controller run on the same chip, with HCI communicating through an internal virtual interface (not physical UART). On phones and other devices, Host typically runs on the main CPU with Controller as a separate Bluetooth chip.

2.3 Layer Details

LayerFull NameFunctionKey Concepts
PHYPhysical LayerRadio transceiver, GFSK modulation1M / 2M / Coded PHY
LLLink LayerAdvertising, scanning, connection establishment/maintenance, hoppingAdvertising state / Scanning state / Connection state
HCIHost Controller InterfaceCommand/event channel between Host and ControllerCMD / Event / ACL Data
L2CAPLogical Link Control & Adaptation ProtocolData fragmentation/reassembly, protocol multiplexingCID (Channel ID), MTU
SMSecurity ManagerPairing, bonding, encryption key distributionJust Works / Passkey / OOB
ATTAttribute ProtocolRead/write/notify protocol for attribute dataAttribute Handle / UUID / Permissions
GATTGeneric Attribute ProfileData organization modelService → Characteristic → Descriptor
GAPGeneric Access ProfileDevice discovery and connection managementAdvertising / Scanning / Connection / Role definition

3. Classic Bluetooth vs Bluetooth Low Energy

3.1 Core Differences

FeatureClassic Bluetooth (BR/EDR)Bluetooth Low Energy (BLE)
Physical Channels79 × 1MHz40 × 2MHz
Hopping Rate1600 hop/sAdaptive (can change channels per connection event)
Connection EstablishmentScanning + Paging, ~100msAdvertising → Scanning → Connection, ~3ms
Max Application Layer Throughput2.1 Mbps~1.4 Mbps (2M PHY)
Power ConsumptionMedium (~1W active)Extremely low (~0.01~0.5W, coin battery lasts months)
Connection CountMax 7 slaves/piconetNo hard limit (depends on protocol stack implementation)
Data ModelSerial emulation (SPP/RFCOMM)Attribute Protocol (ATT/GATT)
Typical ApplicationsAudio streaming, file transfer, Bluetooth headsetsWearables, sensors, beacons, HID peripherals
Advertising DataLimited (inquiry response)Rich (up to 31 bytes legacy / 1650 bytes extended advertising BLE 5.0)

3.2 Why BLE Has Low Power Consumption

BLE's low power consumption comes from three design choices:

Design ChoiceClassic BluetoothBLEPower Impact
Connection Duty CycleContinuous pollingConnection interval min 7.5ms, max 4s↓ 99% RF transmission time
Packet LengthMax 2745 bitsLegacy 376 bits / Extended 2120 bits↓ Transmission duration
Connection LatencyNoneCan skip N connection events (Slave Latency)↓ Slave response count
AdvertisingContinuousConfigurable interval 20ms ~ 10.24s↓ Advertising RF duty cycle
xxxxxxxxxx
Classic Bluetooth:  ████████████████████████████████████████████  (RF continuously active)
BLE:        ██      ██      ██      ██      ██          (Periodic instant active)
            ↑──────↑ Connection Interval (7.5ms~4s)

BLE's RF is in Sleep mode most of the time, only waking up for a few milliseconds during scheduled connection events for data transmission. This is the fundamental reason why its power consumption is only 1%~5% of Classic Bluetooth.


4. BLE Core Concepts

4.1 GAP — Generic Access Profile

GAP defines how BLE devices are discovered and connected by other devices, and is the entry point for all BLE communication.

Four GAP Device Roles

xxxxxxxxxx
                    Active discovery of others?
                    │
           ┌────────┴────────┐
           ▼                 ▼
        Yes              No
           │                 │
     ┌─────┴─────┐     ┌─────┴─────┐
     ▼           ▼     ▼           ▼
  Advertise?  Don't?  Advertise?  Don't?
     │           │     │           │
     ▼           ▼     ▼           ▼
 Peripheral  Central  Broadcaster  Observer
 (Slave, accepts connections) (Master, initiates connections) (Pure advertiser, non-connectable) (Pure scanner, doesn't connect)
GAP RoleEnglishSends AdvertisingInitiates ConnectionTypical Devices
PeripheralSlave/Peripheral✅❌Sensors, fitness bands, beacons
CentralMaster/Central❌✅Phones, tablets, gateways
BroadcasterPure broadcaster✅❌iBeacon, Eddystone beacons
ObserverPure observer❌❌Passive listeners, packet sniffers

Advertising PDU Types

Advertising PDU TypeMeaningConnectableScannable
ADV_INDGeneral advertising indication✅ Connectable✅ Scannable
ADV_DIRECT_INDDirected advertising (specified target address)✅ Connectable❌
ADV_NONCONN_INDNon-connectable advertising (pure beacon)❌❌
ADV_SCAN_INDScannable advertising (no connection but can receive more data)❌✅

Advertising Data Format

Advertising data is organized in Length-Type-Value (LTV) structure:

xxxxxxxxxx
Advertising packet (max 31 bytes / legacy mode)
  ├─ [L=2] [T=Flags]            [V=0x06]                    ← 3 bytes
  ├─ [L=9] [T=Complete Name]    [V="ESP-IDF"]               ← 11 bytes
  ├─ [L=3] [T=16-bit Service]   [V=0xFFF0]                  ← 5 bytes
  └─ [L=...] Other fields...
AD TypeValueDescription
0x01FlagsDiscoverable mode + BR/EDR support flags
0x02 / 0x03Incomplete / Complete 16-bit Service UUIDsService UUID list
0x08 / 0x09Shortened / Complete Local NameDevice name
0x0ATX Power LevelTransmit power (dBm), used for distance estimation
0xFFManufacturer Specific DataManufacturer-specific data (used by iBeacon)

4.2 ATT — Attribute Protocol

ATT (Attribute Protocol) is the foundational protocol for BLE data transmission. All data on BLE devices is stored in the form of Attributes (Attribute), where each attribute is a data unit with a handle and UUID.

Attribute Structure

xxxxxxxxxx
Attribute Handle   UUID            Permissions    Value
─────────────────────────────────────────────────────────
  0x0010          0x2800          R              0xFFF0       ← Service declaration
  0x0011          0x2803          R              NOTIFY, 0xFFF1  ← Characteristic declaration
  0x0012          0xFFF1          R|N            "Hello"      ← Characteristic value
  0x0013          0x2902          R|W            0x0001       ← CCCD descriptor

Each attribute is defined by four elements:

ElementDescriptionExample
Attribute Handle16-bit unique number, assigned by protocol stack0x0010
Attribute Type (UUID)Type identifier of the attribute0x2800 = GATT Primary Service declaration
PermissionsAccess permissions (read/write/notify/encrypt)Read + Notify
ValueAttribute value (fixed or variable length)"Hello World"

GATT Operations and Permission Mapping

Operation (ATT Layer)GATT MethodDirectionDeclaration Required
Read Request / Responseread_cb()Client ← ServerBLE_GATT_CHR_F_READ
Write Request / Responsewrite_cb()Client → ServerBLE_GATT_CHR_F_WRITE
Write Command (no response)write_cb()Client → ServerBLE_GATT_CHR_F_WRITE_NO_RSP
Handle Value Notificationnotify()Server → ClientBLE_GATT_CHR_F_NOTIFY
Handle Value Indicationindicate()Server → Client (requires confirmation)BLE_GATT_CHR_F_INDICATE

4.3 GATT — Generic Attribute Profile

GATT (Generic Attribute Profile) is built on top of ATT and defines the hierarchical organization model for BLE data:

xxxxxxxxxx
Profile (Specification/Application layer, e.g. Heart Rate Profile)
  │
  └─ Service (UUID 16/32/128-bit)
      │  e.g.: 0x180D = Heart Rate Service (SIG standard)
      │      0xFFF0 = Custom service
      │
      └─ Characteristic (The unit that actually exposes data)
          │  UUID + property declarations (Read/Write/Notify/Indicate)
          │  e.g.: 0x2A37 = Heart Rate Measurement (notification-oriented)
          │      0xFFF1 = Custom notification characteristic
          │
          └─ Descriptor (Metadata for characteristic, optional)
              e.g.: 0x2902 = CCCD (Client Characteristic Configuration Descriptor)
                  0x2901 = Characteristic User Description (human-readable text for characteristic name)

UUID Structure

UUID TypeLengthFormatExample
16-bit UUID (SIG Standard)2 bytes0xXXXX0x180D (Heart Rate Service)
32-bit UUID4 bytes0xXXXXXXXX0x12345678
128-bit UUID (Custom)16 bytesXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX4fafc201-1fb5-459e-8fcc-c5c9c331914b

16-bit UUIDs are standardized identifiers assigned by the Bluetooth SIG Alliance and require purchase authorization. Custom projects can freely use 128-bit UUIDs, or use 16-bit UUIDs in non-reserved segments (such as 0xFFF0~0xFFFE, for development and testing only).

CCCD — Client Characteristic Configuration Descriptor

CCCD (Client Characteristic Configuration Descriptor) UUID = 0x2902, is the most critical descriptor in GATT, controlling the slave's notification/indication enable/disable:

xxxxxxxxxx
Master enables notification:  Master → CCCD (0x2902) → Write 0x0001 → Slave starts pushing Notify
Master disables notification: Master → CCCD (0x2902) → Write 0x0000 → Slave stops pushing
┌────────────────────────────────────────────────────────────────┐
│ CCCD Value      Meaning                                        │
├────────────────────────────────────────────────────────────────┤
│ 0x0000       All notifications/indications disabled            │
│ 0x0001       Enable notification (Notify)                     │
│ 0x0002       Enable indication (Indicate)                      │
└────────────────────────────────────────────────────────────────┘

4.4 Notify vs Indicate Comparison

ComparisonNotifyIndicate
Wait for confirmation after sending❌ No✅ Yes, wait for application layer ACK
Transmission speedFast (no confirmation wait)Slow (wait for ACK each time)
ReliabilityLow (no retransmission on packet loss, except link layer retransmission)High (application layer confirmation + retransmission)
Typical use casesHigh-frequency sensor reporting (heart rate, temperature)Critical commands (alarms, switch control)
xxxxxxxxxx
Notify flow:              Indicate flow:
  Slave ──Data──→ Master       Slave ──Data──→ Master
  (No confirmation, continue sending next)        ←──ACK──
                                Slave sends next only after receiving ACK

4.5 BLE Connection Parameters

After a BLE connection is established, the master can request the slave to modify the following connection parameters:

ParameterRangeDefaultDescription
Connection Interval7.5ms ~ 4s~30msInterval between two connection events, determines throughput and power consumption
Slave Latency0 ~ 4990Number of connection events the slave can skip, reducing slave power consumption
Supervision Timeout100ms ~ 32s~2sHow long without receiving data before determining disconnection
xxxxxxxxxx
Connection interval 7.5ms:  ██ ██ ██ ██ ██ ██ ██ ██  (high throughput, high power)
Connection interval 100ms:  ██     ██     ██     ██   (medium)
Connection interval 1000ms: ██           ██          (low throughput, extremely low power)

Connection interval = 7.5ms × N (N ranges from 6 to 3200). Smaller values mean higher throughput but higher power consumption, larger values mean lower power consumption but increased latency. Sensor applications typically use 100ms~1s, while audio applications require ≤30ms.


5. BLE Advertising and Connection Process

5.1 Complete Lifecycle

xxxxxxxxxx
Peripheral (Slave)                              Central (Master)
─────────────                               ────────────
  [Standby]                                   [Standby]
     │                                            │
     ▼                                            │
  Advertising ◄── ADV_IND ────────── Scan ────────┘
  (Periodic advertising)    Advertising data: Flags + Name + UUID    (Passive or active scanning)
     │
     │           ◄── CONNECT_IND ────── Connect
     │               Connection parameters: Interval + Latency + Timeout
     ▼
  Connected ════════════════════════ Connected ═══
     │                                            │
     │           ◄── Exchange MTU ────            │
     │           ◄── Discover Services ──         │
     │           ◄── Discover Characteristics ──  │
     │           ◄── Enable CCCD ─────            │
     │                                            │
     │           ◄══ Notify/Write ════►           │
     │                                            │
     ▼                                            ▼
  Disconnected                               Disconnected
  (Re-advertise)

5.2 Advertising Interval and Discovery Latency

Smaller advertising interval means faster discovery, but higher power consumption:

Advertising IntervalAverage Discovery LatencyAverage Power ConsumptionUse Case
20ms (fast advertising)~10ms~1.5mAInitial pairing/provisioning stage
100ms~50ms~0.4mANormal connectable state
1s (slow advertising)~500ms~0.05mALong standby, beacons

Android / iOS have scan window limitations - iOS background scanning occurs approximately once every 1~2 seconds, so the advertising interval should not exceed 500ms, otherwise the phone may take a long time to discover the device. Some systems also require the advertising data to contain specific Service UUIDs for the App to filter in the background.

5.3 BLE 5.0 Extended Advertising

BLE 5.0 introduced extended advertising mechanism, significantly increasing advertising data capacity from 31 bytes:

​x
Legacy advertising (BLE 4.x):
  3 advertising channels, max 31 bytes payload per packet

Extended advertising (BLE 5.0):
  Supports carrying advertising data on 37 data channels (not on advertising channels),
  can chain-send multiple packets (max 1650 bytes payload)
  
  Applications: Indoor navigation, asset tracking, electronic price tag batch updates

6. SM — Security Manager

6.1 Pairing Methods

BLE Security Manager (SM) is responsible for pairing and bonding between devices:

Pairing MethodSecurityUser InteractionUse Cases
Just WorksLow (no MITM protection)No interaction requiredSensors without UI (thermometer, humidity meter)
Passkey EntryMediumOne side displays 6-digit number, other side entersKeyboard connecting to phone, phone connecting to device with screen
Numeric ComparisonHigh (LE Secure Connections)Both sides display 6-digit number, user confirms matchRecommended for BLE 4.2+, phone connecting to peripherals
Out of Band (OOB)HighestKey transferred through external channel like NFC / QR codeEnterprise security, access control systems

6.2 Three Phases of Pairing

xxxxxxxxxx
Phase 1: Feature Exchange
  Both sides exchange IO Capabilities (display/keyboard availability), security requirements
    → Negotiate pairing method (Just Works / Passkey / OOB)

Phase 2: Key Generation
  STK (Short Term Key, legacy pairing, BLE 4.0/4.1)
  or LTK (Long Term Key, LE Secure Connections, BLE 4.2+)
    → Establish encrypted link

Phase 3: Key Distribution
  LTK + IRK (Identity Resolving Key) + CSRK (Connection Signature Resolving Key)
    → Bonding complete, subsequent reconnections automatically encrypted (no need to pair again)

Pairing ≠ Bonding. Pairing is a one-time encryption process, bonding stores keys in NVS flash, subsequent connections automatically encrypted - this is what "paired devices list" means in Flutter / Android Apps.


7. Classic Bluetooth Profiles Introduction

While BLE is the mainstream for IoT, ESP32-S3 also supports Classic Bluetooth, which can be used for the following classic Profiles:

ProfileFull NameTypical ApplicationsESP32-S3 Support
SPPSerial Port ProfileWireless serial passthrough - simulating UART to replace wired serial✅ Most commonly used
A2DPAdvanced Audio Distribution ProfileBluetooth audio streaming (headphones, speakers)✅
AVRCPAudio/Video Remote Control ProfileBluetooth remote control (prev/next track, volume)✅
HIDHuman Interface DeviceBluetooth keyboard/mouse/gamepad✅
HFPHands-Free ProfileIn-car hands-free calling✅

SPP is the most commonly used Profile in ESP32-S3 Classic Bluetooth development - it establishes a virtual serial port between two devices through RFCOMM serial emulation protocol, presenting as byte stream sending/receiving to upper layer code, similar to UART but without physical wiring. Suitable for wireless debugging, passthrough control, data collection and other scenarios.


8. ESP32-S3 Bluetooth Hardware Features

FeatureParameters
Bluetooth StandardsBLE 5.0 + BR/EDR (Classic)
Operating Frequency Band2.4 GHz ISM
Max Transmit Power+20 dBm (Class 1)
Max Receive Sensitivity-97 dBm (BLE 1M)
BLE Max Throughput~1.4 Mbps (2M PHY, ~700 kbps application layer)
Classic Bluetooth Max Speed2.1 Mbps (EDR)
AntennaOn-board PCB ceramic antenna / IPEX external antenna
Protocol StackBluedroid (full) / NimBLE (BLE only)

8.1 Bluetooth and WiFi Coexistence — 2.4GHz Resource Arbitration

Bluetooth and WiFi share the same antenna and 2.4GHz RF front-end - both cannot transmit simultaneously. ESP32-S3 resolves conflicts through Time Division Multiplexing (TDM):

xxxxxxxxxx
WiFi:   ████████░░░░░░░░░░████████░░░░░░░░░░
BLE:    ░░░░░░░░████░░░░░░░░░░░░░░████████░░
        ├──────────┼──────────┼──────────┼──
        Time Slot (arbitrated by coexistence module)
Coexistence StrategyDescription
ESP_COEX_PREFER_WIFIWiFi priority, Bluetooth actively yields when conflicts occur → BLE throughput decreases but WiFi runs smoothly
ESP_COEX_PREFER_BTBluetooth priority, WiFi TCP ACK may be delayed → BLE connection stable but WiFi may stutter
ESP_COEX_PREFER_BALANCEBalanced mode, dynamic arbitration

In practice, if BLE connection interval ≥30ms (medium/low throughput scenarios), WiFi and BLE can "peacefully coexist" - BLE occupies scheduled connection event slots (a few milliseconds), WiFi freely uses RF for the rest of the time. At high-frequency BLE (approaching max throughput ~700kbps) or dense WiFi transmission (TCP streaming, OTA), they will interfere with each other, requiring tuning coexistence strategy or staggering usage periods.

8.2 Coexistence Configuration

Configure coexistence strategy in menuconfig:

xxxxxxxxxx
Component config → Bluetooth → Bluedroid → Bluetooth Coexistence

Or adjust at runtime in code:

xxxxxxxxxx
// Set BT/WiFi coexistence mode to balance
esp_coex_set_preferred_mode(ESP_COEX_PREFER_BALANCE);

9. ESP-IDF Bluetooth Protocol Stack Selection

9.1 Bluedroid vs NimBLE

ESP-IDF provides two Bluetooth Host protocol stacks:

Comparison DimensionBluedroidNimBLE
Bluetooth TypeDual-mode (BR/EDR + BLE)BLE only
ROM Usage~512 KB~32 KB
RAM Usage~120 KB (minimum)~4.5 KB
Feature CompletenessFull: SPP, A2DP, HID, GATT full functionalityLite: GAP + GATT only, BLE 5.0 main features
Configuration ComplexityHigh, many menuconfig optionsLow, initialization ~10 lines of code
Use CasesRequires Classic Bluetooth (audio, SPP passthrough) or full BLE featuresBLE only, code size sensitive scenarios
ESP-IDF Default✅ Enabled by defaultRequires manual selection

9.2 Protocol Stack Selection

xxxxxxxxxx
Need Classic Bluetooth (SPP/A2DP/HID)?  ──Yes──→ Bluedroid (only choice)
       │
       No (BLE only)
       │
       ├── Need full BLE features (Mesh, Extended Advertising, LE Audio)?
       │      ──Yes──→ Bluedroid
       │
       └── Lite BLE peripheral/central role, code size/RAM sensitive?
              ──Yes──→ NimBLE

Subsequent BLE slave and master experiments in this project use NimBLE protocol stack. For IoT teaching scenarios requiring only BLE peripheral/central roles, NimBLE's code size and memory overhead is much smaller than Bluedroid, making it a more suitable choice.

9.3 Bluedroid menuconfig Key Configuration

Required configuration when using Bluedroid:

xxxxxxxxxx
Component config → Bluetooth
  ├─ [*] Bluetooth
  ├─ Bluetooth Host → Bluedroid
  └─ Bluedroid Options
      ├─ [*] Include GATT
      ├─ [ ] Include Classic Bluetooth (as needed)
      └─ [*] Enable BLE 5.0 features (as needed)

When using NimBLE:

xxxxxxxxxx
Component config → Bluetooth
  ├─ [*] Bluetooth
  ├─ Bluetooth Host → NimBLE
  └─ Bluetooth Controller → BLE Only

10. Common Troubleshooting

SymptomCauseSolution
Crash after Bluetooth initializationNVS not initialized or partition corruptedAdd try-erase logic to nvs_flash_init(); or erase entire flash via IDE
Advertising start failed rc=12BLE controller not enabledEnsure CONFIG_BT_ENABLED=y in menuconfig, controller mode = BLE Only
Phone cannot scan ESP32-S3Advertising interval too large / no Service UUIDReduce advertising interval to ≤100ms; confirm advertising data contains Flags + Name
Disconnects immediately after connection (0~2s)Incompatible connection parameters / too farMove closer (≤5m); confirm no strong WiFi co-channel interference
WiFi frequent disconnections during BLE connection2.4G RF conflictAdjust coexistence strategy to ESP_COEX_PREFER_WIFI; or increase BLE connection interval to ≥100ms
iOS background scan cannot find deviceiOS doesn't notify App about advertising without Service UUIDAdd specific Service UUID to advertising data (iOS App needs to declare corresponding background mode)
Cannot find custom service in GATT discoveryNimBLE service table definition errorConfirm ble_gatt_svc_def array ends with {0,}, UUID format correct
Notify cannot be sentCCCD not enabled / invalid conn_handleConfirm master has written CCCD = 0x0001; confirm conn_handle matches current connection
ATT write not permitted logWrote to characteristic value handle without Write permissionConfirm write operation targets CCCD descriptor handle, not characteristic value handle; or add Write flag to characteristic declaration
Bluetooth interrupted during OTALower layer restart during OTA causes Bluetooth driver resetAfter OTA completes, re-run nvs_flash_init() + nimble_port_init()
WIFI OTA Upgrade
Bluetooth Slave Mode

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文