Skip to content
Snippets Groups Projects
Verified Commit 95b035ce authored by Zoe Michaela Dietmar Pfister's avatar Zoe Michaela Dietmar Pfister :gay_pride_flag:
Browse files

WIP: Remove sentec soil sensors from codebase (felt good)

parent e8c88901
No related branches found
No related tags found
2 merge requests!39Merge Develop into Main,!30Renamed Sentec Sensors, made RS485 serial connection a singleton shared...
Pipeline #101717 passed
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$"> <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<contentRoot DIR="$PROJECT_DIR$/.." />
</component>
</project> </project>
\ No newline at end of file
# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
#
# If you need to override existing CMake configuration or add extra,
# please create `CMakeListsUser.txt` in the root of project.
# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
cmake_minimum_required(VERSION 3.13)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER_WORKS 1)
set(CMAKE_CXX_COMPILER_WORKS 1)
project("ESPcam" C CXX)
include(CMakeListsPrivate.txt)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
include(CMakeListsUser.txt)
endif()
add_custom_target(
Production ALL
COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(
Debug ALL
COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_executable(Z_DUMMY_TARGET ${SRC_LIST})
This diff is collapsed.
...@@ -14,6 +14,7 @@ board = esp32cam ...@@ -14,6 +14,7 @@ board = esp32cam
framework = arduino framework = arduino
monitor_speed = 115200 monitor_speed = 115200
lib_ldf_mode = deep lib_ldf_mode = deep
monitor_port = /dev/ttyACM1
lib_extra_dirs = lib_extra_dirs =
../libs ../libs
../../shared-libs ../../shared-libs
......
#include "NoDataAvailableException.hpp" #include "NoDataAvailableException.hpp"
#include "SentecSoilMoistureSensor.h"
#include "SentecRainGaugeSensor.h" #include "SentecRainGaugeSensor.h"
#include "SentecSolarRadiationSensor.h" #include "SentecSolarRadiationSensor.h"
#include <SentecSensors.h> #include <SentecSensors.h>
......
//
// Created by zoe on 2/20/23.
//
#include "SentecSoilMoistureSensor.h"
out_data_soil_moisture SoilMoistureSensor::getMoistureTemp() {
auto error = readRegister(0,
2); // start register at 0, read 2 variables (vwc, soil temp)
moistureRaw = (answerFrame[3] << 8) + answerFrame[4];
// TODO: neg. temp check
if (answerFrame[5] < 0x80) {
temperatureRaw = (answerFrame[5] << 8) + answerFrame[6];
} else {
temperatureRaw = (answerFrame[5] << 8) + answerFrame[6] - 65536;
}
auto soilTemperature = getTemperature();
auto soilMoisture = getMoisture();
ESP_LOGI("SOILMOISTURE",
"Soil moisture: %.1f %",
soilMoisture);
ESP_LOGI("SOILMOISTURE",
"Soil temperature: %.1f °C",
soilTemperature);
return {soilMoisture, soilTemperature, error};
}
float SoilMoistureSensor::getMoisture() {
return (moistureRaw - moistureOffset) / 10.0;
}
float SoilMoistureSensor::getTemperature() {
return (temperatureRaw - temperatureOffset) / 10.0;
}
String SoilMoistureSensor::getMoistureStr() {
return getValueStr((float) ((moistureRaw - moistureOffset) / 10.0));
}
String SoilMoistureSensor::getTemperatureStr() {
return getValueStr((float) ((temperatureRaw - temperatureOffset) / 10.0));
}
SensorInformation SoilMoistureSensor::getSensorInformation() const {
return SensorInformation(HardwareName::SEM225, SensorProtocol::RS485);
}
out_data_soil_moisture SoilMoistureSensor::readData() {
return getMoistureTemp();
}
std::list<Message> SoilMoistureSensor::buildMessages() {
auto data = readData();
Measurement soilMoisture{data.moisture, address, NO_I2C_ADDRESS,
MeasurementType::SOIL_MOISTURE, data.soilError};
Measurement soilTemperature{data.temperature, address, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
data.soilError};
return {Message{soilMoisture, getSensorInformation(),
Time::getInstance().getEpochSeconds()},
Message{soilTemperature, getSensorInformation(),
Time::getInstance().getEpochSeconds()}};
}
void SoilMoistureSensor::setup() {
// TODO: check if rs485 serial is active
}
//
// Created by zoe on 2/20/23.
//
#ifndef CLIENT_CENTRAL_MAST_SENTECSOILMOISTURESENSOR_H
#define CLIENT_CENTRAL_MAST_SENTECSOILMOISTURESENSOR_H
#include "SentecSensors.h"
#include <ForteSensor.hpp>
#include <Message.hpp>
struct out_data_soil_moisture {
float moisture;
float temperature;
ErrorType soilError;
};
class SoilMoistureSensor
: public SentecSensorRS485, ForteSensor<out_data_soil_moisture> {
public:
using SentecSensorRS485::SentecSensorRS485;
// vwc: volumetric water content [%]
uint16_t moistureRaw = 0;
int moistureOffset = 0;
// soil temperature [deg C]
int temperatureRaw = 0;
int temperatureOffset = 0;
void setup() override;
out_data_soil_moisture readData() override;
std::list<Message> buildMessages() override;
[[nodiscard]] SensorInformation getSensorInformation() const override;
private:
out_data_soil_moisture getMoistureTemp();
float getMoisture();
float getTemperature();
String getMoistureStr();
String getTemperatureStr();
};
#endif //CLIENT_CENTRAL_MAST_SENTECSOILMOISTURESENSOR_H
...@@ -46,11 +46,11 @@ std::list<Message> ForteINA219::buildMessages() { ...@@ -46,11 +46,11 @@ std::list<Message> ForteINA219::buildMessages() {
out_data_ina219 measurements = readData(); out_data_ina219 measurements = readData();
messages.emplace_back(measurements.shuntVoltage_mV, sensorInformation, 0); messages.emplace_back(measurements.shuntVoltage_mV, sensorInformation, Time::getInstance().getEpochSeconds());
messages.emplace_back(measurements.busVoltage_V, sensorInformation, 0); messages.emplace_back(measurements.busVoltage_V, sensorInformation, Time::getInstance().getEpochSeconds());
messages.emplace_back(measurements.current_mA, sensorInformation, 0); messages.emplace_back(measurements.current_mA, sensorInformation, Time::getInstance().getEpochSeconds());
messages.emplace_back(measurements.power_mW, sensorInformation, 0); messages.emplace_back(measurements.power_mW, sensorInformation, Time::getInstance().getEpochSeconds());
messages.emplace_back(measurements.loadVoltage_V, sensorInformation, 0); messages.emplace_back(measurements.loadVoltage_V, sensorInformation, Time::getInstance().getEpochSeconds());
// messages.emplace_back(ina219OverflowData, sensorInformation, 0); TODO: Do we need this as an extra message? // messages.emplace_back(ina219OverflowData, sensorInformation, 0); TODO: Do we need this as an extra message?
return messages; return messages;
......
#include "rs485.hpp" #include "rs485.hpp"
#include "SentecSoilMoistureSensor.h"
#include "SentecRainGaugeSensor.h" #include "SentecRainGaugeSensor.h"
#include "SentecSolarRadiationSensor.h" #include "SentecSolarRadiationSensor.h"
// RS485 control // RS485 control
...@@ -19,10 +18,6 @@ SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN); ...@@ -19,10 +18,6 @@ SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN);
RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial, RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial,
2, 2,
RE_DE_PIN); // Give 2 Sensor Adress 2 RE_DE_PIN); // Give 2 Sensor Adress 2
SoilMoistureSensor
soilSensor3 = SoilMoistureSensor(&RS485Serial, 3, RE_DE_PIN); //.....
SoilMoistureSensor soilSensor4 = SoilMoistureSensor(&RS485Serial, 4, RE_DE_PIN);
SoilMoistureSensor soilSensor5 = SoilMoistureSensor(&RS485Serial, 5, RE_DE_PIN);
void Forte_RS485::setup() { void Forte_RS485::setup() {
// configure the pins to be output only // configure the pins to be output only
...@@ -42,9 +37,6 @@ out_data_rs485 Forte_RS485::readData() { ...@@ -42,9 +37,6 @@ out_data_rs485 Forte_RS485::readData() {
out_data_rs485 output; out_data_rs485 output;
unsigned long ts = millis(); unsigned long ts = millis();
output.solar = solarSensor.readData(); output.solar = solarSensor.readData();
output.soil3 = soilSensor3.readData();
output.soil4 = soilSensor4.readData();
output.soil5 = soilSensor5.readData();
output.precipitation = rainGauge.readData(); output.precipitation = rainGauge.readData();
digitalWrite(POWER_SWITCH_PIN_12V, LOW); digitalWrite(POWER_SWITCH_PIN_12V, LOW);
digitalWrite(POWER_SWITCH_PIN_5V, LOW); digitalWrite(POWER_SWITCH_PIN_5V, LOW);
...@@ -64,40 +56,10 @@ std::list<Message> Forte_RS485::buildMessages() { ...@@ -64,40 +56,10 @@ std::list<Message> Forte_RS485::buildMessages() {
Measurement precipitation Measurement precipitation
{output.precipitation.precipitation, 2, NO_I2C_ADDRESS, {output.precipitation.precipitation, 2, NO_I2C_ADDRESS,
MeasurementType::PRECIPITATION, output.precipitation.precipitationError}; MeasurementType::PRECIPITATION, output.precipitation.precipitationError};
Measurement soilTemp3{output.soil3.temperature, 3, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
output.soil3.soilError};
Measurement soilTemp4{output.soil4.temperature, 4, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
output.soil4.soilError};
Measurement soilTemp5{output.soil5.temperature, 5, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
output.soil5.soilError};
Measurement soilMoisture3
{output.soil3.moisture, 3, NO_I2C_ADDRESS, MeasurementType::SOIL_MOISTURE,
output.soil3.soilError};
Measurement soilMoisture4
{output.soil4.moisture, 4, NO_I2C_ADDRESS, MeasurementType::SOIL_MOISTURE,
output.soil4.soilError};
Measurement soilMoisture5
{output.soil5.moisture, 5, NO_I2C_ADDRESS, MeasurementType::SOIL_MOISTURE,
output.soil5.soilError};
messages.emplace_back(solarRadiation, sensorInformation, messages.emplace_back(solarRadiation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
messages.emplace_back(soilTemp3, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilTemp4, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilTemp5, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilMoisture3, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilMoisture4, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilMoisture5, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(precipitation, messages.emplace_back(precipitation,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
#define _RS485 #define _RS485
#include <MeasurementTypes.h> #include <MeasurementTypes.h>
#include <SentecSoilMoistureSensor.h>
#include <SentecSolarRadiationSensor.h> #include <SentecSolarRadiationSensor.h>
#include <SentecRainGaugeSensor.h> #include <SentecRainGaugeSensor.h>
#include "Message.hpp" #include "Message.hpp"
...@@ -10,9 +9,6 @@ ...@@ -10,9 +9,6 @@
#include "SentecSensors.h" #include "SentecSensors.h"
struct out_data_rs485 { struct out_data_rs485 {
out_data_soil_moisture soil3;
out_data_soil_moisture soil4;
out_data_soil_moisture soil5;
out_data_solar_radiation solar; out_data_solar_radiation solar;
out_data_rain_gauge precipitation; out_data_rain_gauge precipitation;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment