Files
2026-07-13 13:04:25 +08:00

211 lines
5.8 KiB
Markdown

<!-- SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
# Quick Start: ESP-BLE-UART Console
This guide shows how to use the ESP-BLE-UART Console for quick manual testing.
The Console is useful when you want to type data into a BLE UART device and inspect the bytes or text sent back by the device.
## Prerequisites
1. A host machine with Bluetooth access.
2. Python environment prepared. You can reuse the ESP-IDF Python environment, or use your own Python virtual environment. If you reuse the ESP-IDF environment, export it first and then install the ESP-BLE-UART Bridge dependencies:
```bash
cd $IDF_PATH
. ./export.sh
cd tools/ble/ble_uart_bridge
python -m pip install -r requirements.txt
```
On Windows, run `export.bat` or `export.ps1` from the ESP-IDF root directory before installing `requirements.txt`. If you use your own Python virtual environment instead, activate it before installing `requirements.txt`.
3. A BLE device advertising the BLE UART service. By default the tool scans for the de-facto BLE UART-over-GATT UUIDs (`6E400001-…` / `…02` / `…03`). For a known-compatible test target, build and flash the [ESP-BLE-UART example](../../../../examples/bluetooth/ble_uart_service), which acts as an Echo Server by echoing RX writes back through TX notifications.
## Find a device
```bash
cd tools/ble/ble_uart_bridge
python main.py list-devices
```
Example output may include a device address and name:
```text
Found: AA:BB:CC:DD:EE:FF, with name BleUart-XXXX, rssi=-42
```
Use the printed device identifier as `DEVICE_ID`. On macOS, this identifier is a CoreBluetooth UUID and is different from the device MAC address.
## Check the connection
```bash
python main.py connection-check AA:BB:CC:DD:EE:FF
```
This command connects to the device, discovers the BLE UART service and characteristics, then disconnects.
## Start the Console
```bash
python main.py console AA:BB:CC:DD:EE:FF
```
The console connects before opening the UI. If connection fails, the UI is not started.
Inside the UI:
- Type a line and press Enter to send it.
- Received data is shown with an `[RX]` prefix.
- Transmitted data is shown with a `[TX]` prefix.
- Connection information is shown with an `[INFO]` prefix.
- Press `Ctrl+C` or `Ctrl+D` to quit.
- Press `Ctrl+L` to clear the log.
## Text mode
Text mode is the default. It UTF-8 encodes input and appends a line terminator.
```bash
python main.py console AA:BB:CC:DD:EE:FF
```
By default, each submitted line is sent with `\n`.
### Choose a line terminator
Use `--terminator` for protocols that expect different line endings:
```bash
python main.py console AA:BB:CC:DD:EE:FF --terminator lf
python main.py console AA:BB:CC:DD:EE:FF --terminator crlf
python main.py console AA:BB:CC:DD:EE:FF --terminator none
```
Supported values:
| Value | Bytes appended |
| --- | --- |
| `lf` | `\n` |
| `crlf` | `\r\n` |
| `none` | nothing |
Use `crlf` for many AT-style command interpreters. Use `none` if the device expects the exact bytes you type.
## Hex mode
Hex mode sends raw bytes parsed from hexadecimal input and displays received bytes as hexadecimal.
```bash
python main.py console AA:BB:CC:DD:EE:FF --encoding hex
```
Inside the UI, enter bytes as hex:
```text
01 02 03 0a
```
The console sends:
```text
0x01 0x02 0x03 0x0a
```
Notes:
- Hex input is parsed with Python `bytes.fromhex()`.
- Spaces are allowed.
- In hex mode, `--terminator` is ignored because the input already represents exact bytes.
## Write-with-response
By default the console writes without response. Use `--with-response` if the target characteristic or debugging workflow should use BLE write-with-response:
```bash
python main.py console AA:BB:CC:DD:EE:FF --with-response
```
This affects BLE GATT write behavior only. It does not create an application-level request/response protocol. For application-level request/response, use Daemon mode instead.
## Common examples
### ESP-BLE-UART Echo Server
Use the [ESP-BLE-UART example](../../../../examples/bluetooth/ble_uart_service) when you want a ready-made ESP-IDF Echo Server for testing ESP-BLE-UART Bridge Console. After building, flashing, and pairing with the example, open Console and type any text; the example should echo the same data back as `[RX]` output.
```bash
# List nearby BLE devices and use the printed device ID as DEVICE_ID
python main.py list-devices
python main.py console AA:BB:CC:DD:EE:FF
```
### ESP-IDF console-style command
```bash
python main.py console AA:BB:CC:DD:EE:FF --terminator lf
```
Then type:
```text
help
```
### AT-style command
```bash
python main.py console AA:BB:CC:DD:EE:FF --terminator crlf
```
Then type:
```text
AT
```
### Binary smoke test
```bash
python main.py console AA:BB:CC:DD:EE:FF --encoding hex --with-response
```
Then type:
```text
aa 55 01 00
```
## Troubleshooting
### No devices found
- Confirm the host Bluetooth adapter is available.
- Confirm the device is advertising the BLE UART service UUID.
- Move the device closer to the host.
### Connection fails
- Make sure no other host is already connected to the BLE device.
- Restart advertising on the device.
- Run `connection-check` before opening the console.
- On Linux, reset the system Bluetooth service if connections keep failing,
pairing gets stuck, or service discovery cannot find the BLE UART service or
characteristics:
```bash
sudo systemctl stop bluetooth
sudo systemctl start bluetooth
```
### Text looks broken
- The console decodes RX bytes as UTF-8 in text mode.
- Use `--encoding hex` if the device sends binary data.
### Device does not react to input
- Check the required line ending. Try `--terminator crlf` or `--terminator none`.
- Check whether the device requires write-with-response. Try `--with-response`.