#include <WiFi.h>
#include "DHT.h"
#define DHTPIN 15
#define DHTTYPE DHT22
#define SOIL_MOISTURE_PIN 34
#define RELAY_PIN 2
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* serverName = "your-server-address";
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(SOIL_MOISTURE_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% Temperature: ");
Serial.print(temperature);
Serial.print("°C Soil Moisture: ");
Serial.println(soilMoistureValue);
// Decision to water the plants
if (soilMoistureValue < 500) { // Adjust threshold as needed
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Watering the plants...");
} else {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Soil moisture is sufficient, not watering.");
}
// Sending data to the server
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
const int httpPort = 80;
if (!client.connect(serverName, httpPort)) {
Serial.println("Connection to server failed");
return;
}
String url = "/update";
String data = "api_key=YOUR_API_KEY&temperature=" + String(temperature) + "&humidity=" + String(humidity) + "&soil_moisture=" + String(soilMoistureValue);
client.print(String("POST ") + url + " HTTP/1.1\r\n" +
"Host: " + serverName + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
"Content-Length: " + data.length() + "\r\n" +
"\r\n" +
data);
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
client.stop();
} else {
Serial.println("WiFi Disconnected");
}
delay(60000); // Delay for 1 minute before next reading
}