#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <ThingSpeak.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient client;
unsigned long myChannelNumber = 2364403;
const char* myWriteAPIKey = "O0P6WSY0TCQZB0WU";
const char* server = "api.thingspeak.com";
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;
// Pin yang digunakan
const int pinTrigger = 4;
const int pinEcho = 5;
const int servoPin = 15;
const int pinTemp = 19;
const int ledPin = 13;
const int buzzPin = 12;
float tempC;
Servo servo;
DHTesp dhtSensor;
// I/O yang digunakan
void setup()
{
Serial.begin (9600);
pinMode(pinTrigger, OUTPUT);
pinMode(pinEcho, INPUT);
pinMode(ledPin,OUTPUT);
pinMode(buzzPin, OUTPUT);
dhtSensor.setup(pinTemp, DHTesp::DHT22);
servo.attach(servoPin);
WiFi.begin(ssid,pass);
while(WiFi.status()!= WL_CONNECTED)
{
delay(100);
Serial.println(".");
}
Serial.println("WiFi Connected!");
Serial.println(WiFi.localIP());
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
// Konversi Sensor Ultrasonic ke CM
float ultrasonic()
{
digitalWrite(pinTrigger, LOW);
delayMicroseconds(2);
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
int duration = pulseIn(pinEcho, HIGH);
float dist_cm = duration * 0.034 / 2;
return dist_cm;
}
void loop()
{
// DHT22 Sensor
tempC = dhtSensor.getTemperature();
Serial.print("Temperature(C) : ");
Serial.println(tempC);
// Menampilkan data DHT22 Ke LCD
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Suhu :");
lcd.print(tempC);
// Fungsi if untuk sensor ultrasonic
float jarakManusia = ultrasonic();
Serial.print("Jarak Manusia (Cm) : ");
Serial.print(jarakManusia);
if(jarakManusia<50){
if(tempC > 36){
servo.write(00);
digitalWrite(ledPin, HIGH);
tone(buzzPin, HIGH);
}
else{
servo.write(90);
digitalWrite(ledPin, LOW);
noTone(buzzPin);
}
}
ThingSpeak.setField(1,tempC);
ThingSpeak.setField(2,jarakManusia);
int x = ThingSpeak.writeFields(myChannelNumber,myWriteAPIKey);
if (x == 200)
{
Serial.println("Channel update succesful");
}
else
{
Serial.println("Problem updating channel");
}
delay(10); // this speeds up the simulation
}