#include <Arduino.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "plant.h"
#include "wifi_conn.h"
#include "mqtt.h"
#include <PubSubClient.h>
// ================= CONFIG =================
#define SENSOR_INTERVAL 1000
// ================= DATA STRUCT =================
struct SensorData {
float moisture;
};
// ================= SENSOR TASK =================
void sensorTask(void *pvParameters)
{
while (true)
{
updatePlant();
Serial.print("Moisture: ");
Serial.println(moisture);
vTaskDelay(pdMS_TO_TICKS(SENSOR_INTERVAL));
}
}
// ================= LED TASK =================
void ledTask(void *pvParameters)
{
while (true)
{
Serial.println("LED task running...");
vTaskDelay(pdMS_TO_TICKS(2000));
}
}
// ================= MQTT TASK =================
void mqttTask(void *pvParameters)
{
while (true)
{
mqttClient.loop();
mqttPublish("plant/moisture", moisture);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
// ================= SETUP =================
void setup()
{
Serial.begin(115200);
randomSeed(analogRead(0));
Serial.println("Starting ESP32 FreeRTOS system...");
Serial.println("START SETUP");
connectWifi();
connectMqtt();
xTaskCreate(sensorTask, "sensorTask", 4096, NULL, 1, NULL);
xTaskCreate(ledTask, "ledTask", 4096, NULL, 1, NULL);
xTaskCreate(mqttTask, "mqttTask", 4096, NULL, 1, NULL);
}
// ================= LOOP =================
void loop()
{
// FreeRTOS handles everything
}