BLE食用说明——Arduino服务端
BLE服务端头文件
#include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h>
BLE特性包
BLECharacteristic *pCharacteristic; bool deviceConnected = false;
BLE UUID定义
#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
Server Callback,服务端连接后的回调
class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; // 在有设备接入后Advertising广播会被停止,所以要在设备断开连接时重新开启广播 // 不然的话只有重启ESP32后才能重新搜索到 pServer->startAdvertising(); //该行效果同 BLEDevice::startAdvertising(); } };
Characteristic Callback,特性回调
class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { String rxValue = pCharacteristic->getValue(); if (rxValue.length() > 0) { Serial.print("------>Received Value: "); for (int i = 0; i < rxValue.length(); i++) { Serial.print(rxValue[i]); } Serial.println(); } } };
注册回调,并开始广播
void setup() { Serial.begin(115200); // Create the BLE Device BLEDevice::init("ESP32 BLE Test");
创建BLE服务,并且设置服务回调
// 创建蓝牙服务 BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks());
创建链接服务
//链接服务 BLEService *pService = pServer->createService(SERVICE_UUID);
创建特性服务
pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY); pCharacteristic->addDescriptor(new BLE2902()); BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE); pCharacteristic->setCallbacks(new MyCallbacks());
开始蓝牙服务
// 开始蓝牙链接服务 pService->start();
开始广播服务
// 开始广播 pServer->getAdvertising()->start(); Serial.println("Waiting a client connection to notify...");
void loop() { if (deviceConnected) {//设备连接后,每秒钟发送txValue。 memset(BLEbuf, 0, 32); memcpy(BLEbuf, (char*)"Hello BLE APP!", 32); pCharacteristic->setValue(BLEbuf); pCharacteristic->notify(); // Send the value to the app! Serial.print("*** Sent Value: "); Serial.print(BLEbuf); Serial.println(" ***"); } delay(1000); }
浙公网安备 33010602011771号