esp32 低功耗蓝牙BLE
时间: 2024-12-28 22:21:47 浏览: 10
### ESP32 实现低功耗蓝牙(BLE)的方法
ESP32 支持多种方式来实现低功耗蓝牙(BLE)。通过配置不同的模式和服务,能够满足各种应用场景的需求。为了使 ESP32 成为 BLE 设备的一部分,通常需要设置其作为客户端或服务器角色。
#### 设置 ESP32 为 BLE 客户端
当 ESP32 作为 BLE 客户端时,它可以主动扫描周围的 BLE 设备,并尝试与其建立连接。这种情况下,ESP32 可以监听来自其他 BLE 设备的服务和特征变化,从而执行相应的操作,比如开关灯光等[^1]。
```cpp
#include <BluetoothSerial.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_BLE_CLIENT"); // 蓝牙设备名称
}
void loop() {
if (!SerialBT.available()) {
return;
}
String data = SerialBT.readString();
Serial.println(data);
// 解析数据并做出反应...
}
```
这段代码展示了如何初始化一个名为 "ESP32_BLE_CLIENT" 的 BLE 客户端,并准备接收从配对成功的远程设备发送过来的数据流。
#### 扫描周围 BLE 设备
为了让 ESP32 发挥作用,还需要编写程序让它能识别附近的 BLE 设备。这涉及到启动一次性的扫描过程,在此期间收集所有可发现的 BLE 广播包的信息[^3]。
```cpp
#include <BLEDevice.h>
void setup(){
Serial.begin(115200);
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); // 创建新的扫描对象
pBLEScan->start(5, false); // 开始持续时间为5秒的扫描周期
}
void loop(){}
```
上述片段说明了怎样创建一个新的扫描会话以及指定它的参数——这里设定了最大等待时间是五秒钟,并且不会重复显示之前已经报告过的相同地址的广告报文。
#### 建立 GATT 连接
一旦找到了目标设备,则下一步就是发起连接请求并通过交换服务描述符来获取可用资源列表。这些信息对于理解对方支持哪些特性至关重要,进而允许本地应用据此调整行为逻辑[^4]。
```cpp
pClient = BLEDevice::createClient();
// 尝试连接至先前选定的目标设备...
if(pServer != NULL){
pService = pServer->getService(serviceUUID);
if (pCharacteristic != NULL && pCharacteristic->canRead()){
std::string value = pCharacteristic->readValue();
Serial.print("读取到的内容:");
Serial.println(value.c_str());
}
}
```
以上代码段演示了一个典型的 GATT 协议交互流程:先创建客户机实例,接着寻找对应的服务 UUID 和具体的属性节点;最后验证该节点是否具备读权限后才去实际读取其中存储的数据值。
阅读全文