#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define BOTtoken "7310413624:AAFDebyEkuLFzSSbHcJlbXqHCnQomFgOLN4" // diisi Token Bot (Dapat dari Telegram Botfather) WiFiClientSecure client; UniversalTelegramBot bot(BOTtoken, client);
#define DHTPIN 19 // Pin yang terhubung ke sensor DHT
#define DHTTYPE DHT22 // Jenis sensor yang Anda gunakan (DHT11/DHT22/DS18B20)
const int ledPin = 18;
bool ledState = LOW;
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
// Alamat I2C LCD
const int lcdAddress = 0x27; // Sesuaikan dengan alamat LCD I2C Anda
// Jumlah kolom dan baris pada LCD
const int lcdColumns = 16;
const int lcdRows = 2;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(lcdAddress, lcdColumns, lcdRows);
//Checks for new messages every 1 second.
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;
void handleNewMessages(int numNewMessages) {
Serial.println("handleNewMessages");
Serial.println(String(numNewMessages));
for (int i=0; i<numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (from_name == "") from_name = "Guest";
//Cek Pembacaan Sensor DHT11
if (text == "/statussuhu") {
int t = dht.readTemperature();
String temp = "Suhu saat ini : ";
temp += int(t);
temp +=" *C\n";
bot.sendMessage(chat_id,temp, "");
}
if (text == "/statuskelembapan") {
int h = dht.readHumidity();
String temp = "Kelembaban: ";
temp += int(h);
temp += " %";
bot.sendMessage(chat_id,temp, "");
}
if (text == "/ledon") {
bot.sendMessage(chat_id, "LED dinyalakan", "");
ledState = HIGH;
digitalWrite(ledPin, ledState);
}
if (text == "/ledoff") {
bot.sendMessage(chat_id, "LED dimatikan", "");
ledState = LOW;
digitalWrite(ledPin, ledState);
}
if (text == "/statusLED") {
if (digitalRead(ledPin)){
bot.sendMessage(chat_id, "LED menyala", "");
}
else{
bot.sendMessage(chat_id, "LED mati", "");
}
}
//Cek Command untuk setiap aksi
if (text == "/start") {
String welcome = "Welcome " + from_name + ".\n";
welcome += "/statussuhu : Status Suhu\n";
welcome += "/statuskelembapan : Status Kelembapan\n";
welcome += "Gunakan perintah berikut untuk LED.\n";
welcome += "/ledon untuk menghidupkan LED\n";
welcome += "/ledoff untuk mematikan LED\n";
welcome += "/statusLED untuk mengetahui kondisi LED \n";
bot.sendMessage(chat_id, welcome, "Markdown");
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
// Inisialisasi LCD
lcd.init();
// Hidupkan backlight (opsional)
lcd.backlight();
client.setInsecure();
// Set WiFi to station mode and disconnect from an AP if it was Previously
// connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(500);
// attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}
void loop() {
delay(2000); // Tunggu 2 detik sebelum membaca suhu lagi
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
lcd.setCursor(0, 0); // Pindah ke baris kedua
lcd.print(" "); // Menghapus nilai sebelumnya
lcd.setCursor(0, 0); // Kembali ke baris kedua
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1); // Pindah ke posisi ke-9 pada baris kedua
lcd.print(" "); // Menghapus nilai sebelumnya
lcd.setCursor(0, 1); // Kembali ke posisi ke-9 pada baris kedua
lcd.print("Lembab: ");
lcd.print(humidity);
lcd.print("%");
if (millis() > lastTimeBotRan + botRequestDelay) {
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);
}
lastTimeBotRan = millis();
}
}