/*******************************************************
* ESP32 + DHT22 + Telegram Bot (UniversalTelegramBot)
* ----------------------------------------
* Fungsi:
* - Membaca suhu & kelembaban dari sensor DHT22
* - Mengirim data tersebut ke akun Telegram setiap 10 detik
* - Menggunakan bot Telegram (token & chat ID dari BotFather/IDBot)
*******************************************************/
#include <WiFi.h> // Library WiFi untuk koneksi jaringan
#include <WiFiClientSecure.h> // Library untuk koneksi HTTPS (Telegram)
#include <UniversalTelegramBot.h>// Library untuk komunikasi dengan Telegram
#include "DHT.h" // Library sensor DHT (DHT11/DHT22)
// ====== Konfigurasi Sensor DHT22 ======
#define DHTPIN 13 // Pin data sensor DHT22 dihubungkan ke GPIO4
#define DHTTYPE DHT22 // Tipe sensor yang digunakan adalah DHT22
DHT dht(DHTPIN, DHTTYPE); // Membuat objek 'dht' untuk membaca sensor
// ====== Konfigurasi WiFi dan Telegram ======
const char* ssid = "Wokwi-GUEST"; // SSID WiFi (di Wokwi simulator)
const char* password = ""; // Password WiFi (kosong untuk Wokwi)
const String BOT_TOKEN = "7607750780:AAEf7_9rjz7KGlzUz2cFvEu0kcnfLbB58sE"; // Token bot Telegram dari BotFather
const String CHAT_ID = "210423233"; // Chat ID dari IDBot (penerima pesan)
// ====== Objek Telegram dan WiFiClient ======
WiFiClientSecure client; // Objek client untuk koneksi HTTPS
UniversalTelegramBot bot(BOT_TOKEN, client); // Objek bot Telegram
void setup() {
Serial.begin(115200); // Mengaktifkan Serial Monitor (baudrate 115200)
dht.begin(); // Menginisialisasi sensor DHT22
// === Koneksi ke jaringan WiFi ===
Serial.print("Menghubungkan ke WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password); // Memulai koneksi ke jaringan WiFi
// Menunggu hingga terhubung ke WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Jika berhasil terhubung, tampilkan alamat IP
Serial.println("\nWiFi tersambung!");
Serial.print("IP ESP32: ");
Serial.println(WiFi.localIP());
// === Konfigurasi koneksi HTTPS ke Telegram ===
client.setInsecure(); // Mengizinkan koneksi HTTPS tanpa sertifikat
// (Aman untuk percobaan; di sistem produksi sebaiknya set sertifikat CA)
// Kirim pesan awal ke Telegram saat ESP32 aktif
bot.sendMessage(CHAT_ID, "✅ ESP32 + DHT22 telah aktif dan terhubung ke Telegram!", "");
}
void loop() {
// === Membaca suhu dan kelembaban dari DHT22 ===
float suhu = dht.readTemperature(); // Membaca suhu dalam °C
float kelembaban = dht.readHumidity(); // Membaca kelembaban dalam %
// === Pastikan hasil pembacaan valid ===
if (!isnan(suhu) && !isnan(kelembaban)) { // isnan() memeriksa apakah data valid
// Membentuk pesan teks untuk Telegram
String pesan = "🌡 Suhu: " + String(suhu, 1) + "°C\n💧 Kelembaban: " + String(kelembaban, 1) + "%";
// Kirim pesan ke akun Telegram (chat_id)
bot.sendMessage(CHAT_ID, pesan, "");
Serial.println("Pesan terkirim ke Telegram:");
Serial.println(pesan);
} else {
// Jika data gagal dibaca, tampilkan pesan error di Serial Monitor
Serial.println("⚠️ Gagal membaca data DHT22!");
}
// === Tunggu 10 detik sebelum kirim ulang ===
delay(10000); // delay dalam milidetik (10 detik)
}