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 4000525ae0bf9ee052574a4eb3f08034473c834f..f2a130254e4457a6a300b454c5a5ad43a04f2865 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h +++ b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h @@ -60,17 +60,17 @@ 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(); }; -#endif \ No newline at end of file +#endif diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp index 28eedfb4ca218230fba60d353e867261bc46a8c3..81d1195752ca4d17328cae4a556c8eb07247bdaa 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp +++ b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp @@ -64,11 +64,11 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) received_msg.epoch_seconds); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset Serial.println(Time::getInstance().getEpochSeconds()); if (!preferences.isKey("host")) { - preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)); - ESP_LOGI(TAG, "host MAC address saved to flash"); + preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)); + ESP_LOGI(TAG, "host MAC address saved to flash"); - // add host to peers - add_host_to_peers(received_msg); + // add host to peers + add_host_to_peers(received_msg); } } case hostChange:{ @@ -80,10 +80,17 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) esp_now_del_peer(old); } // add new host + preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)); + ESP_LOGI(TAG, "Host Mac address saved to flash:"); + for(int i=0; i<6; i++){ + Serial.print(received_msg.host[i], HEX); + Serial.print(":"); + } + Serial.println(); add_host_to_peers(received_msg); } default:{ - return; + break; } } preferences.end(); @@ -110,7 +117,6 @@ esp_err_t espnow_setup() hostInfo.encrypt = false; esp_now_add_peer(&hostInfo); - preferences.clear(); esp_now_register_recv_cb(on_data_recv); esp_now_register_send_cb(on_data_sent); diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp index 7778d02e7cfedb81e1e2c816e90899ac5afe8db3..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,33 +35,43 @@ out_data_rs485 Forte_RS485::readData() // Wait for sensors to power up // TODO minimize delay delay(500); - - data.solarRadiation = solarSensor.getSolarRadiation(); - data.moisture = soilSensor4.getMoisture(); - data.moisture_temperature = soilSensor3.getMoistureTemp(); - data.moisture_temperature = soilSensor4.getMoistureTemp(); - data.moisture_temperature = soilSensor5.getMoistureTemp(); - data.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 data; + return output; } std::list<Message> Forte_RS485::buildMessages() { std::list<Message> messages; - MeasurementData moisture {data.moisture,0,{},measurementTypeToString.at(MeasurementType::MOISTURE)}; - MeasurementData moisture_temperature {data.moisture_temperature,0,{},measurementTypeToString.at(MeasurementType::MOISTURE_TEMPERATURE)}; - MeasurementData solarRadiation {data.solarRadiation,0,{},measurementTypeToString.at(MeasurementType::SOLARRADIATION)}; - MeasurementData precipation {data.precipitation,0,{},measurementTypeToString.at(MeasurementType::PRECIPITATION)}; - messages.emplace_back(Message{moisture ,sensorInformation, 0}); - messages.emplace_back(Message{moisture_temperature ,sensorInformation, 0}); - messages.emplace_back(Message{solarRadiation ,sensorInformation, 0}); - messages.emplace_back(Message{precipation,sensorInformation, 0}); - ESP_LOGE(sensorInformation.getSensorName().c_str(), "test"); + 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, 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 6950c41cafca0ae928bfbf21d89314e8b6fb5190..0bac7654280994dcbef1d242f2dce10e19952aab 100644 --- a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp +++ b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp @@ -5,29 +5,20 @@ // RTC (I2C) #include "RTClib.h" #include "Message.hpp" -#include "Protocol.hpp" -#include "SensorInformation.hpp" -#include "SentecSensors.h" #include "ForteSensor.hpp" +#include "SentecSensors.h" struct out_data_rs485{ - word solarRadiation; - word moisture; - word moisture_temperature; - 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> { - - public: - void setup(); - out_data_rs485 read_data(); - - private: - out_data_rs485 data; -}; -*/ class Forte_RS485 : public ForteSensor <out_data_rs485> { public: void setup() override; @@ -37,15 +28,27 @@ class Forte_RS485 : public ForteSensor <out_data_rs485> { private: const SensorInformation sensorInformation{"RS485", Protocol::RS485}; - out_data_rs485 data; - enum class MeasurementType { MOISTURE,MOISTURE_TEMPERATURE,SOLARRADIATION,PRECIPITATION}; + enum class MeasurementType { + SOLAR_RADIATION, + SOIL_MOISTURE_3, + SOIL_TEMPERATURE_3, + SOIL_MOISTURE_4, + SOIL_TEMPERATURE_4, + SOIL_MOISTURE_5, + SOIL_TEMPERATURE_5, + PRECIPITATION + }; + std::map<MeasurementType, const char *> measurementTypeToString = { - {MeasurementType::MOISTURE, "MOISTURE"}, - {MeasurementType::MOISTURE_TEMPERATURE, "MOISTURE_TEMPERATURE"}, - {MeasurementType::SOLARRADIATION, "SOLARRADIATION"}, - {MeasurementType::PRECIPITATION, "PRECIPATION"} + {MeasurementType::SOLAR_RADIATION, "SOLAR_RADIATION"}, + {MeasurementType::SOIL_MOISTURE_3, "SOIL_MOISTURE_3"}, + {MeasurementType::SOIL_TEMPERATURE_3, "SOIL_TEMPERATURE_3"}, + {MeasurementType::SOIL_MOISTURE_4, "SOIL_MOISTURE_4"}, + {MeasurementType::SOIL_TEMPERATURE_4, "SOIL_TEMPERATURE_4"}, + {MeasurementType::SOIL_MOISTURE_5, "SOIL_MOISTURE_5"}, + {MeasurementType::SOIL_TEMPERATURE_5, "SOIL_TEMPERATURE_5"}, + {MeasurementType::PRECIPITATION, "PRECIPATION"} }; }; - #endif \ No newline at end of file diff --git a/Tests/Mieming/host_esp32Wroom/client/src/main.cpp b/Tests/Mieming/host_esp32Wroom/client/src/main.cpp index 2397d19834c3fe16fb6726d163b5eaf084299337..22392e6335b86634baa4215c3e924413699bf52f 100644 --- a/Tests/Mieming/host_esp32Wroom/client/src/main.cpp +++ b/Tests/Mieming/host_esp32Wroom/client/src/main.cpp @@ -8,33 +8,18 @@ Forte_RS485 rs485; + void setup() { rs485.setup(); -espnow_setup(); - - out_data_rs485 data_rs485 = rs485.readData(); - - Serial.println("***********************************************************"); - Serial.print("Moisture: "); - Serial.println(data_rs485.moisture); - Serial.print("Moisture Temperature: "); - Serial.println(data_rs485.moisture_temperature); - Serial.print("Solar: "); - Serial.println(data_rs485.solarRadiation); - Serial.print("Rain mm: "); - Serial.println(data_rs485.precipitation); - - // send the data - // moistere 1 - // moisture_temperature 2 - // solarRadiation 3 - // precipitation 4 -try { + espnow_setup(); +} + +void loop() { + try { auto messages = rs485.buildMessages(); - for (const Message &message : messages) { if(message.send() != ESP_OK){ RtcMemory::store(message.getMessageAsMinifiedJsonString()); @@ -55,5 +40,3 @@ try { esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start(); } - -void loop() {}