#include <HTTPClient.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <LiquidCrystal_I2C.h>
const char ssid[] = "Wokwi-GUEST";
const char password[] = "";
String apiDistance = "https://api.thingspeak.com/channels/2024961/feeds.json?api_key=6G3PY5O1NAGXCNEZ&results=1";
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int GRE = 25;
const int RED = 33;
const int Buzzer = 2;
bool gerakan = 0;
int distance = 0;
void setup() {
lcd.init();
lcd.backlight();
pinMode(RED, OUTPUT);
pinMode(GRE, OUTPUT);
pinMode(Buzzer, OUTPUT);
// 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.println("-");
}
Serial.println("");
Serial.print("ESP 32 Connected");
Serial.println(WiFi.localIP());
}
void loop() {
// put your main code here, to run repeatedly:
getDistance();
Serial.println("");
Serial.print("Jarak: ");
Serial.println(distance);
Serial.println("");
Serial.print("Gerakan: ");
Serial.println(gerakan);
if(gerakan){
lcd.setCursor(0,1);
lcd.print("Ada Gerakan!");
digitalWrite(RED, HIGH);
tone(Buzzer, 250);
delay(1000);
}else{
noTone(Buzzer);
digitalWrite(RED, LOW);
}
if(distance < 100)
{
digitalWrite(RED, HIGH);
digitalWrite(GRE, LOW);
tone(Buzzer, 250);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jarak : ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Stat: ");
lcd.print("Terdeteksi");
}
else
{
digitalWrite(RED, LOW);
digitalWrite(GRE, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jarak : ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Stat: ");
lcd.print("Tdk Terdeteksi");
}
delay(500);
}
void getDistance()
{
HTTPClient http;
http.begin(apiDistance);
int httpCode = http.GET();
if (httpCode > 0)
{
String payload = http.getString();
int index1 = payload.indexOf("[");
int index2 = payload.indexOf("]");
String data = payload.substring(index1 + 1, index2);
int index3 = data.indexOf("field1");
int index4 = data.indexOf("field2");
int index5 = 80;
String dis = data.substring(index3 + 9, index4 - 2);
String ger = data.substring(index4 + 9, index5 - 2);
gerakan = ger.toInt();
distance = dis.toFloat();
}
http.end();
}