/*
ESP32 pin Komponen
25 sensor gas(MQ-2)
26 sensor api
14 buzzer
12 triger HC-SR04 samping
13 echo HC-SR04 samping
16 triger HC-SR04 atas
17 echo HC-SR04 atas
21 SDA LCD
22 SCL LCD
*/
/////////////////////// Inisialisasi Telegram dan sensor gas & api //////////////////////
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
// Wifi network station credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Telegram BOT Token (Get from Botfather)
#define BOT_TOKEN "7175374685:AAElg8MvtzWWZ_J2mcTtYovVt3WwsQkLlA4"
#define CHAT_ID "1838205197"
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
// Pin sensor dan led_api
const int gasSensorPin = 25;
const int flameSensorPin = 26;
const int buzzer = 14; // GPIO14 untuk buzer
//////////// Inisialisasi HCSR samping dan atas ///////////
const int trigPin1 = 12; //samping
const int echoPin1 = 13;
const int trigPin2 = 16; //atas
const int echoPin2 = 17;
//define sound speed in cm/uS
#define SOUND_SPEED 0.034
long duration1;
float distanceCm1;
long duration2;
float distanceCm2;
//////// Setup LCD I2C /////////
#include <LiquidCrystal_I2C.h>
// seting jumlah kolom dan baris LCD
int lcdColumns = 16;
int lcdRows = 2;
// Setting address LCD
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
///// Setup Koneksi WiFi & Telegram /////
void setuptg(){
lcd.setCursor(0, 0);
lcd.print("Menghubungkan ");
lcd.setCursor(0, 1);
lcd.print("Wifi ");
Serial.print("Connecting to Wifi SSID ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
lcd.setCursor(0, 0);
lcd.print("Menghubungkan ");
lcd.setCursor(0, 1);
lcd.print("Telegram ");
Serial.print("Retrieving time: ");
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
time_t now = time(nullptr);
while (now < 24 * 3600)
{
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
bot.sendMessage(CHAT_ID, "Bot started up", "");
}
bool api, gas, penyusup, gas_sebelum, api_sebelum, penyusup_old = false;
//api = false; gas , penyusup , gas_sebelum , api_sebelum = false;
/////////////////////// Setup ESP32 ///////////////////////
void setup() {
Serial.begin(115200); // Initiate a serial communication
pinMode(gasSensorPin, INPUT);
pinMode(flameSensorPin, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
lcd.init();
lcd.backlight();
setuptg();
lcd.setCursor(0, 0);
lcd.print(" Smart Home ");
lcd.setCursor(0, 1);
lcd.print("M. Alfianhamzah");
}
/////////////////////// Program Utama RFID, Servo, dan Stepper ///////////////////////
void loop() {
///// Program Deteksi Gas dan Api /////
if (digitalRead(gasSensorPin) == LOW) {
gas = true;
tone(buzzer, 500, 500);
delay(10);
} else {
gas = false;
}
Serial.print('.');
// Deteksi api
if (digitalRead(flameSensorPin) == HIGH) {
api = true;
tone(buzzer, 500, 500);
delay(10);
} else {
api = false;
}
if (gas!=gas_sebelum){
if (gas==true){
String message = "Peringatan: Kebocoran gas terdeteksi! ";
bot.sendMessage(CHAT_ID, message, "");
Serial.println(message);
} else {
String message = "Kebocoran gas sudah tidak terdeteksi";
bot.sendMessage(CHAT_ID, message, "");
Serial.println(message);
}
gas_sebelum = gas;
}
if (api!=api_sebelum){
if (api==true){
String message = "Peringatan: Api terdeteksi! ";
bot.sendMessage(CHAT_ID, message, "");
Serial.println(message);
} else {
String message = "Api sudah tidak terdeteksi";
bot.sendMessage(CHAT_ID, message, "");
Serial.println(message);
}
api_sebelum = api;
}
Serial.print('.');
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distanceCm1 = duration1 * SOUND_SPEED/2;
Serial.print("HC-SR04 samping (cm): ");
Serial.println(distanceCm1);
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distanceCm2 = duration2 * SOUND_SPEED/2;
Serial.print("HC-SR04 atas (cm): ");
Serial.println(distanceCm2);
if (distanceCm1 <= 10 && distanceCm1 >= 5){ // Ganti jarak deteksi sensor ultrasonik
penyusup = true;
} else {
penyusup = false;
}
if (distanceCm2 <= 10 && distanceCm2 >= 5){ // Ganti jarak deteksi sensor ultrasonik
penyusup = true;
} else {
penyusup = false;
}
if (penyusup!=penyusup_old){
if (penyusup==true){
String message = "Peringatan: Terdeteksi Ada Penyusup! ";
bot.sendMessage(CHAT_ID, message, "");
Serial.println(message);
}
penyusup_old = penyusup;
}
Serial.println("###");
delay(1000);
}