#include <WiFi.h>
#include <HTTPClient.h>
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* THINGSPEAK_API_KEY = "9OD41SPI6CYVFYNF";
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
const int DHT_PIN = 15;
const int ledRed = 2;
const int ledGreen = 16;
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Connecting to WiFi...");
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
connectToWiFi();
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
displaySensorData(data);
sendDataToThingSpeak(data);
updateLedStatus(data);
delay(5000);
}
void connectToWiFi() {
WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 10) {
delay(1000);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to WiFi");
lcd.setCursor(0, 0);
lcd.print("WiFi: Connected ");
} else {
Serial.println("\nFailed to connect to WiFi");
lcd.setCursor(0, 0);
lcd.print("WiFi: Failed");
return; // Exit setup if Wi-Fi connection fails
}
}
void displaySensorData(TempAndHumidity data) {
Serial.println("Temp: " + String(data.temperature, 1) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
lcd.setCursor(0, 1);
lcd.print("Temp: " + String(data.temperature, 1) + "\xDFC ");
lcd.setCursor(0, 2);
lcd.print("Humidity: " + String(data.humidity, 1) + "% ");
}
void sendDataToThingSpeak(TempAndHumidity data) {
String url = "http://api.thingspeak.com/update?api_key=" + String(THINGSPEAK_API_KEY) +
"&field1=" + String(data.temperature, 1) +
"&field2=" + String(data.humidity, 1);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
Serial.println("Data sent to ThingSpeak successfully");
lcd.setCursor(0, 3);
lcd.print("ThingSpeak: Sent");
} else {
Serial.println("Failed to send data to ThingSpeak");
lcd.setCursor(0, 3);
lcd.print("ThingSpeak: Failed ");
}
http.end();
}
void updateLedStatus(TempAndHumidity data) {
if (data.temperature > 25.0 || data.humidity > 70.0) {
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
} else if (data.temperature < 20.0 || data.humidity < 30.0) {
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
} else {
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, HIGH);
}
}