写在前面
经典蓝牙我们一般说的是BT,低功耗蓝牙我们一般说成BLE。
ESP32具有蓝牙功能,本例程将示范使用两块FireBeetle 2 ESP32-E进行蓝牙通信,通过其中一块ESP32向另一块ESP32发送数据。
测试代码
主机代码
#include "BluetoothSerial.h"
//创建蓝牙对象
BluetoothSerial SerialBT;
//从机MAC地址
uint8_t address[6] = {0xB0, 0xB2, 0x1C, 0xAB, 0x19, 0xD2};
//蓝牙状态
bool connected;
void setup()
{
//启用串口
Serial.begin(115200);
//开启蓝牙
SerialBT.begin("ESP32_master", true);
//打印提示
Serial.println("The device started in master mode, make sure remote BT device is on!");
//与从机配对
connected = SerialBT.connect(address);
//打印提示
if(connected)
{
//打印成功
Serial.println("Connected Succesfully!");
}
else
{
//打印失败
Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
}
}
void loop()
{
//断线自动重连
if(!SerialBT.hasClient())
{
//打印掉线
Serial.println("The slave is disconnected");
//延时
delay(50);
//与从机配对
connected = SerialBT.connect(address);
//打印提示
if(connected)
{
//打印重连成功
Serial.println("Automatic connection successful!");
}
else
{
//打印重连失败
Serial.println("Automatic connection failure!");
}
}
//将ESP32串口接收到的信息,通过蓝牙发送
if (Serial.available())
{
SerialBT.write(Serial.read());
}
//将蓝牙接收到的信息,通过ESP32串口发送
if (SerialBT.available())
{
Serial.write(SerialBT.read());
}
//延时
delay(20);
}
从机代码
#include "BluetoothSerial.h"
#include "esp_bt_device.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT; //创建蓝牙对象
void setup()
{
//启用串口
Serial.begin(115200);
//开启蓝牙
SerialBT.begin("ESP32_slave");
//打印提示
Serial.println("The device started, now you can pair it with bluetooth!");
//获取蓝牙的mac地址
const uint8_t *bleAddr = esp_bt_dev_get_address();
//以16进制打印
printf("蓝牙mac地址: %02x-%02x-%02x-%02x-%02x-%02x\n", bleAddr[0], bleAddr[1], bleAddr[2], bleAddr[3], bleAddr[4], bleAddr[5]);
}
void loop()
{
//将ESP32串口接收到的信息,通过蓝牙发送
if (Serial.available())
{
SerialBT.write(Serial.read());
}
//将蓝牙接收到的信息,通过ESP32串口发送
if (SerialBT.available())
{
Serial.write(SerialBT.read());
}
//延时
delay(20);
}
测试结果
主机
从机
注意事项
1、主机配对从机时,使用MAC物理地址,更快。
2、获取蓝牙MAC地址的方法,参见 从机代码 。