//Reads Temp/Pressure/Humidity from Nano33Sense BLE 1/5/21 #include #include #include BLEService environmentService("00001101-0000-1000-8000-00805f9b34fb"); BLEUnsignedShortCharacteristic TempLevelChar ("00002101-0000-1000-8000-00805f9b34fb", BLERead | BLENotify); BLEUnsignedShortCharacteristic PressLevelChar("00002a6d-0000-1000-8000-00805f9b34fb", BLERead | BLENotify); BLEUnsignedShortCharacteristic HumLevelChar ("00002a6f-0000-1000-8000-00805f9b34fb", BLERead | BLENotify); int temperature; int pressure; short humidity; const float CALIBRATION_FACTOR = -4; // Temperature calibration factor (celcius) int ledState = LOW; /*********************************************************************/ void setup() /*********************************************************************/ { Serial.begin(9600); // wait for the serial port display to be activated while (!Serial); pinMode(LED_BUILTIN, OUTPUT); if (!BLE.begin()) { Serial.println("starting BLE failed!"); while (1); } if (!BARO.begin()) { Serial.println("Failed to initialize pressure sensor!"); } if (!HTS.begin()) { Serial.println("Failed to initialize HUM/TEMP sensor!"); } BLE.setLocalName("HumidityMonitor"); BLE.setAdvertisedService(environmentService); environmentService.addCharacteristic(TempLevelChar); environmentService.addCharacteristic(PressLevelChar); environmentService.addCharacteristic(HumLevelChar); BLE.addService(environmentService); BLE.advertise(); Serial.println("Bluetooth device active, waiting for connections..."); } /*********************************************************************/ /*********************************************************************/ void loop() /*********************************************************************/ { BLEDevice central = BLE.central(); if (central) { Serial.print("Connected to central: "); Serial.println(central.address()); digitalWrite(LED_BUILTIN, HIGH); while (central.connected()) { pressure = getPressure(); // Read the HTS22 temperature and humidity temperature = getTemperature(CALIBRATION_FACTOR); humidity = getHumidity(); Serial.print(" Temp: "); Serial.print(temperature); Serial.print(" Press: "); Serial.print(pressure); Serial.print(" Hum: "); Serial.println(humidity); TempLevelChar.writeValue(temperature); PressLevelChar.writeValue(pressure); HumLevelChar.writeValue(humidity); Serial.println("Waiting..."); BLE.poll(); delay(100); } } digitalWrite(LED_BUILTIN, LOW); Serial.print("Disconnected from central: "); Serial.println(central.address()); } /*********************************************************************/ /*********************************************************************/ unsigned short getTemperature(float calibration) /*********************************************************************/ { // Get calibrated temperature as signed 16-bit int for BLE characteristic // convert from C to F //return (int) (((HTS.readTemperature() + calibration) *9.0/5.0+32.0) * 100); return (unsigned short) (HTS.readTemperature() * 10); } /*********************************************************************/ /*********************************************************************/ unsigned short getHumidity() /*********************************************************************/ { // Get humidity as unsigned 16-bit int for BLE characteristic return (unsigned short) (HTS.readHumidity() * 10); } /*********************************************************************/ /*********************************************************************/ unsigned short getPressure() /*********************************************************************/ { // Get pressure as unsigned 16-bit int for BLE characteristic return (unsigned short) (BARO.readPressure()*10); } /*********************************************************************/