ESP32 Bluetooth Guide: Classic Bluetooth vs BLE with Arduino Examples
Sep 18th, 2026

ESP32 Bluetooth is one of the board’s most useful built-in wireless features, allowing it to exchange data directly with phones, computers, sensors, and other nearby devices without requiring a Wi-Fi router.
On compatible ESP32 boards, the Bluetooth radio and protocol support are already built into the microcontroller, so no external HC-05 or HM-10 module is required.

There is one important detail, however: not every ESP32 supports the same type of Bluetooth. This guide explains Bluetooth Classic vs BLE, then builds two practical Arduino projects: a Bluetooth Classic serial terminal and a BLE connection that can send and receive data.
Does Your ESP32 Board Support Bluetooth?
The name “ESP32” now describes a family of microcontrollers rather than one chip, so ESP32 Bluetooth capabilities can differ considerably between models.
The original ESP32 supports both Bluetooth Classic and BLE. Current chips such as the ESP32-C3, ESP32-S3, ESP32-C6, and ESP32-H2 support BLE but not Bluetooth Classic. The ESP32-S2 has no Bluetooth radio. (Espressif Systems)
The following table summarizes several common ESP32 families and is not a complete list.
| ESP32 family | Bluetooth Classic | BLE | Examples in this guide |
|---|---|---|---|
| ESP32 | GPIO, PWM | Yes | Classic + BLE |
| ESP32-C3 | GPIO, PWM, peripheral routing | No | BLE |
| ESP32-S3 | GPIO, PWM, peripheral routing | No | BLE |
| ESP32-C6 | GPIO, PWM, peripheral routing | No | BLE |
| ESP32-H2 | GPIO, USB D− | No | BLE |
| ESP32-S2 | GPIO, USB D+ | No | None |
This distinction explains a common ESP32 BluetoothSerial compilation problem.A sketch using BluetoothSerial.h may work perfectly on an original ESP32 but cannot provide Bluetooth Classic SPP on an ESP32-C3 or ESP32-S3 because those chips do not contain that capability. Espressif's current Arduino documentation specifically identifies SPP as available only for the ESP32 chip. (Espressif Systems)
ESP32 Bluetooth Classic vs BLE
What Is Bluetooth Classic?
ESP32 Bluetooth Classic, also called BR/EDR, is designed for comparatively continuous data exchange, including applications such as audio and serial-style communication.
For ESP32 projects, one particularly convenient feature is the Serial Port Profile (SPP). It creates a wireless connection that behaves much like a conventional serial link.
What Is Bluetooth Low Energy?
ESP32 BLE takes a different approach, using efficient exchanges of relatively small amounts of data that make it well suited to sensors, wearables, controls, and battery-powered IoT devices.
Instead of simply exposing a serial stream, BLE commonly organizes data through services and characteristics.
| Feature | Bluetooth Classic | BLE |
|---|---|---|
| ESP32 support | Original ESP32 | ESP32, C3, S3, C6, H2 |
| Communication model | Profiles such as SPP | GATT services/characteristics |
| Data pattern | More continuous | Short/intermittent transfers |
| Power consumption | Generally higher | Designed for low power |
| Smartphone compatibility | Platform/profile dependent | Broad modern support |
| Arduino library | BluetoothSerial | BLE library in ESP32 core |
| Typical application | Wireless serial link | Sensors, controls, IoT |
| Best use | Continuous serial-style data | Structured, low-power data |
When choosing Bluetooth Classic vs BLE, use Classic when a wireless serial connection is the simplest solution. Choose BLE when building a sensor, wearable, phone-connected controller, or device where power consumption matters.
How ESP32 BLE Communication Works
A BLE peripheral begins by advertising. These short packets tell nearby devices that it exists. A central device, such as a smartphone, scans for advertisements and can initiate a connection.
In ESP32 BLE, central and peripheral describe connection roles and should not be confused with GATT client and GATT server, which describe how application data is provided and accessed.A peripheral is commonly a GATT server, but these concepts are not interchangeable.
Inside a GATT server, data is organized into services. Services contain characteristics, and UUIDs identify them.
A characteristic can support operations such as:
• Read: the client requests its current value.
• Write: the client sends a value.
• Notify: the server pushes a changed value to a subscribed client.
This service-and-characteristic structure makes ESP32 BLE communication especially flexible for IoT devices.
What You Need
For these examples, use a compatible ESP32 development board, Arduino IDE, the Espressif ESP32 board package, a data-capable USB cable, and a phone or computer.
The ESP32 Bluetooth Classic example requires an original ESP32 plus a Bluetooth serial terminal on Android or Windows, while the ESP32 BLE example can be tested with nRF Connect.
At the time of writing, Espressif's current documentation for ESP32 BLE Arduino development covers Arduino-ESP32 3.3.11, based on ESP-IDF 5.5. The examples below follow the APIs documented for that core. For reproducible testing, an ESP32-DevKitC-class original ESP32 is suitable for both examples; Espressif lists the ESP32-DevKitC-1 as supporting Bluetooth BR/EDR and BLE. (Espressif Systems)
ESP32 Bluetooth Classic Arduino Example: Serial Terminal
How the Project Works
This ESP32 Bluetooth Serial project creates the following bridge:
Phone or PC ↔ Bluetooth Classic ↔ ESP32 ↔ USB Serial Monitor

Upload this sketch to an original ESP32:
To test this ESP32 Bluetooth Arduino example, select the correct original ESP32 board in Arduino IDE, upload the sketch, and open Serial Monitor at 115200 baud.
On Android or Windows, search for ESP32-Bluetooth, pair with it, and open it using a Bluetooth serial terminal. Text entered on the remote device should appear in Serial Monitor, while data entered in Serial Monitor is transmitted in the opposite direction.
In this ESP32 BluetoothSerial example, SerialBT.begin() starts the Bluetooth SPP service, while the two checks inside loop() move incoming bytes between USB serial and Bluetooth. The two checks inside loop() simply move incoming bytes between USB serial and Bluetooth.
This example is only for the original ESP32. It should be tested with Android or Windows and should not be treated as a general iPhone-compatible Bluetooth serial solution. Espressif's official Arduino example uses the same SPP approach. (Espressif Systems)
ESP32 BLE Arduino Example: Send and Receive Data with a Phone
In this ESP32 BLE example, we create a UART-style service with two characteristics:
Phone → RX/write characteristic → ESP32
ESP32 → TX/notify characteristic → Phone

For this ESP32 BLE Arduino project, use the BLE library already included with the current Arduino-ESP32 core and do not install the old ESP32 BLE Arduino library separately.Do not install the old ESP32 BLE Arduino library separately. Espressif's current core provides its own Arduino-style BLE API and official BLE UART example. (Espressif Systems)
After uploading, open nRF Connect for Mobile and scan for ESP32-BLE. Connect to it and locate the service UUID shown in the sketch.
During ESP32 BLE communication, writing data to the RX characteristic sends it to the ESP32 and displays it in Serial Monitor, while subscribing to TX notifications allows the phone to receive data from the ESP32.
The service and characteristic structure follows the UART-style BLE pattern documented by Espressif. (Espressif Systems)
ESP32 Bluetooth Range, Power Consumption, and Wi-Fi Coexistence
ESP32 Bluetooth range is not a fixed specification in practical projects because antenna design, board orientation, walls, metal enclosures, interference, transmit power, and the other device's radio can all affect it.Antenna design, board orientation, walls, metal enclosures, interference, transmit power, and the other device's radio all affect it.
BLE power consumption also depends heavily on configuration. Advertising frequency, connection interval, transmit power, processor activity, and sleep strategy can matter more than simply choosing BLE.
When measuring ESP32 BLE power consumption, remember that development boards also consume energy through voltage regulators, USB-to-serial hardware, and LEDs, so complete-board measurements should not be confused with radio consumption alone.
Wi-Fi and Bluetooth can operate on the same ESP32, but both use the 2.4 GHz radio environment. Heavy simultaneous traffic can therefore affect latency and throughput. For more details, see Espressif’s Wi-Fi and Bluetooth coexistence documentation.
Common ESP32 Bluetooth Problems
• BluetoothSerial.h does not compile: Bluetooth Classic SPP is available only on the original ESP32. Use BLE on BLE-capable variants such as the ESP32-C3, S3, C6, and H2. The ESP32-S2 does not support Bluetooth.
• Classic device does not appear in a BLE scanner: Bluetooth Classic and BLE use different discovery methods.
• BLE device does not appear in phone Bluetooth settings: Use a BLE scanner such as nRF Connect.
• ESP32 cannot connect: Check that the correct ESP32 board is selected in Arduino IDE.
• BLE service does not work: Verify that service and characteristic UUIDs match.
• BLE disappears after disconnecting: Restart advertising after the client disconnects.
• Phone cannot find BLE devices: Check Bluetooth and scanning permissions.
• BLE code does not compile: Make sure the code uses the current Arduino-ESP32 BLE API.
• Wi-Fi and Bluetooth are unstable: Check power quality and reduce simultaneous wireless activity.
• Previously paired device cannot reconnect: Remove the old pairing on both devices and pair them again.
Tip: Always identify the ESP32 chip first. Use the original ESP32 for ESP32 Bluetooth Classic SPP, and use ESP32 BLE for most newer ESP32 variants.
Conclusion
ESP32 Bluetooth provides a convenient way to exchange data with phones, computers, sensors, and nearby devices without adding a separate wireless module. The original ESP32 supports both Bluetooth Classic and BLE, while many newer ESP32 variants focus on BLE.
Bluetooth Classic SPP is well suited to continuous serial-style communication. ESP32 BLE provides a more structured approach through services and characteristics and is generally the better choice for sensors, mobile applications, controls, and low-power projects.
Before starting a project, identify the exact ESP32 chip, compare Bluetooth Classic vs BLE, choose the appropriate Bluetooth mode, and confirm that the library and receiving device support it.The Bluetooth serial terminal and BLE UART-style examples in this guide provide practical starting points for building more advanced wireless projects.
Frequently Asked Questions
Does every ESP32 board support Bluetooth Classic?
No. Bluetooth Classic SPP is available on the original ESP32, while many newer ESP32 variants support BLE only. The ESP32-S2 does not support Bluetooth. Always check the exact chip model before selecting a library or example.
Do I need an HC-05 or HM-10 module with an ESP32?
Usually not. If the selected ESP32 supports the Bluetooth mode required by your project, the radio and protocol support are already built in. An external module is only necessary when the board lacks the required Bluetooth capability or the project has special hardware requirements.
Should I use ESP32 Bluetooth Classic or ESP32 BLE?
Use Bluetooth Classic when you need a straightforward, continuous serial-style connection, particularly with Android or Windows devices. Choose ESP32 BLE for sensors, controls, phone applications, structured data, or projects where lower power consumption is important.
Can ESP32 Bluetooth connect to an iPhone?
Yes, but ESP32 BLE is generally the better option for iPhone connections because iOS supports BLE communication through GATT services and characteristics.Generic Bluetooth Classic SPP connections are not normally available to standard iPhone applications.
Why does my ESP32 BLE device not appear in the phone’s Bluetooth settings?
Many ESP32 BLE peripherals do not appear in a phone’s normal Bluetooth settings, so use a BLE scanner application such as nRF Connect to find and connect to the ESP32. Use a BLE scanner application such as nRF Connect to find and connect to the ESP32. Also confirm that advertising has started and restarts after a disconnection.
Can the ESP32 use Wi-Fi and Bluetooth at the same time?
Yes. However, Wi-Fi and Bluetooth share the 2.4 GHz radio environment. Heavy simultaneous traffic, interference, or an unstable power supply can affect latency and connection reliability, so the final project should be tested under realistic conditions.
What is the typical ESP32 Bluetooth range?
There is no single guaranteed ESP32 Bluetooth range. It depends on the ESP32 board and antenna, transmit power, obstacles, interference, enclosure material, and the other device.Range should therefore be measured in the environment where the project will operate.
