From 1bd5306cd69d0ce21c32ace0c85b65fd80b85919 Mon Sep 17 00:00:00 2001 From: Lemonochrome Date: Wed, 13 Dec 2023 13:36:40 +0100 Subject: [PATCH] Moisture notifying. Proper json formatting. Need to fix infinite loop display bug. --- embedded/lib/DataHandler/DataHandler.cpp | 24 ++++++++++++-- embedded/lib/DataHandler/DataHandler.hpp | 3 +- embedded/src/main.cpp | 41 ++++++++++++++++++++---- 3 files changed, 58 insertions(+), 10 deletions(-) diff --git a/embedded/lib/DataHandler/DataHandler.cpp b/embedded/lib/DataHandler/DataHandler.cpp index 8c6a5b2..3e9173d 100644 --- a/embedded/lib/DataHandler/DataHandler.cpp +++ b/embedded/lib/DataHandler/DataHandler.cpp @@ -18,8 +18,28 @@ String DataHandler::getJsonData() { String DataHandler::buildJson() { StaticJsonDocument<200> document; // Taille = 200 - document["temperature"] = temperature; - document["humidity"] = humidity; + + String MoistureSensorStatus; + if (humidity > 10) { + MoistureSensorStatus = "active"; + } else { + MoistureSensorStatus = "inactive"; + } + + String soilMoistureLevel; + if (humidity < 550) { + soilMoistureLevel = "dry"; + } else if (humidity >= 550 && humidity <= 680) { + soilMoistureLevel = "moist"; + } else { + soilMoistureLevel = "wet"; + } + + document["device"]["device_id"] = "clv_0001"; + document["device"]["moisture_sensor_status"] = MoistureSensorStatus; + document["raw_sensor_data"]["temperature"] = temperature; + document["raw_sensor_data"]["soil_humidity"] = humidity; + document["plant_management"]["soil_moisture"] = soilMoistureLevel; String jsonFormattedData; serializeJson(document, jsonFormattedData); diff --git a/embedded/lib/DataHandler/DataHandler.hpp b/embedded/lib/DataHandler/DataHandler.hpp index 5335e3a..54ba2cf 100644 --- a/embedded/lib/DataHandler/DataHandler.hpp +++ b/embedded/lib/DataHandler/DataHandler.hpp @@ -11,11 +11,12 @@ public: static DataHandler instance; return instance; } + // Public functions String getJsonData(); void updateTemperatureData(float temperature); void updateHumidityData(float humidity); - + private: // Singleton DataHandler(); diff --git a/embedded/src/main.cpp b/embedded/src/main.cpp index 83b1a66..6d81078 100644 --- a/embedded/src/main.cpp +++ b/embedded/src/main.cpp @@ -15,11 +15,20 @@ Component humidity(ComponentType::Analog, PIN_A0); +float SoilHumidity; +float Temperature; + void setup() { Serial.begin(9600); Display::Screen::GetInstance().Setup(const_cast(u8g2_font_busdisplay8x5_tr)); ServerHandler::GetInstance().setup(ssid, pswd); + + Serial.print("Connected to WiFi. IP address: "); + Serial.println(WiFi.localIP()); + + pinMode(D5, OUTPUT); + digitalWrite(D5, LOW); } void loop() @@ -36,15 +45,33 @@ void loop() } // If serverHandler finished showing ip. - if (serverHandler.showNext()) - screen.loop(); + if (serverHandler.showNext()) { + //screen.loop(); -> Cause des problèmes + } + + SoilHumidity = static_cast(std::any_cast(humidity.getValue())); + Temperature = random(1800, 2200) / 100.0; + + dataHandler.updateTemperatureData(Temperature); + dataHandler.updateHumidityData(SoilHumidity); + + if (SoilHumidity < 550) { + Serial.println("Soil humidity low. Please water the plant."); + digitalWrite(D5, HIGH); + } else if (SoilHumidity >= 550 && SoilHumidity <= 680) { + Serial.println("Perfect soil moisture condition. Idle..."); + digitalWrite(D5, LOW); + } else { + Serial.println("Soil too wet."); + digitalWrite(D5, LOW); + delay(400); + digitalWrite(D5, HIGH); + delay(400); + } + + - dataHandler.updateTemperatureData(random(1800, 2200) / 100.0); - // 0 -> air(0), 0-300 -> dry(20), 300-700 -> humid (580), 700-950 -> water(940) - dataHandler.updateHumidityData(static_cast(std::any_cast(humidity.getValue()))); - Serial.println(dataHandler.getJsonData()); // When showing IP, delay is faster. delay(serverHandler.showNext() ? 1000 : 250); - serverHandler.loop(); } \ No newline at end of file