下面是一个使用Arduino ESP32来接收整个字符串的示例代码:
#include
#include
#include
BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
bool deviceConnected = false;
bool oldDeviceConnected = false;
String receivedString = "";
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(BLEUUID((uint16_t)0x180D));
pCharacteristic = pService->createCharacteristic(
BLEUUID((uint16_t)0x2A37),
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_NOTIFY
);
pCharacteristic->addDescriptor(new BLE2902());
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(BLEUUID((uint16_t)0x180D));
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06);
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
}
void loop() {
if (deviceConnected) {
if (!oldDeviceConnected) {
delay(500);
pCharacteristic->setValue("Connected");
pCharacteristic->notify();
oldDeviceConnected = true;
}
if (pCharacteristic->written()) {
receivedString = pCharacteristic->getValue().c_str();
Serial.println("Received: " + receivedString);
pCharacteristic->setValue("Data received");
pCharacteristic->notify();
}
} else {
if (oldDeviceConnected) {
delay(500);
pCharacteristic->setValue("Disconnected");
pCharacteristic->notify();
oldDeviceConnected = false;
}
}
delay(10);
}
这个示例代码使用了ESP32的蓝牙库来创建一个BLE服务器。在setup()
函数中,我们初始化了蓝牙设备,创建了一个BLE服务器和一个BLE服务,并将服务添加到服务器中。然后我们创建了一个特征值,并为该特征值添加了一个描述符。接下来,我们开始广播蓝牙服务。
在loop()
函数中,我们检查是否有设备连接到了蓝牙服务器。如果有设备连接,我们检查是否有数据被写入了特征值。如果有数据被写入,我们将接收到的字符串存储在receivedString
变量中,并打印出来。然后我们给特征值设置一个回执,并通知设备。
如果没有设备连接,我们检查上一次是否有设备连接,如果有,我们发送一个断开连接的回执,并通知设备。
请注意,此示例代码仅接收整个字符串并打印出来,如果你有其他要求,你可能需要根据你的需要进行修改。