#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
#define WIFI_SSID "Wokwi-GUEST" // Nama Wi-Fi
#define WIFI_PASSWORD "" // Kosongkan password
#define WIFI_CHANNEL 6 // Channel Wi-Fi
#define THINGSPEAK_API_KEY "HS5Z5K6KTO1SBKMN" // Ganti dengan Write API Key dari ThingSpeak
#define DHTPIN 4 // Pin data untuk sensor DHT
#define DHTTYPE DHT22 // Tipe sensor DHT, menggunakan DHT22
#define RELAY_PIN 13 // Pin untuk relay
#define LED_PIN 15 // Pin untuk LED
DHT dht(DHTPIN, DHTTYPE);
bool relayState = false; // Variabel untuk status relay
void setup() {
Serial.begin(115200);
dht.begin();
// Inisialisasi Wi-Fi
Serial.print("Connecting to WiFi");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
// Mematikan relay dan LED saat awal
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, LOW);
}
void loop() {
float suhu = dht.readTemperature(); // Membaca suhu dalam Celcius
float kelembapan = dht.readHumidity(); // Membaca kelembapan
// Memastikan sensor tidak error
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca dari sensor DHT!");
return;
}
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" C, Kelembapan: ");
Serial.print(kelembapan);
Serial.println(" %");
// Mengatur status LED dan relay berdasarkan kondisi
bool ledStatus = false;
// Kondisi a: Lampu menyala jika suhu < 23°C dan kelembapan < 60%
if (suhu < 23 && kelembapan < 60) {
digitalWrite(LED_PIN, HIGH); // Lampu menyala
ledStatus = true;
} else {
digitalWrite(LED_PIN, LOW); // Lampu mati jika kondisi tidak terpenuhi
ledStatus = false;
}
// Kondisi b: Relay menyala jika kelembapan < 60% dan suhu > 27°C
if (kelembapan < 60 && suhu > 27) {
relayState = true; // Relay menyala
} else if (!(kelembapan < 60 && suhu > 27) && !(suhu > 35 && kelembapan > 60)) {
relayState = false; // Relay mati jika kondisi B atau C tidak terpenuhi
}
// Kondisi c: Lampu berkedip dan relay tetap menyala jika suhu > 35°C dan kelembapan > 60%
if (suhu > 35 && kelembapan > 60) {
digitalWrite(LED_PIN, HIGH); // Lampu berkedip
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
relayState = true; // Relay tetap menyala secara konstan
}
// Menyalakan atau mematikan relay sesuai relayState
digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);
// Mengirim data ke ThingSpeak
sendDataToThingSpeak(suhu, kelembapan, relayState, ledStatus);
delay(2000); // Delay untuk pembacaan setiap 2 detik
}
void sendDataToThingSpeak(float suhu, float kelembapan, bool relayStatus, bool ledStatus) {
if (WiFi.status() == WL_CONNECTED) { // Memeriksa apakah Wi-Fi terhubung
HTTPClient http;
String serverPath = "http://api.thingspeak.com/update?api_key=" + String(THINGSPEAK_API_KEY) +
"&field1=" + String(suhu) +
"&field2=" + String(kelembapan) +
"&field3=" + String(relayStatus) +
"&field4=" + String(ledStatus);
http.begin(serverPath.c_str()); // Memulai koneksi
int httpResponseCode = http.GET(); // Mengirim permintaan HTTP GET
if (httpResponseCode > 0) {
Serial.print("Data berhasil dikirim, Kode respons: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error mengirim data, kode kesalahan: ");
Serial.println(httpResponseCode);
}
http.end(); // Mengakhiri koneksi
} else {
Serial.println("Wi-Fi tidak terhubung");
}
}