11
社区成员
发帖
与我相关
我的任务
分享ESP32模块自带蓝牙和WiFi
上一篇blog写了蓝牙和串口间的通信
现在实现了ESP32两个蓝牙之间的通信
代码如下:
网上唯一的代码用的是主机搜索从机的MAC地址
我尝试了调不通
后面修改成搜索蓝牙名称连接,成功
现在把代码分享如下:
Master:
//主机模式
#include <Arduino.h>
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
#define Master 1 //主从机模式选择 1主机 0从机
String SlaveName="ESP32_SLAVE";
void Bluetooth_Event(esp_spp_cb_event_t event, esp_spp_cb_param_t *param); //蓝牙事件回调函数
uint8_t address[6]={0xB0,0xB2,0x1C,0xA8,0x10,0xD0}; //从机MAC地址 不同的蓝牙地址不同 需要自己修改
//B0B21CA810D0(com3)
void setup() {
Serial.begin(115200);
SerialBT.register_callback(Bluetooth_Event); //设置事件回调函数 连接 断开 发送 接收
if(Master)
{
SerialBT.begin("ESP32_MASTER",true); //开启蓝牙 名称为:"ESP32_MASTER" 主机
Serial.printf("Init Complete - Master\r\n");
SerialBT.connect(SlaveName);
}
else
{
SerialBT.begin("ESP32_SLAVE"); //开启蓝牙 名称为:"ESP32_SLAVE" 从机
Serial.printf("Init Complete - Slave\r\n");
SerialBT.connect(address);
}
}
void loop()
{
if(Master)
SerialBT.write('S');
Serial.println("loop");
delay(3000);
}
void Bluetooth_Event(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) //蓝牙事件回调函数
{
if(event == ESP_SPP_OPEN_EVT || event == ESP_SPP_SRV_OPEN_EVT) //蓝牙连接成功标志
{ //蓝牙主机和从机模式对应的标志不同,前面的是主机模式的,后面是从机模式
Serial.write("connection successful!\r\n");
}
else if(event == ESP_SPP_CLOSE_EVT) //蓝牙断开连接标志
{
Serial.write("disconnect successful!\r\n");
}
else if(event == ESP_SPP_DATA_IND_EVT) //数据接收标志
{
while(SerialBT.available())
{
Serial.write(SerialBT.read());
}
Serial.write(" receive complete! \r\n");
}
else if(event == ESP_SPP_WRITE_EVT) //数据发送标志
{
Serial.write(" send complete! \r\n");
}
}
Slave:
//主机模式
#include <Arduino.h>
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
#define Master 0 //主从机模式选择 1主机 0从机
String MasterName="ESP32_MASTER";
void Bluetooth_Event(esp_spp_cb_event_t event, esp_spp_cb_param_t *param); //蓝牙事件回调函数
uint8_t address[6]={0xB0,0xB2,0x1C,0xA7,0x9A,0x7C}; //从机MAC地址 不同的蓝牙地址不同 需要自己修改
//B0B21CA79A7C(com3)
void setup() {
Serial.begin(115200);
SerialBT.register_callback(Bluetooth_Event); //设置事件回调函数 连接 断开 发送 接收
if(Master)
{
SerialBT.begin("ESP32_MASTER",true); //开启蓝牙 名称为:"ESP32_MASTER" 主机
Serial.printf("Init Complete - Master\r\n");
SerialBT.connect(MasterName);
}
else
{
SerialBT.begin("ESP32_SLAVE"); //开启蓝牙 名称为:"ESP32_SLAVE" 从机
Serial.printf("Init Complete - Slave\r\n");
SerialBT.connect(address);
}
}
void loop()
{
if(Master)
SerialBT.write('A');
Serial.println("loop");
delay(300);
}
void Bluetooth_Event(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) //蓝牙事件回调函数
{
if(event == ESP_SPP_OPEN_EVT || event == ESP_SPP_SRV_OPEN_EVT) //蓝牙连接成功标志
{ //蓝牙主机和从机模式对应的标志不同,前面的是主机模式的,后面是从机模式
Serial.write("connection successful!\r\n");
}
else if(event == ESP_SPP_CLOSE_EVT) //蓝牙断开连接标志
{
Serial.write("disconnect successful!\r\n");
}
else if(event == ESP_SPP_DATA_IND_EVT) //数据接收标志
{
while(SerialBT.available())
{
Serial.write(SerialBT.read());
}
Serial.write(" receive complete! \r\n");
}
else if(event == ESP_SPP_WRITE_EVT) //数据发送标志
{
Serial.write(" send complete! \r\n");
}
}
实验还是得自己完成查看实验结果后确定截图如下

发送的是S
接收端接收到S