#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
// koneksi ke WiFi sendiri
#define WIFI_SSID "FITRIA AMRINA"
#define WIFI_PASSWORD "20071982"
#define BOT_TOKEN "6275850405:AAHGLUpugcX5xG6x5Ll-pkVJfgVkgeAo5M8"
#define CHAT_ID "6298678396"
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
const unsigned long BOT_MTBS = 1000;
unsigned long bot_lasttime;
int buzzerPin = 15; // Deklarasi variabel input pin buzzer
int inputPin = 14; // Deklarasi variabel input pin Sensor PIR
int pirState = LOW; // Pada saat memulai, Sensor PIR dimulai dari LOW
int val = 0; // Deklarasi variabel untuk membaca status pin
void handleNewMessages(int numNewMessages)
{
Serial.print("handleNewMessages ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++)
{
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID )
{
bot.sendMessage(chat_id, "Unauthorized user", "");
}
else
{
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (from_name == "")
from_name = "Guest";
if (text == "/status")
{
if (pirState == HIGH)
{
String msg = "Gerakan : \n";
msg += "TIDAK TERDETEKSI";
bot.sendMessage(chat_id,msg,"");
} else
if (pirState == LOW)
{
String msg2 = "Gerakan : \n";
msg2 += "TERDETEKSI";
bot.sendMessage(chat_id,msg2,"");
}
} else
if (text == "/start")
{
String welcome = "Monitoring gerak menggunakan sensor PIR \n";
welcome += "/status : cek kondisi gerakan \n";
bot.sendMessage(CHAT_ID, welcome, "");
}
}
}
}
void setup()
{
pinMode(buzzerPin, OUTPUT); // Deklarasi buzzer sebagai Output
pinMode(inputPin, INPUT); // Deklarasi Sensor PIR sebagai Input
Serial.begin(9600);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
// Program Awal LCD
LCD.init();
LCD.backlight();
LCD.setCursor(5,0);
LCD.print("SENSOR");
LCD.setCursor(1,1);
LCD.print("GERAK/BAYANGAN");
delay (1000);
}
void loop()
{
val = digitalRead(inputPin); // Membaca nilai input
if (val == LOW) { // Jika Input LOW, maka :
digitalWrite(buzzerPin, LOW); // LED tidak menyala
if (pirState == LOW) {
// Jika, input LOW maka akan LCD akan mengeluarkan output "TIDAK TERDETEKSI GERAKAN"
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print("TIDAK TERDETEKSI");
LCD.setCursor(0,1);
LCD.print(" GERAKAN ");
// Output program akan terganti, jika input bernilai HIGH
pirState = HIGH;
}
} else {
digitalWrite(buzzerPin, HIGH); // Menuliskan nilai LED/output bernilai HIGH
if (pirState == HIGH) { // Jika Input HIGH, maka :
// Jika, input HIGH maka akan LCD akan mengeluarkan output "TERDETEKSI GERAKAN"
LCD.init();
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print(" TERDETEKSI ");
LCD.setCursor(0,1);
LCD.print(" GERAKAN ");
// Output program akan terganti, jika input bernilai LOW
pirState = LOW;
}
}
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}