#include #include #include #define SERVICE_UUID "07a00fd4-73d1-40b1-a54f-e29acf1df038" #define WRITE_CHAR_UUID "6b70935c-f23c-44e5-a812-1088411f6ce7" #define READ_CHAR_UUID "b41db0b5-9aae-4393-9e26-7218f6da2dc8" BLECharacteristic* readCharacteristic; BLECharacteristic* writeCharacteristic; String results = ""; // Callback for when user writes a response class SurveyWriteCallback : public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *characteristic) { String value = characteristic->getValue(); // stays String if (value.length() > 0) { Serial.print("Received story: "); Serial.println(value); // Store response results += value + "\n"; // Update read characteristic readCharacteristic->setValue(results); } } }; void setup() { Serial.begin(115200); BLEDevice::init("StoryStone"); BLEServer *server = BLEDevice::createServer(); BLEService *service = server->createService(SERVICE_UUID); // Read characteristic (accumulated responses) readCharacteristic = service->createCharacteristic( READ_CHAR_UUID, BLECharacteristic::PROPERTY_READ ); // Write characteristic (incoming user responses) writeCharacteristic = service->createCharacteristic( WRITE_CHAR_UUID, BLECharacteristic::PROPERTY_WRITE ); writeCharacteristic->setCallbacks(new SurveyWriteCallback()); // Initial text readCharacteristic->setValue("No stories yet"); service->start(); BLEAdvertising *advertising = BLEDevice::getAdvertising(); advertising->addServiceUUID(SERVICE_UUID); advertising->start(); Serial.println("BLE survey service started"); } void loop() { // nothing needed }