低功耗节点和友节点之间的BLE Mesh问题可以使用以下解决方法:
解决方法1:使用广播消息传递数据
在低功耗节点发送广播消息,而友节点通过监听广播消息来接收数据。这种方法简单易实现,但广播消息有一定的范围限制,并且可能会导致网络拥堵。
示例代码:
// 低功耗节点发送广播消息
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" // 服务UUID
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" // 特征UUID
void setup() {
BLEDevice::init("LowPowerNode");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ
);
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->setScanResponse(true);
pAdvertising->start();
}
void loop() {
// 通过特征向低功耗节点发送数据
BLEService *pService = BLEDevice::getServiceByUUID(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->getCharacteristic(CHARACTERISTIC_UUID);
pCharacteristic->setValue("Hello, World!");
pCharacteristic->notify();
delay(1000);
}
// 友节点接收广播消息
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" // 服务UUID
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" // 特征UUID
class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
Serial.println("Connected");
}
void onDisconnect(BLEServer* pServer) {
Serial.println("Disconnected");
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("FriendNode");
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID);
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
// 监听特征接收到的广播消息
BLEService *pService = BLEDevice::getServiceByUUID(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->getCharacteristic(CHARACTERISTIC_UUID);
std::string value = pCharacteristic->getValue();
if (value.length() > 0) {
Serial.println(value.c_str());
}
delay(1000);
}
解决方法2:使用GATT协议传递数据
低功耗节点和友节点之间建立GATT连接,通过GATT协议进行数据传输。这种方法可以实现可靠的数据传输,但需要额外的连接和维护工作。
示例代码:
// 低功耗节点发送数据
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" // 服务UUID
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" // 特征UUID
void setup() {
BLEDevice::init("LowPowerNode");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
);
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
p