我是靠谱客的博主 纯情花卷,最近开发中收集的这篇文章主要介绍ESP32-CAM 连接低功耗蓝牙的步骤,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.第一步,设定蓝牙的UUID 共三个,代码如下:

#define SERVICE_UUID "43F4B114-CA67-48E8-A46F-9A8FFEB7146A"
#define CHARACTERISTIC_WRITE_NO_RESPONSE_UUID "BF83F3F1-399A-414D-9035-CE64CEB3FF67"
#define CHARACTERISTIC_NOTIFY_UUID "BF83F3F2-399A-414D-9035-CE64CEB3FF67"
#define BLE_SERVER_NAME "HEA2100010N000019N" 

SERVICE_UUID 服务uuid

CHARACTERISTIC_WRITE_NO_RESPONSE_UUID 写入的uuid

CHARACTERISTIC_NOTIFY_UUID 读的UUID

BLE_SERVER_NAME 蓝牙名称

2.第二步,连接低功耗蓝牙,并接收返回数据。

// 搜索到设备时回调功能
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      // if (advertisedDevice.haveServiceUUID() && advertisedDevice.isAdvertisingService(BLEUUID("4fafc201-1fb5-459e-8fcc-c5c9c331914b"))) {
      if (advertisedDevice.haveName() && (advertisedDevice.getName() == BLE_SERVER_NAME)) {
          advertisedDevice.getScan()->stop(); // 停止当前扫描
          pServer = new BLEAdvertisedDevice(advertisedDevice); // 暂存设备
          doSacn = false;
          doConnect = true;
          Serial.println(" - 发现连接设备");
      }
    }
};

// 客户端与服务器连接与断开回调功能
class MyClientCallback : public BLEClientCallbacks {
  void onConnect(BLEClient* pclient) {}
  void onDisconnect(BLEClient* pclient) {
    doSacn = true;
    connected = false;
    Serial.println(" - 失去与设备的连接");
  }
};

// 收到服务推送的数据时的回调函数
void NotifyCallback(BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) {
    char buf[length + 1];
    for (size_t i = 0; i < length; i++) {
      buf[i] = pData[i];
    }
    buf[length] = 0;
    Serial.printf("[%d]: %sn", length, buf);
}

// 用来连接设备获取其中的服务与特征
bool ConnectToServer(void) {
    BLEClient* pClient  = BLEDevice::createClient(); // 创建客户端
    pClient->setClientCallbacks(new MyClientCallback()); // 添加客户端与服务器连接与断开回调功能
   
    if (!pClient->connect(pServer)) { //尝试连接设备
      return false;
    }else{
      Serial.println(" - [server]: 连接设备成功");
    }
    
    BLERemoteService* pRemoteService = pClient->getService(SERVICE_UUID); // 尝试获取设备中的服务
    if (pRemoteService == nullptr) {
      Serial.println(" - 获取服务失败");
      pClient->disconnect();
      return false;
    }else{
      Serial.println(" - [server]: 获取服务成功");
    }
    
    pRemoteCharacteristicWrite = pRemoteService->getCharacteristic(CHARACTERISTIC_WRITE_NO_RESPONSE_UUID); // 尝试获取服务中的特征
    if (pRemoteCharacteristicWrite == nullptr) {
      Serial.println(" - [Write]:获取特性失败");
      pClient->disconnect();
      return false;
    }else{
      Serial.println(" - [Write]: 获取特征成功..");
    }
    
    if(pRemoteCharacteristicWrite->canRead()) { // 如果特征值可以读取则读取数据
      Serial.printf(" - 该特征值可以读取并且当前值为[Write]: %srn", pRemoteCharacteristicWrite->readValue().c_str());
    }else{
      Serial.println(" - [Write]: CHARACTERISTIC_WRITE_NO_RESPONSE_UUID canRead ERROR!");
    }
    
    if(pRemoteCharacteristicWrite->canNotify()) { // 如果特征值启用了推送则添加推送接收处理
      pRemoteCharacteristicWrite->registerForNotify(NotifyCallback);
    }else{
      Serial.println(" - [Write]: CHARACTERISTIC_WRITE_NO_RESPONSE_UUID canNotify ERROR!");      
    }

    pRemoteCharacteristicNotify = pRemoteService->getCharacteristic(CHARACTERISTIC_NOTIFY_UUID); // 尝试获取服务中的特征
    if (pRemoteCharacteristicWrite == nullptr) {
      Serial.println(" - [Notify]:获取特性失败");
      pClient->disconnect();
      return false;
    }else{
      Serial.println(" - [Notify]: 获取特征成功..");
    }
  
    if(pRemoteCharacteristicNotify->canRead()) { // 如果特征值可以读取则读取数据
      Serial.printf(" - 该特征值可以读取并且当前值为[Write]: %srn", pRemoteCharacteristicNotify->readValue().c_str());
    }else{
      Serial.println(" - [Notify]: CHARACTERISTIC_NOTIFY_UUID canRead ERROR!");
    }
    if(pRemoteCharacteristicNotify->canNotify()) { // 如果特征值启用了推送则添加推送接收处理
      pRemoteCharacteristicNotify->registerForNotify(NotifyCallback);     
    }else{
      Serial.println(" - [Notify]: CHARACTERISTIC_NOTIFY_UUID canNotify ERROR!");      
    }

}

3.第三步,写入特征值,获取返回的数据。

最后

以上就是纯情花卷为你收集整理的ESP32-CAM 连接低功耗蓝牙的步骤的全部内容,希望文章能够帮你解决ESP32-CAM 连接低功耗蓝牙的步骤所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部