#include #include #define DHTTYPE DHT11 #define DHTPIN 17 DHT dht(DHTPIN, DHTTYPE); // UUIDs #define SERVICE_UUID "12345678-1234-1234-1234-1234567890ab" #define CHARACTERISTIC_UUID "abcd1234-5678-1234-5678-abcdef123456" NimBLECharacteristic* pCharacteristic; bool deviceConnected = false; class ServerCallbacks : public NimBLEServerCallbacks { void onConnect(NimBLEServer* pServer) { deviceConnected = true; Serial.println("Client connected"); } void onDisconnect(NimBLEServer* pServer) { deviceConnected = false; Serial.println("Client disconnected"); NimBLEDevice::startAdvertising(); } }; void setup() { Serial.begin(115200); delay(2000); dht.begin(); NimBLEDevice::init("XIAO_DHT11_BLE"); NimBLEServer* pServer = NimBLEDevice::createServer(); pServer->setCallbacks(new ServerCallbacks()); NimBLEService* pService = pServer->createService(SERVICE_UUID); pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY ); pCharacteristic->setValue("Starting..."); pService->start(); NimBLEAdvertising* pAdvertising = NimBLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->start(); Serial.println("BLE server started"); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (!isnan(h) && !isnan(t)) { String data = "Temp:" + String(t,1) + ",Hum:" + String(h,1); pCharacteristic->setValue(data.c_str()); if (deviceConnected) { pCharacteristic->notify(); } Serial.println(data); } else { Serial.println("Sensor error"); } delay(2000); }