Skip to content

Commit

Permalink
chore: rewrite basesensor to superclass
Browse files Browse the repository at this point in the history
  • Loading branch information
felixerdy committed Jun 7, 2024
1 parent 876365e commit 42188d0
Show file tree
Hide file tree
Showing 17 changed files with 303 additions and 454 deletions.
55 changes: 0 additions & 55 deletions senseBox-bike-atrai-v2/boards/sensebox_mcu_esp32s2.json

This file was deleted.

7 changes: 2 additions & 5 deletions senseBox-bike-atrai-v2/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
21 changes: 14 additions & 7 deletions senseBox-bike-atrai-v2/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "sensors/TempHumiditySensor/TempHumiditySensor.h"
#include "sensors/DustSensor/DustSensor.h"
#include "sensors/DistanceSensor/DistanceSensor.h"
#include "sensors/AccelerationSensor/AccelerationSensor.h"
#include "display/Display.h"
#include "ble/BLEModule.h"

TempHumiditySensor tempHumiditySensor;
#include "Adafruit_NeoPixel.h"

DustSensor dustSensor;
TempHumiditySensor tempHumiditySensor;
DistanceSensor distanceSensor;
AccelerationSensor accelerationSensor;

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);
Expand Down Expand Up @@ -58,8 +65,8 @@ void setup()
// Serial.printf("DustSensor [%s]\n", uuid.c_str());
// }, "UUID-Dust");

// distanceSensor.subscribe([](String uuid, std::vector<float> values)
// { Serial.printf("DistanceSensor [%s]: %.2f\n", uuid.c_str(), values[0]); });
// distanceSensor.subscribe([](std::vector<float> values)
// { Serial.printf("DistanceSensor [%s]: %.2f\n", values[0]); });

// accelerationSensor.subscribe([](String uuid, std::vector<float> values)
// {
Expand All @@ -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();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
#include "AccelerationSensor.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

#include <Adafruit_MPU6050.h>
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");
Expand All @@ -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<void(String, std::vector<float>)> 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<AccelerationSensor *>(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);
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
#ifndef ACCELERATION_SENSOR_H
#define ACCELERATION_SENSOR_H

#include "../Sensor.h"
#include "../BaseSensor.h"
#include <Adafruit_MPU6050.h>

class AccelerationSensor : public Sensor
class AccelerationSensor : public BaseSensor
{
public:
void begin() override;
void subscribe(std::function<void(String, std::vector<float>)> callback) override;
void startSubscription() override;
void stopSubscription() override;
void startBLE() override;
void stopBLE() override;
AccelerationSensor();

private:
std::function<void(String, std::vector<float>)> 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);
};

Expand Down
49 changes: 49 additions & 0 deletions senseBox-bike-atrai-v2/src/sensors/BaseSensor.cpp
Original file line number Diff line number Diff line change
@@ -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<void(std::vector<float>)> 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<BaseSensor *>(pvParameters);
while (true)
{
if (sensor->activeSubscription)
{
sensor->readSensorData();
}
vTaskDelay(pdMS_TO_TICKS(sensor->taskDelay));
}
}
35 changes: 35 additions & 0 deletions senseBox-bike-atrai-v2/src/sensors/BaseSensor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#ifndef BASESENSOR_H
#define BASESENSOR_H

#include <Arduino.h>
#include <functional>
#include <vector>
#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<void(std::vector<float>)> 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<void(std::vector<float>)> measurementCallback;

private:
const char *taskName;
uint32_t taskStackSize;
uint32_t taskDelay;
};

#endif // BASESENSOR_H
Loading

0 comments on commit 42188d0

Please sign in to comment.