Moisture notifying. Proper json formatting. Need to fix infinite loop display bug.

This commit is contained in:
Lemonochrome 2023-12-13 13:36:40 +01:00
parent 7e1d7f1526
commit 1bd5306cd6
3 changed files with 58 additions and 10 deletions

View file

@ -18,8 +18,28 @@ String DataHandler::getJsonData() {
String DataHandler::buildJson() { String DataHandler::buildJson() {
StaticJsonDocument<200> document; // Taille = 200 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; String jsonFormattedData;
serializeJson(document, jsonFormattedData); serializeJson(document, jsonFormattedData);

View file

@ -11,6 +11,7 @@ public:
static DataHandler instance; static DataHandler instance;
return instance; return instance;
} }
// Public functions // Public functions
String getJsonData(); String getJsonData();
void updateTemperatureData(float temperature); void updateTemperatureData(float temperature);

View file

@ -15,11 +15,20 @@
Component humidity(ComponentType::Analog, PIN_A0); Component humidity(ComponentType::Analog, PIN_A0);
float SoilHumidity;
float Temperature;
void setup() void setup()
{ {
Serial.begin(9600); Serial.begin(9600);
Display::Screen::GetInstance().Setup(const_cast<uint8_t*>(u8g2_font_busdisplay8x5_tr)); Display::Screen::GetInstance().Setup(const_cast<uint8_t*>(u8g2_font_busdisplay8x5_tr));
ServerHandler::GetInstance().setup(ssid, pswd); ServerHandler::GetInstance().setup(ssid, pswd);
Serial.print("Connected to WiFi. IP address: ");
Serial.println(WiFi.localIP());
pinMode(D5, OUTPUT);
digitalWrite(D5, LOW);
} }
void loop() void loop()
@ -36,15 +45,33 @@ void loop()
} }
// If serverHandler finished showing ip. // If serverHandler finished showing ip.
if (serverHandler.showNext()) if (serverHandler.showNext()) {
screen.loop(); //screen.loop(); -> Cause des problèmes
}
SoilHumidity = static_cast<float>(std::any_cast<int>(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<float>(std::any_cast<int>(humidity.getValue())));
Serial.println(dataHandler.getJsonData());
// When showing IP, delay is faster. // When showing IP, delay is faster.
delay(serverHandler.showNext() ? 1000 : 250); delay(serverHandler.showNext() ? 1000 : 250);
serverHandler.loop(); serverHandler.loop();
} }