#include <WiFi.h>
#include <ThingSpeak.h>
#include "DHT.h"
#include "NewPing.h"
const int DHT_PIN = 4; // Pin yang terhubung dengan output sensor DHT22
const int TRIG_PIN = 12; // Pin trigger sensor ultrasonik HC-SR04
const int ECHO_PIN = 13; // Pin echo sensor ultrasonik HC-SR04
const int LED_PIN = 2; // Pin LED
const int BUZZER_PIN = 14; // Pin buzzer
const int RESISTOR_PIN = 2; // Pin resistor
// WiFi credentials
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// ThingSpeak credentials
const int myChannelNumber = 2366878;
const char* myApiKey = "2840ABTRUG73X45P";
const char* server = "api.thingspeak.com";
DHTesp dhtSensor;
NewPing sonar(TRIG_PIN, ECHO_PIN, 200);
WiFiClient client;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(LED_PIN, OUTPUT);
WiFi.begin( WIFI_NAME , WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
pinMode (LED_PIN, OUTPUT);
pinMode (BUZZER_PIN, OUTPUT);
pinMode (RESISTOR_PIN, OUTPUT);
pinMode (TRIG_PIN, OUTPUT);
pinMode (ECHO_PIN, INPUT);
pinMode (DHT_PIN, INPUT);
}
void loop() {
// Baca suhu dan kelembaban dari sensor DHT22
TempAndHumidity Data = dhtSensor.getTempAndHumidity();
// Baca jarak dari sensor ultrasonik HC-SR04
float Distance = sonar.ping_cm();
// Kirim data ke ThingSpeak
ThingSpeak.setField(1, Data.temperature);
ThingSpeak.setField(2, Data.humidity);
ThingSpeak.setField(3, Distance);
if (Data.temperature < 30 || Data.humidity < 50) {
digitalWrite(LED_PIN, HIGH);
}else{
digitalWrite(LED_PIN, LOW);
}
int status = ThingSpeak.writeFields(myChannelNumber, myApiKey);
Serial.println("Temp: " + String(Data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(Data.humidity, 1) + "%");
// Sensor ultrasonik
delay(50);
Serial.print("Distance: ");
Serial.print(Distance);
Serial.println(" cm");
if (status == 200) {
Serial.println("Data sent to ThingSpeak successfully!");
} else {
Serial.println("Error sending data to ThingSpeak. Status code: " + String(status));
}
// Output LED dan Buzzer
if (Distance < 20.0) {
digitalWrite(LED_PIN, HIGH); // Aktifkan LED
tone(BUZZER_PIN, 1000); // Nyalakan buzzer
} else {
digitalWrite(LED_PIN, LOW); // Matikan LED
noTone(BUZZER_PIN); // Matikan buzzer
}
delay(15000); // Kirim data setiap 15 detik
}