#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define LED 2
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define BOT_TOKEN "6000685713:AAHfAlM9opPOIZZVJYz4JcL2AKm36AYpywc" // Ganti dengan token bot Telegram Anda
#define DHTPIN 4 // Pin data sensor DHT11 terhubung ke pin GPIO4 (D4)
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi modul LCD dengan ukuran 16x2, sesuaikan dengan modul LCD yang Anda gunakan
bool ledState = false;
void setup() {
Serial.begin(9600);
// Inisialisasi modul LCD
lcd.init();
lcd.backlight();
// Deklarasi pin untuk lampu LED
pinMode(LED, OUTPUT);
// Menghubungkan ke WiFi
connectToWiFi();
// Menginisialisasi sensor DHT
dht.begin();
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Tambahkan root certificate untuk api.telegram.org
}
void loop() {
static unsigned long previousMillis = 0;
const long interval = 1000; // pesan dikirimkan setiap 30 menit
unsigned long currentMillis = millis();
// Membaca suhu dan kelembaban dari sensor DHT
float h = dht.readHumidity();
float t = dht.readTemperature();
// Menampilkan suhu pada modul LCD
lcd.setCursor(0, 0);
lcd.print("TEMP: ");
lcd.print(t);
// Memeriksa apakah suhu melebihi batas tertentu
bool temperatureExceeded = (t > 32);
if (temperatureExceeded) {
lcd.setCursor(0, 3);
lcd.print("Suhu melebihi 32C ");
// Mengatur LED untuk menyala
digitalWrite(LED, HIGH);
} else {
lcd.setCursor(0, 3);
lcd.print("HUMID: ");
lcd.print(h);
// Mengatur LED untuk mati
digitalWrite(LED, LOW);
}
// Memeriksa pesan dari bot Telegram
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
for (int i = 0; i < numNewMessages; i++) {
String command = bot.messages[i].text;
if (command == "/ceksuhu") {
String response = "Suhu terkini: " + String(t) + " C";
if (temperatureExceeded) {
response += " (Suhu melebihi 32 derajat Celsius)";
}
sendTelegramMessage(response);
}
}
// Mengirim pesan dari bot Telegram setiap 30 menit
if (currentMillis - previousMillis >= interval) {
sendTelegramMessage("Suhu terkini: " + String(t) + " C");
previousMillis = currentMillis; // Menyimpan waktu terakhir pesan dikirim
}
}
void connectToWiFi() {
Serial.print("Menghubungkan ke WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
//delay(1000);
}
Serial.println("\nTerhubung ke jaringan WiFi");
}
void sendTelegramMessage(String message) {
if (WiFi.status() == WL_CONNECTED) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
if (numNewMessages > 0) {
String chatId = bot.messages[0].chat_id; // Ekstrak chat ID dari pesan pertama
Serial.println("Mengirim pesan ke chat ID: " + chatId);
if (bot.sendMessage(chatId, message, "Markdown")) {
Serial.println("Pesan Telegram berhasil dikirim");
} else {
Serial.println("Gagal mengirim pesan Telegram");
}
} else {
Serial.println("Tidak ada pesan baru untuk mendapatkan chat ID");
}
} else {
Serial.println("Tidak terhubung ke WiFi");
}
}