3.3 KiB
ESP-BLE-UART Profile Compatibility
ESP-BLE-UART Bridge works with BLE GATT profiles that provide a UART-like data path:
- one characteristic that the host writes to
- one characteristic that the device uses to notify data back to the host
The default profile matches the widely used BLE UART-over-GATT UUID set (service 6E400001-…, RX/TX characteristics), but that layout is not the only possible BLE UART-style profile.
Default BLE UART-compatible profile
The built-in default profile uses these UUIDs:
| Role | UUID |
|---|---|
| Service | 6E400001-B5A3-F393-E0A9-E50E24DCCA9E |
| RX, host to device | 6E400002-B5A3-F393-E0A9-E50E24DCCA9E |
| TX, device to host | 6E400003-B5A3-F393-E0A9-E50E24DCCA9E |
Use the default profile when the device advertises a service using those UUIDs.
ESP-IDF BLE SPP examples
ESP-IDF includes BLE SPP examples that implement Espressif BLE UART-like vendor-specific GATT profiles:
examples/bluetooth/nimble/ble_spp/spp_serverexamples/bluetooth/nimble/ble_spp/spp_clientexamples/bluetooth/bluedroid/ble/ble_spp_serverexamples/bluetooth/bluedroid/ble/ble_spp_client
BLE SPP over BLE is not a Bluetooth SIG standard profile. It is a vendor-specific GATT design that emulates a serial link, similar in purpose to the default BLE UART layout above.
ESP-IDF BLE SPP examples may define more characteristics than ESP-BLE-UART Bridge needs, such as data, command, and status characteristics. To use ESP-BLE-UART Bridge with such a profile, map only the UART-like data path into BLEUARTProfile.
Mapping an ESP-IDF BLE SPP profile
Map the profile fields as follows:
BLEUARTProfile field |
Map to |
|---|---|
service_uuid |
BLE SPP service UUID |
rx_char_uuid |
Characteristic that the host writes to, such as the SPP data receive characteristic |
tx_char_uuid |
Characteristic that the device notifies from, such as the SPP data notify characteristic |
Example:
from src.core import BLEUARTBridge
from src.core import BLEUARTProfile
profile = BLEUARTProfile(
service_uuid="00000000-0000-0000-0000-00000000ABF0",
rx_char_uuid="00000000-0000-0000-0000-00000000ABF1",
tx_char_uuid="00000000-0000-0000-0000-00000000ABF2",
)
bridge = BLEUARTBridge("AA:BB:CC:DD:EE:FF", profile=profile)
Replace the UUIDs with the actual UUIDs used by the device firmware.
What ESP-BLE-UART Bridge does not map
ESP-BLE-UART Bridge is intentionally focused on the data path. It does not automatically map extra control-plane characteristics that a profile may expose, such as:
- command characteristics
- status characteristics
- custom configuration characteristics
- profile-specific flow-control semantics
If an application needs those characteristics, implement that logic in a custom script on top of bleak, or extend ESP-BLE-UART Bridge for that specific profile.
Classic Bluetooth SPP is different
Classic Bluetooth SPP examples, such as examples/bluetooth/bluedroid/classic_bt/bt_spp_*, are not BLE GATT profiles.
They use Classic Bluetooth SPP rather than BLE GATT characteristics, so they are not compatible with ESP-BLE-UART Bridge.