#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <UniversalTelegramBot.h>
#include <WiFiClientSecure.h>
// Pin untuk potensiometer
#define POT_PIN 34 // Salah satu pin analog ESP32 (GPIO 34)
// Pin untuk DHT22
#define DHTPIN 15 // Pin yang terhubung ke data pin DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT yang digunakan
// Pin untuk LED dan Buzzer
#define LED_PIN 2
#define BUZZER_PIN 4
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// WiFi Credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Telegram Bot Token
#define BOT_TOKEN "7874489008:AAEiqRnaqbMsD93cMFVnvqjwKbkLlltjcME"
#define CHAT_ID "6221316201"
// Blynk Authentication Token
#define BLYNK_TEMPLATE_ID "TMPL6lzaxgfyB"
#define BLYNK_TEMPLATE_NAME "MONITORING CO2 DAN SUHU"
#define BLYNK_AUTH_TOKEN "9xDZkS2ez4nOyfoXYKhT3WVz56jN8OLi"
// Telegram Client
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void setup() {
// Inisialisasi serial untuk debugging
Serial.begin(115200);
// Inisialisasi DHT22
dht.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("DHT22 & CO2");
delay(2000);
lcd.clear();
// Inisialisasi LED dan Buzzer
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Sambungkan ke WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Hubungkan ke Blynk
Blynk.begin(auth, ssid, password);
// Konfigurasi client untuk Telegram
client.setCACert(telegram_cert); // Sertifikat root untuk koneksi Telegram
}
void loop() {
Blynk.run();
// Baca suhu dan kelembapan dari DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Periksa apakah ada kesalahan pembacaan dari DHT22
if (isnan(temperature) || isnan(humidity)) {
Serial.println(F("Failed to read from DHT sensor!"));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error: DHT22");
delay(2000);
return;
}
// Baca nilai dari potensiometer (dianggap sebagai CO2)
int potValue = analogRead(POT_PIN);
float co2Level = potValue * (3.3 / 4095.0); // Konversi ke tegangan
// Tampilkan hasil di Serial Monitor
Serial.print(F("Temperature: "));
Serial.print(temperature);
Serial.print(F("°C, Humidity: "));
Serial.print(humidity);
Serial.println(F("%"));
Serial.print(F("CO2 Level: "));
Serial.println(co2Level);
// Tampilkan suhu dan CO2 di LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("CO2: ");
lcd.print(co2Level);
lcd.print("V ");
// Jika suhu di atas 30°C, aktifkan LED, buzzer, kirim notifikasi
if (temperature > 30) {
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
// Kirim pesan ke Telegram
String message = "WARNING: High Temperature!\n";
message += "Temp: " + String(temperature) + "°C\n";
message += "CO2: " + String(co2Level) + "V";
bot.sendMessage(chatID, message, "");
// Kirim data ke Blynk
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, co2Level);
} else {
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
delay(2000); // Jeda sebelum pembacaan selanjutnya
}