//DHT22toApp.ino 27/04/2022 23:44:15 //Arduino Nano 33 IoT BLE //DHT22 3.3-6V DC #include //adafruit #include //adafruit #include #define Type DHT22 int iSensorPin = 4; //D4 pin for sensor DHT dht(iSensorPin,Type); //connect to DHT22 sensor float fTempF = 0.0; float fHum = 0.0; const int iLedPin = LED_BUILTIN; // LED pin unsigned long lgUpdateTime; // time interval for data send to App #define BLE_UUID_SERVICE "9A48ECBA-2E92-082F-C079-9E75AAE428B1" #define BLE_UUID_TEMPERATURE "C8F88594-2217-0CA6-8F06-A4270B675D69" #define BLE_UUID_HUMIDITY "E3ADBF53-950E-DC1D-9B44-076BE52760D6" BLEService SCGService(BLE_UUID_SERVICE); BLEFloatCharacteristic TempCharacteristic(BLE_UUID_TEMPERATURE, BLEWrite | BLENotify); BLEFloatCharacteristic HumCharacteristic(BLE_UUID_HUMIDITY, BLEWrite | BLENotify); void setup() { Serial.begin(9600); //Info to Terminal dht.begin(); // set Sensor pin to input mode pinMode(iSensorPin, INPUT); // set LED pin to output mode pinMode(iLedPin, OUTPUT); // begin initialization if (!BLE.begin()) { Serial.println("starting BLE failed!"); while (1); } // set advertised local name and service UUID: BLE.setLocalName("SCG"); BLE.setAdvertisedService(SCGService); // add service BLE.addService(SCGService); // add the characteristic to the service SCGService.addCharacteristic(TempCharacteristic); SCGService.addCharacteristic(HumCharacteristic); // set the initial value for the characeristics TempCharacteristic.writeValue(fTempF); HumCharacteristic.writeValue(fHum); // start advertising BLE.advertise(); Serial.println("BLE SCG Peripheral"); lgUpdateTime = millis(); } void loop() { BLEDevice central = BLE.central(); if (central) { //Serial.print("Connected to central: "); // print the central's MAC address: //Serial.println(central.address()); // while the central is still connected to peripheral: while (central.connected()) { if(millis() - lgUpdateTime > 5000) //approx every 5 seconds (minimum for DHT22 = 2 seconds) { lgUpdateTime = millis(); ReadTempAndHum(); // if device wrote to the characteristic, use the value to control the LED: if (TempCharacteristic.written()) { if (TempCharacteristic.value()) // any value other than zero { //Serial.println("LED on"); digitalWrite(iLedPin, HIGH); // LED on } else { // zero //Serial.println(F("LED off")); digitalWrite(iLedPin, LOW); // LED off } } } } } } void ReadTempAndHum() { fTempF = dht.readTemperature(true); fHum = dht.readHumidity(); if ( isnan(fTempF) || isnan(fHum) ) { Serial.println("DHT sensor read failed"); } else { TempCharacteristic.writeValue(fTempF); // to App HumCharacteristic.writeValue(fHum); // to App } }