diff --git a/senseBox-bike-atrai-v2/boards/sensebox_mcu_esp32s2.json b/senseBox-bike-atrai-v2/boards/sensebox_mcu_esp32s2.json deleted file mode 100644 index c031fa6..0000000 --- a/senseBox-bike-atrai-v2/boards/sensebox_mcu_esp32s2.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "build": { - "arduino":{ - "ldscript": "esp32_out.ld" - }, - "core": "esp32", - "extra_flags": [ - "-DARDUINO_SENSEBOX_MCU_ESP32S2", - "-DARDUINO_USB_CDC_ON_BOOT=1", - "-DBOARD_HAS_PSRAM", - "-DARDUINO_USB_MSC_ON_BOOT=1" - ], - "f_cpu": "240000000L", - "f_flash": "80000000L", - "hwids": [ - [ - "0x303A", - "0x81B8" - ], - [ - "0x303A", - "0x81B9" - ], - [ - "0x303A", - "0x81BA" - ] - ], - "flash_mode": "qio", - "mcu": "esp32s2", - "variant": "sensebox_mcu_esp32s2" - }, - "connectivity": [ - "wifi" - ], - "debug": { - "openocd_target": "esp32s2.cfg" - }, - "frameworks": [ - "arduino", - "espidf" - ], - "name": "senseBox MCU S2", - "upload": { - "flash_size": "4MB", - "maximum_ram_size": 327680, - "maximum_size": 4194304, - "use_1200bps_touch": true, - "wait_for_upload_port": true, - "require_upload_port": true, - "speed": 460800 - }, - "vendor": "senseBox", - "url": "https://sensebox.de/" - } \ No newline at end of file diff --git a/senseBox-bike-atrai-v2/platformio.ini b/senseBox-bike-atrai-v2/platformio.ini index 13a1d78..d733dd5 100644 --- a/senseBox-bike-atrai-v2/platformio.ini +++ b/senseBox-bike-atrai-v2/platformio.ini @@ -11,12 +11,8 @@ [env:sensebox_mcu_esp32s2] platform = espressif32 board = sensebox_mcu_esp32s2 -platform_packages = - platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.17 +platform_packages = platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.17 framework = arduino -build = - include_dir = lib/sensors -lib_ldf_mode = deep lib_deps = adafruit/Adafruit SSD1306 @ ^2.5.10 adafruit/Adafruit HDC1000 Library@^2.0.2 @@ -26,3 +22,4 @@ lib_deps = stm32duino/STM32duino VL53L8CX@^1.0.3 adafruit/Adafruit MPU6050@^2.2.6 sensebox/SenseBoxBLE@^1.1.0 + adafruit/Adafruit NeoPixel@^1.12.2 diff --git a/senseBox-bike-atrai-v2/src/main.cpp b/senseBox-bike-atrai-v2/src/main.cpp index f178a16..07f9824 100644 --- a/senseBox-bike-atrai-v2/src/main.cpp +++ b/senseBox-bike-atrai-v2/src/main.cpp @@ -1,6 +1,4 @@ #include -#include -#include #include "sensors/TempHumiditySensor/TempHumiditySensor.h" #include "sensors/DustSensor/DustSensor.h" #include "sensors/DistanceSensor/DistanceSensor.h" @@ -8,8 +6,10 @@ #include "display/Display.h" #include "ble/BLEModule.h" -TempHumiditySensor tempHumiditySensor; +#include "Adafruit_NeoPixel.h" + DustSensor dustSensor; +TempHumiditySensor tempHumiditySensor; DistanceSensor distanceSensor; AccelerationSensor accelerationSensor; @@ -17,10 +17,17 @@ SBDisplay display; BLEModule bleModule; +Adafruit_NeoPixel rgb_led = Adafruit_NeoPixel(1, 1, NEO_GRB + NEO_KHZ800); + void setup() { Serial.begin(115200); delay(1000); + + rgb_led.begin(); + + rgb_led.setBrightness(30); + SBDisplay::begin(); pinMode(IO_ENABLE, OUTPUT); @@ -58,8 +65,8 @@ void setup() // Serial.printf("DustSensor [%s]\n", uuid.c_str()); // }, "UUID-Dust"); - // distanceSensor.subscribe([](String uuid, std::vector values) - // { Serial.printf("DistanceSensor [%s]: %.2f\n", uuid.c_str(), values[0]); }); + // distanceSensor.subscribe([](std::vector values) + // { Serial.printf("DistanceSensor [%s]: %.2f\n", values[0]); }); // accelerationSensor.subscribe([](String uuid, std::vector values) // { @@ -68,13 +75,13 @@ void setup() // float z = values[2]; // Serial.printf("Acceleration [%s]: %.2f, %.2f, %.2f\n", uuid.c_str(), x, y, z); }); - tempHumiditySensor.startSubscription(); dustSensor.startSubscription(); + tempHumiditySensor.startSubscription(); distanceSensor.startSubscription(); accelerationSensor.startSubscription(); - tempHumiditySensor.startBLE(); dustSensor.startBLE(); + tempHumiditySensor.startBLE(); distanceSensor.startBLE(); accelerationSensor.startBLE(); diff --git a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp index 05d0066..6a1b614 100644 --- a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp +++ b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.cpp @@ -1,18 +1,14 @@ #include "AccelerationSensor.h" -#include -#include -#include +AccelerationSensor::AccelerationSensor() : BaseSensor("accelerationSensorTask", 2048, 100) {} -const String AccelerationSensor::accUUID = "B944AF10F4954560968F2F0D18CAB522"; +String accUUID = "B944AF10F4954560968F2F0D18CAB522"; +int accCharacteristic = 0; Adafruit_MPU6050 mpu; -int accCharacteristic = 0; - -void AccelerationSensor::begin() +void AccelerationSensor::initSensor() { - if (!mpu.begin(0x68, &Wire1)) { Serial.println("MPU6050 Chip wurde nicht gefunden"); @@ -28,75 +24,30 @@ void AccelerationSensor::begin() }; accCharacteristic = BLEModule::createCharacteristic(accUUID.c_str()); - - sendBLE = false; - activeSubscription = true; - xTaskCreate(sensorTask, "AccelerationSensorTask", 2048, this, 1, NULL); -} - -void AccelerationSensor::subscribe(std::function)> callback) -{ - this->measurementCallback = callback; } -void AccelerationSensor::startSubscription() +void AccelerationSensor::readSensorData() { - activeSubscription = true; -} + sensors_event_t a, g, temp; -void AccelerationSensor::stopSubscription() -{ - activeSubscription = false; -} + mpu.getEvent(&a, &g, &temp); -void AccelerationSensor::startBLE() -{ - setBLEStatus(true); -} + float x = a.acceleration.x; + float y = a.acceleration.y; + float z = a.acceleration.z; -void AccelerationSensor::stopBLE() -{ - setBLEStatus(false); -} - -void AccelerationSensor::sensorTask(void *pvParameters) -{ - AccelerationSensor *sensor = static_cast(pvParameters); - - while (true) + if (measurementCallback) { - if (sensor->activeSubscription) - { - - sensors_event_t a, g, temp; - - mpu.getEvent(&a, &g, &temp); - - float x = a.acceleration.x; - float y = a.acceleration.y; - float z = a.acceleration.z; - - if (sensor->measurementCallback) - { - sensor->measurementCallback(sensor->uuid, {x, y, z}); - } - - if (sensor->sendBLE) - { - sensor->notifyBLE(x, y, z); - } - } + measurementCallback({x, y, z}); + } - vTaskDelay(pdMS_TO_TICKS(500)); + if (sendBLE) + { + notifyBLE(x, y, z); } } void AccelerationSensor::notifyBLE(float x, float y, float z) { - // print characteristic - Serial.print("Acceleration Characteristic: "); - Serial.println(accCharacteristic); - Serial.printf("Acceleration: x: %f, y: %f, z: %f\n", x, y, z); - BLEModule::writeBLE(accCharacteristic, x, y, z); -} +} \ No newline at end of file diff --git a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h index 39697ca..0b0d5fe 100644 --- a/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h +++ b/senseBox-bike-atrai-v2/src/sensors/AccelerationSensor/AccelerationSensor.h @@ -1,25 +1,17 @@ #ifndef ACCELERATION_SENSOR_H #define ACCELERATION_SENSOR_H -#include "../Sensor.h" +#include "../BaseSensor.h" +#include -class AccelerationSensor : public Sensor +class AccelerationSensor : public BaseSensor { public: - void begin() override; - void subscribe(std::function)> callback) override; - void startSubscription() override; - void stopSubscription() override; - void startBLE() override; - void stopBLE() override; + AccelerationSensor(); -private: - std::function)> measurementCallback; - String uuid; - - static const String accUUID; - - static void sensorTask(void *pvParameters); +protected: + void initSensor() override; + void readSensorData() override; void notifyBLE(float x, float y, float z); }; diff --git a/senseBox-bike-atrai-v2/src/sensors/BaseSensor.cpp b/senseBox-bike-atrai-v2/src/sensors/BaseSensor.cpp new file mode 100644 index 0000000..0f84044 --- /dev/null +++ b/senseBox-bike-atrai-v2/src/sensors/BaseSensor.cpp @@ -0,0 +1,49 @@ +#include "BaseSensor.h" + +BaseSensor::BaseSensor(const char *taskName, uint32_t taskStackSize, uint32_t taskDelay) + : activeSubscription(false), sendBLE(false), taskStackSize(taskStackSize), taskDelay(taskDelay) {} + +void BaseSensor::begin() +{ + initSensor(); + delay(1000); + xTaskCreate(sensorTask, taskName, taskStackSize, this, 1, NULL); +} + +void BaseSensor::subscribe(std::function)> callback) +{ + this->measurementCallback = callback; +} + +void BaseSensor::startSubscription() +{ + activeSubscription = true; +} + +void BaseSensor::stopSubscription() +{ + activeSubscription = false; +} + +void BaseSensor::startBLE() +{ + sendBLE = true; +} + +void BaseSensor::stopBLE() +{ + sendBLE = false; +} + +void BaseSensor::sensorTask(void *pvParameters) +{ + BaseSensor *sensor = static_cast(pvParameters); + while (true) + { + if (sensor->activeSubscription) + { + sensor->readSensorData(); + } + vTaskDelay(pdMS_TO_TICKS(sensor->taskDelay)); + } +} \ No newline at end of file diff --git a/senseBox-bike-atrai-v2/src/sensors/BaseSensor.h b/senseBox-bike-atrai-v2/src/sensors/BaseSensor.h new file mode 100644 index 0000000..912e07f --- /dev/null +++ b/senseBox-bike-atrai-v2/src/sensors/BaseSensor.h @@ -0,0 +1,35 @@ +#ifndef BASESENSOR_H +#define BASESENSOR_H + +#include +#include +#include +#include "../ble/BLEModule.h" + +class BaseSensor +{ +public: + BaseSensor(const char *taskName, uint32_t taskStackSize = 8192, uint32_t taskDelay = 1000); + + void begin(); + void subscribe(std::function)> callback); + void startSubscription(); + void stopSubscription(); + void startBLE(); + void stopBLE(); + +protected: + virtual void initSensor() = 0; + virtual void readSensorData() = 0; + static void sensorTask(void *pvParameters); + bool activeSubscription; + bool sendBLE; + std::function)> measurementCallback; + +private: + const char *taskName; + uint32_t taskStackSize; + uint32_t taskDelay; +}; + +#endif // BASESENSOR_H diff --git a/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.cpp b/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.cpp index 712100d..6312412 100644 --- a/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.cpp +++ b/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.cpp @@ -1,104 +1,59 @@ #include "DistanceSensor.h" -#include -#include -#include +DistanceSensor::DistanceSensor() : BaseSensor("distanceTask", 8192, 100) {} -const String DistanceSensor::distanceUUID = "B3491B60C0F34306A30D49C91F37A62B"; +String distanceUUID = "B3491B60C0F34306A30D49C91F37A62B"; +int distanceCharacteristic = 0; VL53L8CX sensor_vl53l8cx_top(&Wire, -1, -1); -int distanceCharacteristic = 0; - -void DistanceSensor::begin() +void DistanceSensor::initSensor() { - Wire.begin(); - Wire.setClock(1000000); // Sensor has max I2C freq of 1MHz - sensor_vl53l8cx_top.begin(); sensor_vl53l8cx_top.init_sensor(); sensor_vl53l8cx_top.vl53l8cx_set_ranging_frequency_hz(30); sensor_vl53l8cx_top.vl53l8cx_set_resolution(VL53L8CX_RESOLUTION_8X8); sensor_vl53l8cx_top.vl53l8cx_start_ranging(); distanceCharacteristic = BLEModule::createCharacteristic(distanceUUID.c_str()); - - sendBLE = false; - activeSubscription = true; - xTaskCreate(sensorTask, "DistanceSensorTask", 8192, this, 1, NULL); } -void DistanceSensor::subscribe(std::function)> callback) +void DistanceSensor::readSensorData() { - this->measurementCallback = callback; -} - -void DistanceSensor::startSubscription() -{ - activeSubscription = true; -} - -void DistanceSensor::stopSubscription() -{ - activeSubscription = false; -} - -void DistanceSensor::startBLE() -{ - setBLEStatus(true); -} - -void DistanceSensor::stopBLE() -{ - setBLEStatus(false); -} - -void DistanceSensor::sensorTask(void *pvParameters) -{ - DistanceSensor *sensor = static_cast(pvParameters); + Serial.println("Reading distance sensor data..."); VL53L8CX_ResultsData Results; uint8_t NewDataReady = 0; - uint8_t status; + uint8_t status = sensor_vl53l8cx_top.vl53l8cx_check_data_ready(&NewDataReady); - while (true) + float distance = -1.0; + + if ((!status) && (NewDataReady != 0)) { - if (sensor->activeSubscription) + sensor_vl53l8cx_top.vl53l8cx_get_ranging_data(&Results); + float min = 10000.0; + for (int i = 0; i < VL53L8CX_RESOLUTION_8X8 * VL53L8CX_NB_TARGET_PER_ZONE; i++) { - float oldVl53l8cxMin = -1.0; - status = sensor_vl53l8cx_top.vl53l8cx_check_data_ready(&NewDataReady); - - if ((!status) && (NewDataReady != 0)) + if (Results.target_status[i] != 255) { - sensor_vl53l8cx_top.vl53l8cx_get_ranging_data(&Results); - float min = 10000.0; - for (int i = 0; i < VL53L8CX_RESOLUTION_8X8 * VL53L8CX_NB_TARGET_PER_ZONE; i++) + float distance = Results.distance_mm[i]; + if (min > distance) { - if ((&Results)->target_status[i] != 255) - { - float distance = (&Results)->distance_mm[i]; - if (min > distance) - { - min = distance; - } - } + min = distance; } - oldVl53l8cxMin = (min == 10000.0) ? 0.0 : min; - } - - float distance = oldVl53l8cxMin / 10.0; - - if (sensor->measurementCallback) - { - sensor->measurementCallback(sensor->uuid, {distance}); - } - - if (sensor->sendBLE) - { - sensor->notifyBLE(distance); } } + distance = (min == 10000.0) ? 0.0 : min / 10.0; + Serial.printf("Distance: %.2f cm\n", distance); + } - vTaskDelay(pdMS_TO_TICKS(1000)); + if (measurementCallback) + { + measurementCallback({distance}); + } + + if (sendBLE) + { + notifyBLE(distance); } } diff --git a/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.h b/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.h index 801484f..62da62a 100644 --- a/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.h +++ b/senseBox-bike-atrai-v2/src/sensors/DistanceSensor/DistanceSensor.h @@ -1,26 +1,19 @@ -#ifndef DISTANCE_SENSOR_H -#define DISTANCE_SENSOR_H +#ifndef DISTANCESENSOR_H +#define DISTANCESENSOR_H -#include "../Sensor.h" +#include "../BaseSensor.h" +#include +#include -class DistanceSensor : public Sensor +class DistanceSensor : public BaseSensor { public: - void begin() override; - void subscribe(std::function)> callback) override; - void startSubscription() override; - void stopSubscription() override; - void startBLE() override; - void stopBLE() override; + DistanceSensor(); -private: - std::function)> measurementCallback; - String uuid; - - static const String distanceUUID; - - static void sensorTask(void *pvParameters); +protected: + void initSensor() override; + void readSensorData() override; void notifyBLE(float distance); }; -#endif // DISTANCE_SENSOR_H +#endif // DISTANCESENSOR_H diff --git a/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.cpp b/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.cpp index 9e851f2..76e7e2e 100644 --- a/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.cpp +++ b/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.cpp @@ -1,19 +1,20 @@ #include "DustSensor.h" -#include -#include -#include -const String DustSensor::pmUUID = "7E14E07084EA489FB45AE1317364B979"; +DustSensor::DustSensor() : BaseSensor("DustSensorTask", 2048, 1000) {} +String dustUUID = "7E14E07084EA489FB45AE1317364B979"; int dustCharacteristic = 0; -void DustSensor::begin() +// add more if needed + +void DustSensor::initSensor() { int16_t ret; uint8_t auto_clean_days = 4; uint32_t auto_clean; - Serial.println("Dust Setup"); + Serial.begin(9600); + delay(2000); sensirion_i2c_init(); @@ -23,6 +24,8 @@ void DustSensor::begin() delay(500); } + Serial.print("SPS sensor probing successful\n"); + ret = sps30_set_fan_auto_cleaning_interval_days(auto_clean_days); if (ret) { @@ -36,100 +39,59 @@ void DustSensor::begin() Serial.print("error starting measurement\n"); } - dustCharacteristic = BLEModule::createCharacteristic(pmUUID.c_str()); - - sendBLE = false; - activeSubscription = true; - - xTaskCreate(sensorTask, "DustSensorTask", 2048, this, 1, NULL); -} - -void DustSensor::subscribe(std::function)> callback) -{ - this->measurementCallback = callback; -} + Serial.print("measurements started\n"); -void DustSensor::startSubscription() -{ - activeSubscription = true; -} - -void DustSensor::stopSubscription() -{ - activeSubscription = false; -} - -void DustSensor::startBLE() -{ - setBLEStatus(true); + dustCharacteristic = BLEModule::createCharacteristic(dustUUID.c_str()); } -void DustSensor::stopBLE() +void DustSensor::readSensorData() { - setBLEStatus(false); -} - -void DustSensor::sensorTask(void *pvParameters) -{ - DustSensor *sensor = static_cast(pvParameters); + struct sps30_measurement m; + char serial[SPS30_MAX_SERIAL_LEN]; + uint16_t data_ready; + int16_t ret; - while (true) + do { - if (sensor->activeSubscription) + ret = sps30_read_data_ready(&data_ready); + if (ret < 0) { + Serial.print("error reading data-ready flag: "); + Serial.println(ret); + } + else if (!data_ready) + Serial.print("data not ready, no new measurement available\n"); + else + break; + delay(100); /* retry in 100ms */ + } while (1); + + ret = sps30_read_measurement(&m); + if (ret < 0) + { + Serial.print("error reading measurement\n"); + } + else + { - struct sps30_measurement m; - char serial[SPS30_MAX_SERIAL_LEN]; - uint16_t data_ready; - int16_t ret; - - do - { - ret = sps30_read_data_ready(&data_ready); - if (ret < 0) - { - Serial.print("error reading data-ready flag: "); - Serial.println(ret); - } - else if (!data_ready) - Serial.print("data not ready, no new measurement available\n"); - else - break; - delay(100); /* retry in 100ms */ - } while (1); - - ret = sps30_read_measurement(&m); - if (ret < 0) - { - Serial.print("error reading measurement\n"); - } - else - { - float pm1 = m.mc_1p0; - float pm2_5 = m.mc_2p5; - float pm4 = m.mc_4p0; - float pm10 = m.mc_10p0; - - if (sensor->measurementCallback) - { - sensor->measurementCallback(sensor->uuid, {pm1, pm2_5, pm4, pm10}); - } - - if (sensor->sendBLE) - { - sensor->notifyBLE(pm1, pm2_5, pm4, pm10); - } - } + float pm1 = m.mc_1p0; + float pm2_5 = m.mc_2p5; + float pm4 = m.mc_4p0; + float pm10 = m.mc_10p0; + + if (measurementCallback) + { + measurementCallback({pm1, pm2_5, pm4, pm10}); } - vTaskDelay(pdMS_TO_TICKS(2000)); + if (sendBLE) + { + notifyBLE(pm1, pm2_5, pm4, pm10); + } } } void DustSensor::notifyBLE(float pm1, float pm2_5, float pm4, float pm10) { - Serial.print("Dust Characteristic: "); - Serial.println(dustCharacteristic); - Serial.printf("Dust: PM1: %f, PM2.5: %f, PM4: %f, PM10: %f\n", pm1, pm2_5, pm4, pm10); - BLEModule::writeBLE(characteristicId, pm1, pm2_5, pm4, pm10); -} + BLEModule::writeBLE(dustCharacteristic, pm1, pm2_5, pm4, pm10); +} \ No newline at end of file diff --git a/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.h b/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.h index 0e6e89b..2dea590 100644 --- a/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.h +++ b/senseBox-bike-atrai-v2/src/sensors/DustSensor/DustSensor.h @@ -1,25 +1,19 @@ #ifndef DUST_SENSOR_H #define DUST_SENSOR_H -#include "../Sensor.h" +#include "../BaseSensor.h" +#include -class DustSensor : public Sensor +// include necceary libraries + +class DustSensor : public BaseSensor { public: - void begin() override; - void subscribe(std::function)> callback) override; - void startSubscription() override; - void stopSubscription() override; - void startBLE() override; - void stopBLE() override; - -private: - std::function)> measurementCallback; - String uuid; - - static const String pmUUID; + DustSensor(); - static void sensorTask(void *pvParameters); +protected: + void initSensor() override; + void readSensorData() override; void notifyBLE(float pm1, float pm2_5, float pm4, float pm10); }; diff --git a/senseBox-bike-atrai-v2/src/sensors/SampleSensor/SampleSensor.cpp b/senseBox-bike-atrai-v2/src/sensors/SampleSensor/SampleSensor.cpp new file mode 100644 index 0000000..9838781 --- /dev/null +++ b/senseBox-bike-atrai-v2/src/sensors/SampleSensor/SampleSensor.cpp @@ -0,0 +1,37 @@ +#include "SampleSensor.h" + +SampleSensor::SampleSensor() : BaseSensor("sampleSensorTask", 2048, 1000) {} + +String sampleUUID = "00000000000000000"; +int sampleCharacteristic = 0; + +// add more if needed + +void SampleSensor::initSensor() +{ + // init sensor + + sampleCharacteristic = BLEModule::createCharacteristic(sampleUUID.c_str()); + // add more if needed +} + +void SampleSensor::readSensorData() +{ + float sampleValue = 0.0; + // read sensor data + + if (measurementCallback) + { + measurementCallback({sampleValue}); + } + + if (sendBLE) + { + notifyBLE(sampleValue); + } +} + +void SampleSensor::notifyBLE(float sampleValue) +{ + BLEModule::writeBLE(sampleCharacteristic, sampleValue); +} \ No newline at end of file diff --git a/senseBox-bike-atrai-v2/src/sensors/SampleSensor/SampleSensor.h b/senseBox-bike-atrai-v2/src/sensors/SampleSensor/SampleSensor.h new file mode 100644 index 0000000..3cf5676 --- /dev/null +++ b/senseBox-bike-atrai-v2/src/sensors/SampleSensor/SampleSensor.h @@ -0,0 +1,19 @@ +#ifndef SAMPLE_SENSOR_H +#define SAMPLE_SENSOR_H + +#include "../BaseSensor.h" + +// include necceary libraries + +class SampleSensor : public BaseSensor +{ +public: + SampleSensor(); + +protected: + void initSensor() override; + void readSensorData() override; + void notifyBLE(float sampleValue); // change this to match the data type of the sensor data +}; + +#endif // SAMPLE_SENSOR_H diff --git a/senseBox-bike-atrai-v2/src/sensors/Sensor.cpp b/senseBox-bike-atrai-v2/src/sensors/Sensor.cpp deleted file mode 100644 index 6b9a34a..0000000 --- a/senseBox-bike-atrai-v2/src/sensors/Sensor.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "Sensor.h" - -void Sensor::setBLEStatus(bool status) -{ - sendBLE = status; -} diff --git a/senseBox-bike-atrai-v2/src/sensors/Sensor.h b/senseBox-bike-atrai-v2/src/sensors/Sensor.h deleted file mode 100644 index b7570a7..0000000 --- a/senseBox-bike-atrai-v2/src/sensors/Sensor.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef SENSOR_H -#define SENSOR_H - -#include -#include -#include -#include "../ble/BLEModule.h" - -class Sensor -{ -public: - virtual void begin() = 0; - virtual void subscribe(std::function)> callback) = 0; - virtual void startSubscription() = 0; - virtual void stopSubscription() = 0; - virtual void startBLE() = 0; - virtual void stopBLE() = 0; - -protected: - bool sendBLE; - bool activeSubscription; - - int characteristicId; - void setBLEStatus(bool status); -}; - -#endif // SENSOR_H diff --git a/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.cpp b/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.cpp index edbfd19..6972c5e 100644 --- a/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.cpp +++ b/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.cpp @@ -1,18 +1,16 @@ #include "TempHumiditySensor.h" -#include -#include -#include "Adafruit_HDC1000.h" +TempHumiditySensor::TempHumiditySensor() : BaseSensor("temperatureHumidityTask", 2048, 1000) {} -const String TempHumiditySensor::tempUUID = "2CDF217435BEFDC44CA26FD173F8B3A8"; -const String TempHumiditySensor::humUUID = "772DF7EC8CDC4EA986AF410ABE0BA257"; +String tempUUID = "2CDF217435BEFDC44CA26FD173F8B3A8"; +String humUUID = "772DF7EC8CDC4EA986AF410ABE0BA257"; int temperatureCharacteristic = 0; int humidityCharacteristic = 0; -Adafruit_HDC1000 hdc = Adafruit_HDC1000(); +Adafruit_HDC1000 hdc; -void TempHumiditySensor::begin() +void TempHumiditySensor::initSensor() { if (!hdc.begin()) { @@ -23,69 +21,26 @@ void TempHumiditySensor::begin() temperatureCharacteristic = BLEModule::createCharacteristic(tempUUID.c_str()); humidityCharacteristic = BLEModule::createCharacteristic(humUUID.c_str()); - - sendBLE = false; - activeSubscription = true; - xTaskCreate(sensorTask, "TempHumiditySensorTask", 2048, this, 1, NULL); -} - -void TempHumiditySensor::subscribe(std::function)> callback) -{ - this->measurementCallback = callback; -} - -void TempHumiditySensor::startSubscription() -{ - activeSubscription = true; -} - -void TempHumiditySensor::stopSubscription() -{ - activeSubscription = false; -} - -void TempHumiditySensor::startBLE() -{ - setBLEStatus(true); -} - -void TempHumiditySensor::stopBLE() -{ - setBLEStatus(false); } -void TempHumiditySensor::sensorTask(void *pvParameters) +void TempHumiditySensor::readSensorData() { - TempHumiditySensor *sensor = static_cast(pvParameters); + float temperature = hdc.readTemperature(); + float humidity = hdc.readHumidity(); - while (true) + if (measurementCallback) { - if (sensor->activeSubscription) - { - float temperature = hdc.readTemperature(); - float humidity = hdc.readHumidity(); - - if (sensor->measurementCallback) - { - sensor->measurementCallback(sensor->uuid, {temperature, humidity}); - } - - if (sensor->sendBLE) - { - sensor->notifyBLE(temperature, humidity); - } - } + measurementCallback({temperature, humidity}); + } - vTaskDelay(pdMS_TO_TICKS(5000)); + if (sendBLE) + { + notifyBLE(temperature, humidity); } } -void TempHumiditySensor::notifyBLE(float temperature, float humidity) +void TempHumiditySensor::notifyBLE(float temoperature, float humidity) { - Serial.println("Notifying BLE"); - Serial.println(temperature); - Serial.println(temperatureCharacteristic); - - BLEModule::writeBLE(temperatureCharacteristic, temperature); + BLEModule::writeBLE(temperatureCharacteristic, temoperature); BLEModule::writeBLE(humidityCharacteristic, humidity); -} +} \ No newline at end of file diff --git a/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.h b/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.h index 728c068..84f0448 100644 --- a/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.h +++ b/senseBox-bike-atrai-v2/src/sensors/TempHumiditySensor/TempHumiditySensor.h @@ -1,27 +1,18 @@ #ifndef TEMP_HUMIDITY_SENSOR_H #define TEMP_HUMIDITY_SENSOR_H -#include "../Sensor.h" +#include "../BaseSensor.h" +#include "Adafruit_HDC1000.h" -class TempHumiditySensor : public Sensor +class TempHumiditySensor : public BaseSensor { public: - void begin() override; - void subscribe(std::function)> callback) override; - void startSubscription() override; - void stopSubscription() override; - void startBLE() override; - void stopBLE() override; + TempHumiditySensor(); -private: - std::function)> measurementCallback; - String uuid; - - static const String tempUUID; - static const String humUUID; - - static void sensorTask(void *pvParameters); +protected: + void initSensor() override; + void readSensorData() override; void notifyBLE(float temperature, float humidity); }; -#endif // TEMP_HUMIDITY_SENSOR_H +#endif // DISTANCESENSOR_H