#include <WiFi.h>
#include <DHTesp.h>
// ====== KONFIGURASI WIFI DAN THINGSPEAK ======
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const char* THINGSPEAK_HOST = "api.thingspeak.com";
const char* THINGSPEAK_API_KEY = "HTAE12MAFE4B6OML";
WiFiClient client;
// ====== KONFIGURASI PIN SENSOR ======
const int PIN_DHT = 15;
const int PIN_PIR = 13;
const int PIN_LDR = 34; // Analog input only
const int PIN_MQ2 = 35; // Analog input only
DHTesp dhtSensor;
// ====== FUNGSI SETUP ======
void setup() {
Serial.begin(115200);
connectToWiFi();
initSensors();
}
// ====== LOOP UTAMA ======
void loop() {
delay(2000);
float temperature = dhtSensor.getTemperature();
float humidity = dhtSensor.getHumidity();
int motionStatus = digitalRead(PIN_PIR);
int ldrValue = analogRead(PIN_LDR);
int mq2Value = analogRead(PIN_MQ2);
if (isnan(temperature) || isnan(humidity)) {
Serial.println(" Gagal membaca data dari sensor DHT22.");
return;
}
// Tampilkan data di Serial Monitor
logSensorData(temperature, humidity, motionStatus, ldrValue, mq2Value);
// Kirim ke ThingSpeak
sendToThingSpeak(temperature, humidity, motionStatus, ldrValue, mq2Value);
}
// ====== FUNGSI: KONEKSI WIFI ======
void connectToWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("🔌 Menghubungkan ke WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n WiFi terhubung. IP: " + WiFi.localIP().toString());
}
// ====== FUNGSI: INISIALISASI SENSOR ======
void initSensors() {
dhtSensor.setup(PIN_DHT, DHTesp::DHT22);
pinMode(PIN_PIR, INPUT);
}
// ====== FUNGSI: LOG KE SERIAL ======
void logSensorData(float temp, float hum, int motion, int ldr, int gas) {
Serial.println(" Suhu: " + String(temp, 2) + " °C");
Serial.println(" Kelembaban: " + String(hum, 2) + " %");
Serial.println(" Gerakan: " + String(motion));
Serial.println(" LDR (Cahaya): " + String(ldr));
Serial.println(" MQ2 (Gas): " + String(gas));
}
// ====== FUNGSI: KIRIM DATA KE THINGSPEAK ======
void sendToThingSpeak(float temp, float hum, int motion, int ldr, int gas) {
if (client.connect(THINGSPEAK_HOST, 80)) {
String request = "/update?api_key=" + String(THINGSPEAK_API_KEY) +
"&field1=" + String(temp, 2) +
"&field2=" + String(hum, 2) +
"&field3=" + String(motion) +
"&field4=" + String(ldr) +
"&field5=" + String(gas);
client.print(String("GET ") + request + " HTTP/1.1\r\n" +
"Host: " + THINGSPEAK_HOST + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println(" Mengirim data ke ThingSpeak...");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(" Timeout koneksi dengan ThingSpeak.");
client.stop();
return;
}
}
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println("\n Data berhasil dikirim.");
client.stop();
} else {
Serial.println(" Gagal terhubung ke ThingSpeak.");
}
}