diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp index dd1536f37067afc7e4dccb66783ea7d116af0709..73f9ce623678c393d97d6730f9a721e27eef9d68 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp +++ b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp @@ -317,29 +317,31 @@ String RainGaugeSensor::getPrecipitationStr() return getValueStr((float)(precipitation / 10.0)); } -word SoilMoistureSensor::getMoistureTemp() +float SoilMoistureSensor::getMoistureTemp() { readRegister(0, 2); // start register at 0, read 2 variables (vwc, soil temp) - moistureRaw = word(answerFrame[3], answerFrame[4]); + moistureRaw = (answerFrame[3] << 8) + answerFrame[4]; + // TODO: neg. temp check if (answerFrame[5] < 0x80) { - temperatureRaw = word(answerFrame[5], answerFrame[6]); + temperatureRaw = (answerFrame[5] << 8) + answerFrame[6]; } else { - temperatureRaw = word(answerFrame[5], answerFrame[6]) - 65536; + temperatureRaw = (answerFrame[5]<<8) + answerFrame[6] - 65536; } + Serial.begin(115200); Serial.print("Soil moisture: "); Serial.print((moistureRaw - moistureOffset) / 10.0, 1); Serial.println(" %"); Serial.print("Temperature: "); Serial.print((temperatureRaw - temperatureOffset) / 10.0 , 1); Serial.println(" °C"); - return temperatureRaw; + return (temperatureRaw - temperatureOffset) / 10.0; } -word SoilMoistureSensor::getMoisture(){ - return moistureRaw - moistureOffset; +float SoilMoistureSensor::getMoisture(){ + return (moistureRaw - moistureOffset) / 10.0; } String SoilMoistureSensor::getMoistureStr() diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h index 97d54a36d71df4cde00a8714f19b16d75d8ba350..f2a130254e4457a6a300b454c5a5ad43a04f2865 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h +++ b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h @@ -60,14 +60,14 @@ class SoilMoistureSensor : public SentecSensorRS485 public: using SentecSensorRS485::SentecSensorRS485; // vwc: volumetric water content [%] - word moistureRaw = 0; + uint16_t moistureRaw = 0; int moistureOffset = 0; // soil temperature [deg C] int temperatureRaw = 0; int temperatureOffset = 0; - word getMoistureTemp(); - word getMoisture(); + float getMoistureTemp(); + float getMoisture(); String getMoistureStr(); String getTemperatureStr(); }; diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp index 1a0f5d282b3b57d5a5bab03a3b394492f5da955f..e41bca60c307f861c73eb81a40066c3090641f95 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp +++ b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp @@ -8,7 +8,7 @@ #define POWER_SWITCH_PIN_12V 12 #define POWER_SWITCH_PIN_5V 13 -// Configer sensors +// Configure sensors SoftwareSerial RS485Serial(TXPin, RXPin); SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN); RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial, 2, RE_DE_PIN); // Give 2 Sensor Adress 2 @@ -35,42 +35,42 @@ out_data_rs485 Forte_RS485::readData() // Wait for sensors to power up // TODO minimize delay delay(500); - out_data_rs485 readData; - readData.solarRadiation = solarSensor.getSolarRadiation(); - readData.soilTemperature3 = soilSensor3.getMoistureTemp(); - readData.soilTemperature4 = soilSensor4.getMoistureTemp(); - readData.soilTemperature5 = soilSensor5.getMoistureTemp(); - readData.soilMoisture3 = soilSensor3.getMoisture(); - readData.soilMoisture4 = soilSensor4.getMoisture(); - readData.soilMoisture5 = soilSensor5.getMoisture(); - readData.precipitation = rainGauge.getInstantaneousPrecipitation(); + out_data_rs485 output; + output.solarRadiation = solarSensor.getSolarRadiation(); + output.soilTemperature3 = soilSensor3.getMoistureTemp(); + output.soilTemperature4 = soilSensor4.getMoistureTemp(); + output.soilTemperature5 = soilSensor5.getMoistureTemp(); + output.soilMoisture3 = soilSensor3.getMoisture(); + output.soilMoisture4 = soilSensor4.getMoisture(); + output.soilMoisture5 = soilSensor5.getMoisture(); + output.precipitation = rainGauge.getInstantaneousPrecipitation(); digitalWrite(POWER_SWITCH_PIN_12V, LOW); digitalWrite(POWER_SWITCH_PIN_5V, LOW); gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_12V); gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_5V); - return readData; + return output; } std::list<Message> Forte_RS485::buildMessages() { std::list<Message> messages; - out_data_rs485 readData; - MeasurementData solarRadiation {readData.solarRadiation,0,{},measurementTypeToString.at(MeasurementType::SOLAR_RADIATION)}; - MeasurementData soilTemp3{readData.soilTemperature3,0,{},measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_3)}; - MeasurementData soilTemp4 {readData.soilTemperature4,0,{},measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_4)}; - MeasurementData soilTemp5 {readData.soilTemperature5,0,{},measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_5)}; - MeasurementData soilMoisture3 {readData.soilMoisture3,0,{},measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_3)}; - MeasurementData soilMoisture4 {readData.soilMoisture4,0,{},measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_4)}; - MeasurementData soilMoisture5 {readData.soilMoisture5,0,{},measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_5)}; + out_data_rs485 output = readData(); + MeasurementData solarRadiation {output.solarRadiation, measurementTypeToString.at(MeasurementType::SOLAR_RADIATION)}; + MeasurementData soilTemp3{output.soilTemperature3, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_3)}; + MeasurementData soilTemp4 {output.soilTemperature4, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_4)}; + MeasurementData soilTemp5 {output.soilTemperature5, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_5)}; + MeasurementData soilMoisture3 {output.soilMoisture3, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_3)}; + MeasurementData soilMoisture4 {output.soilMoisture4, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_4)}; + MeasurementData soilMoisture5 {output.soilMoisture5, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_5)}; - messages.emplace_back(Message{solarRadiation,sensorInformation, 0}); - messages.emplace_back(Message{soilTemp3,sensorInformation, 0}); - messages.emplace_back(Message{soilTemp4,sensorInformation, 0}); - messages.emplace_back(Message{soilTemp5,sensorInformation, 0}); - messages.emplace_back(Message{soilMoisture3,sensorInformation, 0}); - messages.emplace_back(Message{soilMoisture4,sensorInformation, 0}); - messages.emplace_back(Message{soilMoisture5,sensorInformation, 0}); + messages.emplace_back(Message{solarRadiation,sensorInformation, Time::getInstance().getEpochSeconds()}); + messages.emplace_back(Message{soilTemp3,sensorInformation, Time::getInstance().getEpochSeconds()}); + messages.emplace_back(Message{soilTemp4,sensorInformation, Time::getInstance().getEpochSeconds()}); + messages.emplace_back(Message{soilTemp5,sensorInformation, Time::getInstance().getEpochSeconds()}); + messages.emplace_back(Message{soilMoisture3,sensorInformation, Time::getInstance().getEpochSeconds()}); + messages.emplace_back(Message{soilMoisture4,sensorInformation, Time::getInstance().getEpochSeconds()}); + messages.emplace_back(Message{soilMoisture5,sensorInformation, Time::getInstance().getEpochSeconds()}); return messages; } diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp index c0eddbcf4e8df822e830affdef44e7368c2b0965..0bac7654280994dcbef1d242f2dce10e19952aab 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp +++ b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp @@ -9,14 +9,14 @@ #include "SentecSensors.h" struct out_data_rs485{ - word solarRadiation; - word soilMoisture3; - word soilTemperature3; - word soilMoisture4; - word soilTemperature4; - word soilMoisture5; - word soilTemperature5; - word precipitation; + float solarRadiation; + float soilMoisture3; + float soilTemperature3; + float soilMoisture4; + float soilTemperature4; + float soilMoisture5; + float soilTemperature5; + float precipitation; }; class Forte_RS485 : public ForteSensor <out_data_rs485> { @@ -28,7 +28,6 @@ class Forte_RS485 : public ForteSensor <out_data_rs485> { private: const SensorInformation sensorInformation{"RS485", Protocol::RS485}; - out_data_rs485 data; enum class MeasurementType { SOLAR_RADIATION,