The objective of this esp32 tutorial is to explain how to get started with the BluetoothSerial ESP32 library, in order to send data to a emulated Serial connection, operating over Bluetooth classic. The tests of this ESP32 tutorial were performed using a DFRobot’s ESP-WROOM-32 device integrated in a ESP32 development board.
Introduction
The objective of this esp32 tutorial is to explain how to get started with the BluetoothSerial ESP32 library, in order to send data to a emulated Serial connection, operating over Bluetooth classic.
At the time of writing, the mentioned library had just been added to the ESP32 Arduino core. So, you may need to update to the latest version of the Arduino core.
One important thing to mentioned is that this is a very high level library that will hide from us most of the Bluetooth implementation details, which is why the code we are going to develop is very simple and small.
In terms of API, it will be very similar to the regular Serial communication functions we use on the Arduino environment.
Note that the example provided here is based on the library example available on the Arduino core, which I encourage you to try.
The tests of this ESP32 tutorial were performed using a DFRobot’s ESP-WROOM-32 device integrated in a ESP32 FireBeetle board.
The code
The first thing we need to do is including the BluetoothSerial.h library, which will expose the functionalities needed to work with serial over Bluetooth.
#include "BluetoothSerial.h"
Next we will need an object of class BluetoothSerial, which is the one we will use to initialize the Bluetooth stack on the ESP32 and to send the data.
You can check the implementation file for this class here. Under the hood, this class makes use of IDF’s Bluetooth classic API, which we have been covering in previous posts.
BluetoothSerial SerialBT;
Now that we have our Bluetooth object, we need to initialize the Bluetooth stack, so other devices can see our ESP32 and pair with it, before initializing the serial communication.
To do so, we simply need to call the begin method of the BluetoothSerial object, which will handle all of the lower level initialization for us.
This method receives as input a string with the name we want to assign to the device, which will be seen by other Bluetooth enabled devices that will discover it.
As output, it returns a Boolean value indicating if the initialization was successful or not. For now we will not look into that value, but for a robust code you should always include error checks.
We will do the mentioned initialization in the Arduino Setup function.
void setup() {
SerialBT.begin("ESP32");
}
Now that we have initialized the device, we will periodically send a “Hello World” message on the Arduino main loop.
As can be seen in the header file of the BluetoothSerial class, it inherits from the Stream class. The Stream class inherits from the Print class, which means that we can use the println method to write to the Bluetooth serial port.
SerialBT.println("Hello World");
Between each iteration of the main loop, we will do a small 1 second delay. The full source code can be seen below.
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
void setup() {
SerialBT.begin("ESP32");
}
void loop() {
SerialBT.println("Hello World");
delay(1000);
}
Testing the code
To test the code, simply compile it and upload it to your ESP32 using the Arduino IDE. Once it finishes, go to your computer’s Bluetooth devices and start a scan. The ESP32 should get detected, as shown in figure 1.
Figure 1 – ESP32 detected as Bluetooth device on Windows 8 (menus in Portuguese).
In my case, I already had the device paired. If you haven’t yet, pair with it. Once it is paired, you should get a new COM port available on your computer. On Windows 8, you can check it at the device manager, as can be seen in figure 2.
Figure 2 – New Bluetooth over serial COM port detected in Windows 8.
You can now go back to the Arduino IDE and this COM port should be on the list of the available COM ports that we can connect to using the Serial Monitor. Choose it and open the Serial Monitor. You can check the expected result at figure 3, which shows the message we defined in the code getting printed.
Figure 3 – Output of the program on the Arduino IDE serial monitor.