#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define LDRPIN 34
#define POTPIN 35
#define PIRPIN 23
#define TRIGPIN 18
#define ECHOPIN 19
const char* ssid = "Wokwi-GUEST"; // Ganti dengan nama Wi-Fi
const char* password = ""; // Ganti dengan password Wi-Fi
const char* server = "http://api.thingspeak.com/update?api_key=YOUR_API_KEY";
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// Koneksi Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Inisialisasi sensor
dht.begin();
pinMode(PIRPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
}
float getDistance() {
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
long duration = pulseIn(ECHOPIN, HIGH);
return (duration * 0.0343) / 2;
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int ldrValue = analogRead(LDRPIN);
int airQuality = analogRead(POTPIN); // Simulasi nilai MQ-135
bool motionDetected = digitalRead(PIRPIN);
float distance = getDistance();
// Kirim data ke ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) +
"&field1=" + String(temperature) +
"&field2=" + String(humidity) +
"&field3=" + String(ldrValue) +
"&field4=" + String(airQuality) +
"&field5=" + String(distance) +
"&field6=" + String(motionDetected);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Data sent to ThingSpeak!");
} else {
Serial.println("Failed to send data");
}
http.end();
}
// Print data di Serial Monitor
Serial.println("=== Sensor Data ===");
Serial.print("Temperature: "); Serial.println(temperature);
Serial.print("Humidity: "); Serial.println(humidity);
Serial.print("Light Intensity: "); Serial.println(ldrValue);
Serial.print("Air Quality: "); Serial.println(airQuality);
Serial.print("Water Level (cm): "); Serial.println(distance);
Serial.print("Motion Detected: "); Serial.println(motionDetected ? "Yes" : "No");
delay(20000); // Kirim data setiap 20 detik
}