#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHTesp.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#define DHT_PIN 14
#define soil_PIN 34
#define relay 2
DHTesp dhtSensor;
const char *ssid = "Wokwi-GUEST"; // Change this to your WiFi SSID
const char *password = ""; // Change this to your WiFi password
void setup() {
// put your setup code here, to run once:
pinMode(soil_PIN, INPUT);
pinMode(relay, OUTPUT);
Wire.begin(21, 22);
Serial.begin(115200);
lcd.init();
lcd.backlight();
while (!Serial) {
delay(100);
}
// We start by connecting to a WiFi network
Serial.println();
Serial.println("******************************************************");
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password, 6);
lcd.setCursor(0, 0); //line 1st column, 1st row
lcd.print("Connecting to");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
lcd.setCursor(0, 1);
lcd.print(ssid);
lcd.print("...");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
lcd.setCursor(0,2);
lcd.print("WiFi connected");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.println("DHT initiated");
lcd.setCursor(0,3);
lcd.print("DHT initiated");
delay(250);
lcd.clear();
lcd.setCursor(2,1);
lcd.print("AUTOMATED URBAN");
lcd.setCursor(0,2);
lcd.print("ALGRICULTURE SYSTEM");
delay(500);
lcd.clear();
}
void loop() {
// put your main code here, to run repeatedly:
//const char* soil_status = readMoisture();
int val = analogRead(soil_PIN);
int soil_percent = map(val, 0, 4096, 0, 100);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
lcd.setCursor(0,0);
lcd.print("Temperature: ");
lcd.print(data.temperature, 2);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Humidity: ");
lcd.print(data.humidity, 1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Soil Moisture: ");
lcd.print(soil_percent);
if(soil_percent < 30)
{
digitalWrite(relay, LOW);
delay(100);
}
else
{
digitalWrite(relay, HIGH);
delay(100);
}
//delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
}
/*const char* readMoisture()
{
int val = analogRead(soil_PIN);
const char* soil_status = "\0";
soil_status = val;
/*if(val < 2165)
{
digitalWrite(relay, LOW);
delay(100);
}
else if(val < 3135)
{
digitalWrite(relay, LOW);
delay(100);
}
else
{
digitalWrite(relay, HIGH);
delay(100);
}
return soil_status;
}*/
TempAndHumidity readDHT22()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
}
void lcdPrint(const char* soil_status, TempAndHumidity data)
{
lcd.setCursor(0,0);
lcd.print("Temperature: ");
lcd.print(data.temperature, 2);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Humidity: ");
lcd.print(data.humidity, 1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Soil Moisture: ");
lcd.print(soil_status);
delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
}