// RANCANG BANGUN SISTEM PENGUSIR HAMA BERBASIS ESP32
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include "ThingsBoard.h"
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
#define CURRENT_FIRMWARE_TITLE "TEST"
#define CURRENT_FIRMWARE_VERSION "1.0.0"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "DVdmSartmSSECiW4OeNo"
#define THINGSBOARD_SERVER "demo.thingsboard.io"
// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
int status = WL_IDLE_STATUS;
//Baud rate for debug serial
#define SERIAL_DEBUG_BAUD 115200
#define HC1_TRIG 12
#define HC1_ECHO 14
#define HC2_TRIG 26
#define HC2_ECHO 25
#define HC3_TRIG 19
#define HC3_ECHO 18
#define HC4_TRIG 4
#define HC4_ECHO 2
int pir1 = 13;
int pir2 = 27;
int pir3 = 5;
int pir4 = 15;
int pirState1;
int pirState2;
int pirState3;
int pirState4;
int val1;
int val2;
int val3;
int val4;
int ledH = 32;
int ledM = 23;
const int DHT_PIN = 33;
const int LDR_PIN = 34;
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}
void setup () {
Serial.begin(SERIAL_DEBUG_BAUD);
Serial.println();
InitWiFi();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
pinMode(LDR_PIN, INPUT);
pinMode(DHT_PIN, INPUT);
pinMode(HC1_TRIG, OUTPUT);
pinMode(HC1_ECHO, INPUT);
pinMode(HC2_TRIG, OUTPUT);
pinMode(HC2_ECHO, INPUT);
pinMode(HC3_TRIG, OUTPUT);
pinMode(HC3_ECHO, INPUT);
pinMode(HC4_TRIG, OUTPUT);
pinMode(HC4_ECHO, INPUT);
pinMode(ledH, OUTPUT);
pinMode(ledM, OUTPUT);
}
void loop () {
delay(500);
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) {
// Connect to the ThingsBoard
Serial.print("Connecting to: ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.println(TOKEN);
if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect");
return;
}
}
lcd.setCursor(4, 0);
lcd.print("GREEN HOUSE");
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temperature : " + String(data.temperature, 1) + " °C");
Serial.println("Humidity : " + String(data.humidity, 1) + " %");
delay(10);
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(data.temperature);
lcd.print("C ");
tb.sendTelemetryFloat("Temperature", data.temperature);
lcd.print("H:");
lcd.print(data.humidity);
lcd.println("%");
tb.sendTelemetryFloat("Humidity", data.humidity);
if (digitalRead(LDR_PIN) == LOW) {
lcd.setCursor(0, 2);
lcd.print("STATUS : PIR (OFF)");
lcd.setCursor(0, 3);
lcd.println(" ");
digitalWrite(ledH, LOW);
tb.sendTelemetryInt("ldr", digitalRead(LDR_PIN));
}
else {
lcd.setCursor(0, 2);
lcd.print("STATUS : PIR (ON) ");
digitalWrite(ledH, HIGH);
tb.sendTelemetryInt("ldr", digitalRead(LDR_PIN));
val1 = digitalRead(pir1);
if (val1 == HIGH) {
pirState1 = 1;
digitalWrite(ledM, HIGH);
tone(23, 250, 250); // Plays 250Hz tone for 0.250 seconds
// Start a new measurement:
digitalWrite(HC1_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(HC1_TRIG, LOW);
// Read the result:
int duration = pulseIn(HC1_ECHO, HIGH);
float HC1= duration * 0.034 / 2;
delay(10);
lcd.setCursor(0, 3);
lcd.print("Terdeteksi Gerak (1)");
delay(100);
lcd.setCursor(0, 3);
lcd.print("Radius HC1: ");
lcd.print(HC1);
lcd.println("cm");
Serial.println("Gerakan Terdeteksi!(1)");
Serial.print("Radius HC1 : ");
Serial.print(HC1);
Serial.println("cm");
tb.sendTelemetryFloat("HC1", HC1);
}
else {
pirState1 = 0;
digitalWrite(ledM, LOW);
lcd.setCursor(0, 3);
lcd.println("Tidak Ada Gerakan(1)");
Serial.println("Tidak Ada Gerakan!(1)");
delay(10);
tb.sendTelemetryFloat("HC1",0);
}
tb.sendTelemetryInt("PIR1", pirState1);
val2 = digitalRead(pir2);
if (val2 == HIGH) {
pirState2 = 1;
digitalWrite(ledM, HIGH);
tone(23, 300, 250); // Plays 300Hz tone for 0.250 seconds
// Start a new measurement:
digitalWrite(HC2_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(HC2_TRIG, LOW);
// Read the result:
int duration = pulseIn(HC2_ECHO, HIGH);
float HC2= duration * 0.034 / 2;
delay(10);
lcd.setCursor(0, 3);
lcd.print("Terdeteksi Gerak (2)");
delay(100);
lcd.setCursor(0, 3);
lcd.print("Radius HC2: ");
lcd.print(HC2);
lcd.println("cm");
Serial.println("Gerakan Terdeteksi!(2)");
Serial.print("Radius HC2 : ");
Serial.print(HC2);
Serial.println("cm");
tb.sendTelemetryFloat("HC2", HC2);
}
else {
pirState2 = 0;
digitalWrite(ledM, LOW);
lcd.setCursor(0, 3);
lcd.println("Tidak Ada Gerakan(2)");
Serial.println("Tidak Ada Gerakan!(2)");
delay(10);
tb.sendTelemetryFloat("HC2", 0);
}
tb.sendTelemetryInt("PIR2", pirState2);
val3 = digitalRead(pir3);
if (val3 == HIGH) {
pirState3 = 1;
digitalWrite(ledM, HIGH);
tone(23, 350, 250); // Plays 350Hz tone for 0.250 seconds
// Start a new measurement:
digitalWrite(HC3_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(HC3_TRIG, LOW);
// Read the result:
int duration = pulseIn(HC3_ECHO, HIGH);
float HC3= duration * 0.034 / 2;
delay(10);
lcd.setCursor(0, 3);
lcd.print("Terdeteksi Gerak (3)");
delay(100);
lcd.setCursor(0, 3);
lcd.print("Radius HC3: ");
lcd.print(HC3);
lcd.println("cm");
Serial.println("Gerakan Terdeteksi!(3)");
Serial.print("Radius HC3 : ");
Serial.print(HC3);
Serial.println("cm");
tb.sendTelemetryFloat("HC3", HC3);
}
else {
pirState3 = 0;
digitalWrite(ledM, LOW);
lcd.setCursor(0, 3);
lcd.println("Tidak Ada Gerakan(3)");
Serial.println("Tidak Ada Gerakan!(3)");
delay(10);
tb.sendTelemetryFloat("HC3", 0);
}
tb.sendTelemetryInt("PIR3", pirState3);
val4 = digitalRead(pir4);
if (val4 == HIGH) {
pirState4 = 1;
digitalWrite(ledM, HIGH);
tone(23, 400, 250); // Plays 400Hz tone for 0.250 seconds
// Start a new measurement:
digitalWrite(HC4_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(HC4_TRIG, LOW);
// Read the result:
int duration = pulseIn(HC4_ECHO, HIGH);
float HC4= duration * 0.034 / 2;
delay(10);
lcd.setCursor(0, 3);
lcd.print("Terdeteksi Gerak (4)");
delay(100);
lcd.setCursor(0, 3);
lcd.print("Radius HC4: ");
lcd.print(HC4);
lcd.println("cm");
Serial.println("Gerakan Terdeteksi!(4)");
Serial.print("Radius HC4 : ");
Serial.print(HC4);
Serial.println("cm");
tb.sendTelemetryFloat("HC4", HC4);
}
else {
pirState4 = 0;
digitalWrite(ledM, LOW);
lcd.setCursor(0, 3);
lcd.println("Tidak Ada Gerakan(4)");
Serial.println("Tidak Ada Gerakan!(4)");
delay(10);
tb.sendTelemetryFloat("HC4", 0);
}
tb.sendTelemetryInt("PIR4", pirState4);
}
tb.loop();
}