//NAMA : NOVITA SARI NUR SAPUTRI\\
//NIM : 22065009 \\
// **PRAKTIKUM PERANGKAT LUNAK ELEKTRONIKA** \\
//""DESIGN RUMAH PINTAR BERBASIS INTERNET OF THINGS (IOT) VIA TELEGRAM\\
// MASSENGER BOT DAN NODEMCU ESP32"" \\
#include<WiFi.h> //Memanggil library WiFi
#include<WiFiClientSecure.h> //Memanggil library WiFi
#include<UniversalTelegramBot.h> //Memanggil library Telegram
#include <ESP32Servo.h> //Memanggil Library Servo
#include <DHT.h> // Memanggil Library DHT11
#include <LiquidCrystal_I2C.h> // Memamnggil Library LCD I2C
//Deklarasi Untuk Lampu Otomatis
#define LED1 13 // LED TERAS
#define LED2 14 // LED RUANG TAMU
#define LED3 15 // LED RUANG KELUARGA
#define LED4 16 // LED KAMAR
#define LED5 17 // LED DAPUR
//Deklarasi Untuk Pagar Otomatis
#define TRIG2_PIN 4 // Pin TRIG Ultrasonic
#define ECHO2_PIN 2 // Pin ECHO Ultrasonic
#define SERVO_PIN 27 // Pin Servo Ultrasonic atau Pagar Otomatis
#define Led 19 // Pin LED Indikator Pagar
float duration_us, distance_cm; // Deklarasi untu jarak satuan CM
Servo servo; // Servo dari Pagar Otomatis (Ultrasonic)
//Deklarasi Untuk Sensor Suhu Ruangan
#define DHTPIN 12 // Pin Sensor DHT11
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHT22);
//Deklarasi Untuk Jemuran Otomatis
#define LDR 26 // Pin Sensor LDR
#define SERVO1_PIN 25 // Pin Servo LDR
#define Led2 32 //Indikator LED jemuran
Servo servo1; // Servo dari Jemuran Otomatis (LDR)
LiquidCrystal_I2C lcd(0x27,20,4); // LCD I2C dan juga Ukuran LCD
int chk;
float hum; // Deklarasi Kelembaban
float temp; // Deklarasi Suhu
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD""
#define BOT_TOKEN "6840316645:AAHW9UQxbx54ysmx4t4fHgi392mj-ahZUig"//Token dari Telegram
#define CHAT_ID "5509533589" //ID dari Telegram
const unsigned long BOT_MTBS = 1000;
unsigned long bot_lasttime;
WiFiClientSecure secured_client;
UniversalTelegramBot bot (BOT_TOKEN, secured_client);
void setup()
{
Serial.begin(115200);
while(!Serial){}//start running when the serial is open
delay(3000);
Serial.print("Connecting WiFi.");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
while (WiFi.status()!=WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);//Setelah 0 pixel dari kiri, baris ke 0
lcd.print("Welcome To Smarthome");
lcd.setCursor(2,2);//Setelah 2 pixel dari kiri, baris ke 2
lcd.print("BY : Novita Sari");
lcd.setCursor(5,3);//Setelah 5 pixel dari kiri, baris ke 3
lcd.print("Nur Saputri");
delay(3000); //Tunda 3 detik
lcd.clear(); // Selesai
//LED Sebagai Output
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
Serial.println("");
Serial.println("WiFi connected");
pinMode(TRIG2_PIN, OUTPUT);
pinMode(ECHO2_PIN, INPUT);
pinMode(Led, OUTPUT);
servo.attach(SERVO_PIN);
servo.write(0);
{
Serial.println("");
Serial.println("WiFi connected");
pinMode(LDR, OUTPUT);
servo1.attach(SERVO1_PIN);
servo1.write(0);
}
}
void loop(){
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();
}
}
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";
// Menu untuk menghidupkan dan Mematikan LED
if (text=="/On1") // Jika klik On1
{
digitalWrite(LED1,HIGH); // Lampu 1 akan menyala
String msg ="LED Teras : Hidup"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if(text=="/Off1") // Jika klik Off1
{
digitalWrite(LED1,LOW); // Lampu 1 akan Mati
String msg ="LED Teras : Mati"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if (text=="/On2") // Jika klik On2
{
digitalWrite(LED2,HIGH); // Lampu 2 akan Menyala
String msg ="LED Ruang Tamu: Hidup"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if(text=="/Off2") // Jika klik Off2
{
digitalWrite(LED2,LOW); // Lampu 2 akan Mati
String msg ="LED Ruang Tamu: Mati"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if (text=="/On3") // Jika klik On3
{
digitalWrite(LED3,HIGH); // Lampu 3 akan Menyala
String msg ="LED Ruang Keluarga: Hidup";// Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if(text=="/Off3") // Jika klik Off3
{
digitalWrite(LED3,LOW); // Lampu 3 akan Mati
String msg ="LED Ruang Keluarga: Mati"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if (text=="/On4") // Jika klik On4
{
digitalWrite(LED4,HIGH); // Lampu 4 akan Menyala
String msg ="LED Kamar: Hidup"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if(text=="/Off4") // Jika klik Off4
{
digitalWrite(LED4,LOW); // Lampu 4 akan Mati
String msg ="LED Kamar: Mati"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if (text=="/On5") // Jika klik On5
{
digitalWrite(LED5,HIGH); // Lampu 5 akan Menyala
String msg ="LED Dapur: Hidup"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if(text=="/Off5") // Jika klik Off5
{
digitalWrite(LED5,LOW); // Lampu 5 akan Mati
String msg ="LED Dapur: Mati"; // Mengirim Teks Kondisi LED
bot.sendMessage(chat_id,msg,""); // Mengirim ke Telegram
}
if(text=="/OnAll") // Jika Klik /OnAll
{
//Semua LED Menyala
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
String msg ="Semua LED Status: Hidup";
bot.sendMessage(chat_id,msg,"");
}
if(text=="/OffAll") // Jika klik /OffAll
{
//Semua LED Mati
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
String msg ="Semua LED Status: Mati";
bot.sendMessage(chat_id,msg,"");
}
if(text == "/start")
{
String welcome = "Blinking LED With ESP32\n";
welcome += "/On1 : Hidupkan LED Teras\n";
welcome += "/Off1 : Matikan LED Teras\n";
welcome += "/On2 : Hidupkan LED Ruang Tamu\n";
welcome += "/Off2 : Matikan LED Ruang Tamu\n";
welcome += "/On3 : Hidupkan LED Ruang Keluarga\n";
welcome += "/Off3 : Matikan LED Ruang Keluarga\n";
welcome += "/On4 : Hidupkan LED Kamar\n";
welcome += "/Off4 : Matikan LED Kamar\n";
welcome += "/On5 : Hidupkan LED Dapur\n";
welcome += "/Off5 : Matikan LED Dapur\n";
welcome += "/OnAll : Hidupkan Semua LED\n";
welcome += "/OffAll: Matikan Semua LED\n";
bot.sendMessage(chat_id,welcome,"Markdown");
}
// Sensor Ultrasonic Sebagai Pagar Otomatis
digitalWrite(TRIG2_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG2_PIN, LOW);
duration_us = pulseIn(ECHO2_PIN, HIGH);
distance_cm = 0.017 * duration_us;
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" Cm");
if (distance_cm < 200)
{
String welcome = "Control Pagar With ESP32\n";
welcome += "/Buka : Buka Pagar\n";
welcome += "/Tutup : Tutup Pagar";
bot.sendMessage(chat_id,welcome,"Markdown");
}
if (text=="/Buka")
{
digitalWrite(Led,HIGH);
servo.write (90);
String msg ="Pagar Terbuka\nObject Range :";
msg += msg.concat(distance_cm);
msg += " Cm";
bot.sendMessage(chat_id,msg,"");
}
if(text=="/Tutup")
{
digitalWrite(Led,LOW);
servo.write (0);
String msg ="Pagar Tertutup";
bot.sendMessage(chat_id,msg,"");
}
}
//Sensor DHT11 Sebagai Sensor Suhu dan Kelembabab
{
hum = dht.readHumidity();
temp = dht.readTemperature();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Suhu dan Kelembaban");
//LCD Untuk Mengukur Suhu
lcd.setCursor(0,2);
lcd.print("Suhu :");
lcd.setCursor(13,2);
lcd.print(temp);
lcd.setCursor(19,2);
lcd.print("C");
//LD Untuk Mengukur Kelembaban
lcd.setCursor(0,3);
lcd.print("Kelembaban :");
lcd.setCursor(13,3);
lcd.print(hum);
lcd.setCursor(19,3);
lcd.print("%");
//delay(500);
//lcd.clear();
}
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();
}
}
{
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";
// Untuk Menampilkan Suhu dan Kelembaban di Telegram
{
String msg = "Temperature : ";
msg += msg.concat(temp);
msg += "C";
bot.sendMessage(chat_id,msg, "");
{
String msg = "Humidity : ";
msg += msg.concat(hum);
msg += "%";
bot.sendMessage(chat_id,msg, "");
}
// Sensor LDR Sebagai Sensor Cuaca Dimana Untuk Program Jemuran Otomatis
if (LDR < 150) //Jika LDR <40 maka akan mengirimkan menu pilihan ke bot telegram
{
//Menu Jemuran Otomatis
String welcome = "Control Jemuran With ESP32\n";
welcome += "/Open : Buka Atap Jemuran\n"; // Klik /Open untuk membuka atap jemuran
welcome += "/Close : Tutup Atap Jemuran"; // Klik /Close untuk menutup atap jemuran
bot.sendMessage(chat_id,welcome,"Markdown"); // Mengirim perintah pesan ke bot telegram
}
// Setelah menu muncul maka ada dua pilihan sebagai berikut :
if (text=="/Open") // Jika klik /Open
{
servo1.write (90); // Servo berputar 90 derajat
digitalWrite(Led2, HIGH);
String msg ="Cuaca Terang!!\nAtap Terbuka"; // Menerima pesan "Atap Terbuka"
bot.sendMessage(chat_id,msg,"");
}
if (text=="/Close") // Jika klik /Close
{
servo1.write (0); // Servo berputar ke posisi normal atau posisi 0
digitalWrite(Led2, LOW);
String msg ="Cuaca Mendung!!\nAtap Tertutup"; // Menerima pesan "Atap Tertutup"
bot.sendMessage(chat_id,msg,"");
if (LDR > 150){
servo1.write(0);
digitalWrite(Led2, LOW);
String msg ="Cuaca Mendung!!\nAtap Tertutup";
bot.sendMessage(chat_id,msg,"");
delay (500);
}
}
}
}
}
}
}