esp32的gatt
时间: 2025-01-03 12:26:17 浏览: 7
### ESP32 GATT BLE通信协议实现方式
#### 创建GATT服务器
创建一个基于ESP32的GATT服务器涉及定义服务和服务内的特征(characteristic),这些可以被其他BLE客户端读取、写入或订阅通知。为了建立这样的服务器,首先需要初始化BLE库并设置必要的回调函数来处理事件。
对于ESP32来说,可以通过Arduino IDE中的`BluetoothSerial`类或者更底层的API如`esp_ble_gatts_if_t`接口来进行操作[^1]。下面是一个简单的例子展示如何配置一个基本的服务和特性:
```cpp
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
// 定义UUIDs
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
void setup() {
Serial.begin(115200);
// 初始化BLE堆栈
BLEDevice::init("MyESP32");
// 创建一个新的GATT服务器实例
pServer = BLEDevice::createServer();
// 添加新的服务到这个服务器上
BLEService *pService = pServer->createService(SERVICE_UUID);
// 向该服务添加一个可读写的特性
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
// 设置初始值给这个特性
pCharacteristic->setValue("Hello World!");
// 开始服务
pService->start();
// 建立广告数据包以便让其它设备能够找到我们
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x0);
// 发布我们的存在...
BLEDevice::startAdvertising();
}
void loop() {
delay(2000);
}
```
这段代码展示了怎样通过Arduino环境下的ESP32平台构建了一个简易版的GATT服务器。它设置了自定义的服务ID以及对应的特性的属性(这里是可以读也可以写的),并且启动了广播使得远程设备能检测到此ESP32作为可用的BLE外围设备。
当有外部请求访问上述创建好的服务及其特性时,可以根据需求进一步扩展逻辑,在接收到特定命令后执行某些动作或是返回动态的数据响应。
阅读全文