How to use ESP-AT Classic Bluetooth


Classic bluetooth is Disabled by default. If you want to use classic bluetooth commands, you need to enable BT commands in menuconfig.

Component config -> AT -> [*] AT bt command support.

Command Description


There are two initialization-related commands. Firstly, initializing the bluetooth protocol stack, and then initializing the profile, such as:

AT+BTINIT=1      // init BT statck
AT+BTSPPINIT=2   // init SPP profile, the role is slave

Basic parameters setting

After initialization, there are some basic parameter setting commands that may be need to be invoked.

1. device name

The default device name is esp32, If use command to set the device name, it will be stored in NVS.


2. scan mode

Sets whether it can be discovered and connected.

AT+BTSCANMODE=2    // both discoverable and connectable

3. security parameters

ESP32 supports both Simple pair and Legacy pair by default.

Using this command, you can set the IO capability, PIN type and PIN code of the device.

AT+BTSECPARAM=3,1,"9527"  // NO input NO output, fixed PIN code, 9527

If the PIN type is variable, the PIN code will be ignored. If use the Simple pair encryption, the PIn code will be ignored.



In this case, generally PC is master and ESP32 is slave. ESP32 needs to do this before the connection is established:

  • initialization

AT+BTINIT=1     // init BT stack
AT+BTSPPINIT=2  // init spp profile as shave
AT+BTSPPSTART   // if role is client, this command is not required
  • parameters setting

AT+BTNAME="EXAMPLE"       // set device name
AT+BTSCANMODE=2           // discoverable and connectable
AT+BTSECPARAM=3,1,"9527"  // NoInputNoOutput, fixed PIN code

At this point, the PC should be able to find the bluetooth device with name “EXAMPLE”. If the PC initiates a connection and the connection succeed, ESP32 will print this log:

+BTSPPCONN:<conn index>,<remote_addr>

ESP32 can also initiate connections, before initiating a connection, please scan the surrounding devices at first:

// General inquiry mode, inquiry duration: 10, inquiry response: 10

The scanning results are as follows:


Initiate the connection using the connection command:

// conn_index: 0, sec_mode: 0 -> No security, remote_address

After the connection is established, the data can be sent and received:

// conn_index: 0, data length: 30


If you want to enter passthrough mode:


If you want to exit passthrough mode, you can input +++.


If you use two ESP32 boards connected to each other,The process is basically the same as described above, The only difference is the initialization. the client initialization is as follow:

AT+BTINIT=1     // init BT stack
AT+BTSPPINIT=1  // init spp profile as master

All other steps are the same as described above.