#include #include #include #include // BLE Service and Characteristics UUIDs #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" #define RX_UUID "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" #define TX_UUID "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" BLECharacteristic *txCharacteristic; bool deviceConnected = false; #define POT_PIN A0 // GPIO 2 #define LED_PIN D6 // Built-in LED class ServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; } void onDisconnect(BLEServer* pServer) { deviceConnected = false; } }; class RXCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *characteristic) { String value = characteristic->getValue(); if (value == "1") { digitalWrite(LED_PIN, HIGH); } else if (value == "0") { digitalWrite(LED_PIN, LOW); } } }; void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); BLEDevice::init("XIAO_C3_BLE"); BLEServer *server = BLEDevice::createServer(); server->setCallbacks(new ServerCallbacks()); BLEService *service = server->createService(SERVICE_UUID); txCharacteristic = service->createCharacteristic( TX_UUID, BLECharacteristic::PROPERTY_NOTIFY ); txCharacteristic->addDescriptor(new BLE2902()); BLECharacteristic *rxCharacteristic = service->createCharacteristic( RX_UUID, BLECharacteristic::PROPERTY_WRITE ); rxCharacteristic->setCallbacks(new RXCallbacks()); service->start(); server->getAdvertising()->start(); Serial.println("BLE Ready! Connect from BLE App."); } void loop() { if (deviceConnected) { int pot = analogRead(POT_PIN); char buffer[10]; sprintf(buffer, "%d", pot); txCharacteristic->setValue(buffer); txCharacteristic->notify(); delay(200); } }