#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define SOIL_PIN 34
#define WATER_PIN 35
#define RELAY_PIN 26
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";
const char* tempTopic = "flower/temperature";
const char* humTopic = "flower/humidity";
const char* soilTopic = "flower/soil";
const char* waterTopic = "flower/waterlevel";
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void reconnectMQTT()
{
while(!client.connected())
{
Serial.println("Connecting MQTT...");
if(client.connect("SmartFlowerESP32"))
{
Serial.println("MQTT Connected");
}
else
{
Serial.println("MQTT Failed");
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Smart Irrigation System Started");
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED)
{
delay(500);
Serial.println("Connecting WiFi...");
}
Serial.println("WiFi Connected");
client.setServer(mqtt_server,1883);
}
void loop() {
if(!client.connected())
{
reconnectMQTT();
}
client.loop();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int soil = analogRead(SOIL_PIN);
int water = analogRead(WATER_PIN);
if (isnan(temperature) || isnan(humidity)) {
Serial.println("DHT22 reading failed!");
}
else {
Serial.println("-------------------");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
Serial.print("Soil Moisture: ");
Serial.println(soil);
Serial.print("Water Level: ");
Serial.println(water);
char tempString[8];
char humString[8];
char soilString[8];
char waterString[8];
dtostrf(temperature, 1, 2, tempString);
dtostrf(humidity, 1, 2, humString);
sprintf(soilString, "%d", soil);
sprintf(waterString, "%d", water);
client.publish(tempTopic, tempString);
client.publish(humTopic, humString);
client.publish(soilTopic, soilString);
client.publish(waterTopic, waterString);
Serial.println("MQTT Data Sent");
if (soil < 2500 && water > 1500)
{
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Pump ON");
}
else
{
digitalWrite(RELAY_PIN, LOW);
Serial.println("Pump OFF");
}
delay(2000);
}