#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT sensor type
#define LCD_COLUMNS 16 // Number of columns on the LCD
#define LCD_ROWS 2 // Number of rows on the LCD
#define SERVO_PIN 9 // Digital pin connected to the servo
// ThingSpeak parameters
const char *ssid = "YourWiFiSSID";
const char *password = "YourWiFiPassword";
const char *thingSpeakApiKey = "YourThingSpeakAPIKey";
const char *thingSpeakHost = "api.thingspeak.com";
const char *thingSpeakField1 = "field1";
const char *thingSpeakField2 = "field2";
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, LCD_COLUMNS, LCD_ROWS);
ESP32Servo servo;
void setup() {
Serial.begin(9600);
dht.begin();
lcd.begin(LCD_COLUMNS, LCD_ROWS); // Provide arguments for columns and rows
lcd.backlight();
servo.attach(SERVO_PIN);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
// Read temperature and humidity
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Print readings to Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println("%");
// Upload data to ThingSpeak
uploadToThingSpeak(temperature, humidity);
// Check if conditions are met for servo activation
if (temperature >= 35 && humidity >= 85) {
// Activate servo
servo.write(180);
delay(500);
servo.write(0);
delay(500);
}
// Display readings on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
delay(5000); // Delay between readings
}
void uploadToThingSpeak(float temperature, float humidity) {
// Create a TCP/IP client
WiFiClient client;
if (!client.connect(thingSpeakHost, 80)) {
Serial.println("Failed to connect to ThingSpeak");
return;
}
// Create a HTTP request string
String data = String("GET /update?api_key=") + thingSpeakApiKey;
data += "&" + String(thingSpeakField1) + "=" + String(temperature);
data += "&" + String(thingSpeakField2) + "=" + String(humidity);
data += " HTTP/1.1\r\nHost: " + String(thingSpeakHost) + "\r\nConnection: close\r\n\r\n";
// Send the HTTP request
client.print(data);
// Wait for response
delay(1000);
// Read response from ThingSpeak (optional)
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
// Disconnect from ThingSpeak
client.stop();
}