#include <WiFi.h>
#include <DHT.h>
#include "ThingSpeak.h"
#include <ESP32Servo.h>
// Inisiasi Variable
const char* wifi_name = "Wokwi-GUEST";
const char* wifi_password = "";
const int my_channel = 2585174;
const char* my_key = "233W03VHBGS5YB1N";
#define DHT_PIN 15
#define DHTTYPE DHT22
#define TRIG_PIN 5
#define ECHO_PIN 18
#define RELAY_PIN 2
#define SERVO_PIN 13
DHT dht(DHT_PIN, DHTTYPE);
Servo servo;
WiFiClient client;
void setup() {
Serial.begin(115200);
dht.begin();
// Inisiasi Mode pin
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN, 500, 2400);
// Inisiasi koneksi WiFi
WiFi.begin(wifi_name,wifi_password);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi Connecting ...");
}
Serial.println("Wifi Connected");
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
// Inisiasi variable untuk menampung nilai dari sensor DHT22
float suhu = dht.readTemperature();
float lembab = dht.readHumidity();
// Cek nilai dari sensor DHT22
if (isnan(suhu) || isnan(lembab)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
long durasi, jarak;
int pintu;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
durasi = pulseIn(ECHO_PIN, HIGH);
jarak = (durasi / 2) / 29.1;
// Tampilkan nilai dari sensor ke Serial Monitor
Serial.println("Suhu : " + String(suhu,2) + " °C");
Serial.println("Kelembaban : " + String(lembab,1) + " %");
Serial.println("jarak : " + String(jarak) + " cm");
// Kondisi Ruangan
if (suhu > 25) {
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Relay: ON");
Serial.println("Pintu: DIBUKA");
servo.write(180);
pintu = 1;
} else {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Relay: OFF");
Serial.println("Pintu: DITUTUP");
servo.write(90);
pintu = 0;
}
// Pengiriman variabel data ke ThingSpeak
ThingSpeak.setField(1, suhu);
ThingSpeak.setField(2, lembab);
ThingSpeak.setField(3, jarak);
ThingSpeak.setField(4, pintu);
// Status pengiriman data ke ThingSpeak
int x = ThingSpeak.writeFields(my_channel, my_key);
if(x == 200){
Serial.println("Channel Update Sukses!");
}else{
Serial.println("Channel Update Error! HTTP Error code "+String(x));
}
delay(20000);
}