#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define LED 2
#define SOUND_SPEED 0.034
const int DHTPIN = 15;
const int trigPin = 5;
const int echoPin = 18;
const int buzzerPin = 14;
const char ssid[] = "Wokwi-GUEST";
const char password[] = "";
long lastTime = 0;
long timerDelay = 500;
//HC-SR
long duration;
float distance;
String serverName = "https://api.thingspeak.com/update?api_key=SVJYEIK2CIDRPHX4&field1=0";
float hum;
float temp;
DHT dht(DHTPIN, DHT22);
LiquidCrystal_I2C lcd (0x27, 16,2);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print('-');
}
Serial.println("");
Serial.print("ESP 32 connected");
Serial.println(WiFi.localIP());
dht.begin();
//LCD
lcd.init ();
lcd.backlight ();
//LED
pinMode(LED, OUTPUT);
//HC-SR04
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT);
//Servo
pinMode(buzzerPin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if((millis() - lastTime) > timerDelay ){
if(WiFi.status() == WL_CONNECTED){
//Read Sensor
hum = dht.readHumidity();
temp = dht.readTemperature();
lcd.setCursor(0, 0);
lcd.print("H:");
lcd.print(hum);
lcd.setCursor(8, 0);
lcd.print("T:");
lcd.print(temp);
if (hum > 60 && temp > 60){
digitalWrite(LED, HIGH);
}else{
digitalWrite(LED, LOW);
}
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * SOUND_SPEED/2;
lcd.setCursor(0, 1);
lcd.print("Distance:");
lcd.print(distance);
if (distance < 200){
digitalWrite(buzzerPin, HIGH);
}else{
digitalWrite(buzzerPin, LOW);
}
sendData(hum, temp, distance);
}
else {
Serial.println("WiFi Disconected");
}
lastTime = millis();
}
}
void sendData(int temp, int hum, int distance) {
HTTPClient http; //Inisialisasi HTTP Client
String url = serverName + "&field1=" + temp + "&field2=" + hum + "&field3=" + distance;
http.begin(url.c_str()); // Send HTTP Request / Inisialisasi
int httpResponseCode = http.GET(); // Check status data
if (httpResponseCode > 0){
Serial.print("HTTP REsponse code:");
Serial.println(httpResponseCode);
}
else{
Serial.print("Error Code");
Serial.println(httpResponseCode);
}
http.end();
}