esp32怎么连esp32蓝牙
时间: 2024-12-29 08:21:10 浏览: 16
### 实现ESP32到ESP32蓝牙连接
为了实现两个ESP32设备之间的蓝牙通信,可以采用Bluetooth Low Energy (BLE)协议来建立稳定可靠的无线数据传输通道。具体来说,在一个ESP32上配置为GATT服务器角色,而另一个则设置成GATT客户端模式[^1]。
#### 设置环境与依赖库
确保Arduino IDE已安装并正确设置了ESP32开发板支持包。接着导入必要的BLE库文件:
```cpp
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <BLECharacteristic.h>
```
#### 创建服务端程序
在第一个ESP32(即服务器)中定义UUID和服务特性,并启动广告广播等待被发现和连接请求:
```cpp
// 设备名称以及服务/特征标识符
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32 Server");
// 创建新的BLE服务器实例
pServer = BLEDevice::createServer();
// 添加指定的服务至该服务器内
pService = pServer->createService(SERVICE_UUID);
// 向上述服务添加特定属性用于读写操作
pCharacteristic = pService->addCharacteristic(
new BLECharacteristic(CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE));
// 开启此服务以便其他装置能够访问它所提供的资源
pService->start();
// 准备好之后就开始发送通告消息吸引潜在客户前来配对
pAdvertising = BLEDevice::getAdvertiseData(BLE Advertised DeviceCallbacks());
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x0);
BLEDevice::startAdvertising();
}
void loop() {
delay(2000);
}
```
#### 编写客户端代码
第二个ESP32充当客户端的角色去扫描周围可用的BLE信号源直到找到目标服务器为止;一旦建立了链接就可以利用之前设定好的UUID来进行交互通讯了:
```cpp
// 这里同样需要引入相同的头文件...
#include <BLEDevice.h>
...
void setup(){
...
// 初始化串口监视器输出
Serial.begin(115200);
// 执行初始化过程
BLEDevice::init("");
// 获取默认的扫描对象指针
pScanner = BLEDevice::getScan();
// 注册回调函数处理接收到的数据包事件
pScanner->setAdvertisedDeviceCallback(new MyAdvertisedDeviceCallbacks());
// 正式开启持续性的主动探测活动
pScanner->start(5, false);
}
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice){
if (advertisedDevice.haveServiceUUID() &&
advertisedDevice.isConnectable()) {
// 如果匹配到了预期中的远程节点就立即停止搜索动作
doConnect = true;
pAdvertisedDevice = &advertisedDevice;
// 结束当前轮询周期提前退出循环体
pScanner->stop();
// 输出提示信息表示已经找到了合适的伙伴准备进入下一步骤
Serial.printf("Connecting to %s\n", pAdvertisedDevice->getName().c_str());
// 尝试发起正式握手流程尝试获取对方授权许可加入网络成为成员之一
pClient = pAdvertisedDevice->connect();
// 接下来就是按照标准API文档说明继续向下执行相应的逻辑分支啦~
}
}
};
```
以上展示了基本框架下的ESP32间基于BLE技术完成相互识别认证并且交换简单文本字符串的方法[^2]。当然实际应用场景可能会涉及到更复杂的业务需求比如文件同步共享或是传感器集群管理等功能扩展,则需进一步深入研究官方手册资料以满足项目要求。
阅读全文