#include <WiFi.h>
#include <DHT.h>
#include <ThingSpeak.h>
#include <ESP32Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Replace with your network credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak settings
unsigned long myChannelNumber = 2560387;
const char * myWriteAPIKey = "OT1SMAZBU7OXIN39";
// DHT settings
#define DHTTYPE DHT22
#define DHTPIN 4
DHT dht(DHTPIN, DHTTYPE);
// DS18B20 settings
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Servo settings
#define SERVO1_PIN 18
#define SERVO2_PIN 19
Servo servo1;
Servo servo2;
// Temperature thresholds
#define TEMP_THRESHOLD 30.0
WiFiClient client;
void setup() {
Serial.begin(115200);
Serial.println("Starting setup...");
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Initialize ThingSpeak
ThingSpeak.begin(client);
Serial.println("ThingSpeak initialized");
// Initialize DHT sensor
dht.begin();
Serial.println("DHT22 sensor initialized");
// Initialize DS18B20 sensor
sensors.begin();
Serial.println("DS18B20 sensor initialized");
// Attach servos
servo1.attach(SERVO1_PIN);
servo2.attach(SERVO2_PIN);
// Set servos to initial position (0 degrees)
servo1.write(0);
servo2.write(0);
Serial.println("Setup complete");
}
void loop() {
Serial.println("Reading sensors...");
// Read temperature from DHT22 sensor
float temp1 = dht.readTemperature();
if (isnan(temp1)) {
Serial.println("Failed to read from DHT22 sensor! Check wiring and connection.");
} else {
Serial.print("Temperature 1: ");
Serial.print(temp1);
Serial.println(" *C");
}
// Request temperature from DS18B20 sensor
sensors.requestTemperatures();
float temp2 = sensors.getTempCByIndex(0);
if (temp2 == DEVICE_DISCONNECTED_C) {
Serial.println("Failed to read from DS18B20 sensor! Check wiring and connection.");
} else {
Serial.print("Temperature 2: ");
Serial.print(temp2);
Serial.println(" *C");
}
// Control servos based on temperature thresholds
if (!isnan(temp1) && temp1 > TEMP_THRESHOLD) {
servo1.write(90); // Turn on motor (servo) 1
Serial.println("Servo 1 turned on");
} else {
servo1.write(0); // Turn off motor (servo) 1
Serial.println("Servo 1 turned off");
}
if (temp2 != DEVICE_DISCONNECTED_C && temp2 > TEMP_THRESHOLD) {
servo2.write(90); // Turn on motor (servo) 2
Serial.println("Servo 2 turned on");
} else {
servo2.write(0); // Turn off motor (servo) 2
Serial.println("Servo 2 turned off");
}
// Send data to ThingSpeak
ThingSpeak.setField(1, temp1);
ThingSpeak.setField(2, temp2);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Data sent to ThingSpeak successfully");
} else {
Serial.print("Failed to send data to ThingSpeak. HTTP error code: ");
Serial.println(x);
}
// Wait 20 seconds to update data
delay(20000);
}