#include <WiFi.h>
#include <ThingSpeak.h>
#include <DHT.h>
#include <ESP32Servo.h>
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Konfigurasi ThingSpeak
const unsigned long channelID = 2583457; // Ganti dengan Channel ID ThingSpeak Anda
const char* apiKey = "UWDB4XZRJXVT3BZW"; // Ganti dengan API Key ThingSpeak Anda
WiFiClient client;
// Pin yang digunakan
#define DHTPIN 15 // Pin data sensor DHT22 terhubung ke GPIO 15
#define TRIGPIN 5 // Pin Trig sensor HC-SR04 terhubung ke GPIO 5
#define ECHOPIN 18 // Pin Echo sensor HC-SR04 terhubung ke GPIO 18
#define RELAYPIN 2 // Pin kontrol relay terhubung ke GPIO 2
#define SERVOPIN 13 // Pin sinyal motor servo terhubung ke GPIO 13
// Konfigurasi sensor DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Objek servo
Servo myServo;
// Inisialisasi variabel
float temperature = 0;
float humidity = 0;
long duration;
int distance;
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Inisialisasi ThingSpeak
ThingSpeak.begin(client);
// Inisialisasi pin-pin
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(RELAYPIN, OUTPUT);
// Inisialisasi servo
myServo.attach(SERVOPIN);
}
void loop() {
// Baca sensor DHT22
humidity = dht.readHumidity();
temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Baca sensor HC-SR04
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
duration = pulseIn(ECHOPIN, HIGH);
distance = duration * 0.034 / 2;
// Kirim data ke ThingSpeak
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, humidity);
ThingSpeak.setField(3, distance);
int httpCode = ThingSpeak.writeFields(channelID, apiKey);
if (httpCode == 200) {
Serial.println("Data sent to ThingSpeak successfully");
} else {
Serial.println("Error sending data to ThingSpeak. HTTP error code: " + String(httpCode));
}
// Kontrol relay berdasarkan nilai suhu
if (temperature > 30) {
digitalWrite(RELAYPIN, HIGH); // Aktifkan relay (misalnya untuk menghidupkan kipas)
} else {
digitalWrite(RELAYPIN, LOW); // Matikan relay
}
// Kendalikan motor servo berdasarkan jarak
if (distance < 10) {
myServo.write(90); // Posisi pintu terbuka (misalnya untuk pintu otomatis)
} else {
myServo.write(0); // Posisi pintu tertutup
}
// Delay sebelum loop berikutnya
delay(2000);
}