#define BLYNK_TEMPLATE_ID "TMPL6GZpYRvo4"
#define BLYNK_TEMPLATE_NAME "tele"
#define BLYNK_AUTH_TOKEN "h-wtZnY8Vl1VDcVJlp4u3CRH6lPDsz9V"
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#define DHTPIN 21 // Pin untuk DHT
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define LED 2
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const char* botToken = "8066059992:AAFYOUwL0dkjlMgBLteYXL0buKvT4T-uyYc";
WiFiClientSecure client;
UniversalTelegramBot bot(botToken, client);
const int ledPin = 2;
const int buttonPin = 4;
bool ledState = LOW;
String chat_id = "6502234359";
unsigned long lastTimeBotRan;
const int botInterval = 1000;
unsigned long terakhirTekan = 0;
unsigned long delayTekan = 50;
int terakhirButtonState = HIGH;
int buttonState = HIGH;
BlynkTimer timer;
float suhu, kelembapan;
BLYNK_WRITE(V0) {
int switchLED = param.asInt();
digitalWrite(LED, switchLED);
if (switchLED == 1) {
ledState = HIGH;
bot.sendMessage(chat_id, "Pesan dari Blynk: LED Menyala!", "");
Serial.println("Pesan terkirim ke Telegram melalui Blynk: LED Menyala");
} else {
ledState = LOW;
bot.sendMessage(chat_id, "Pesan dari Blynk: LED Mati!", "");
Serial.println("Pesan terkirim ke Telegram melalui Blynk: LED Mati");
}
}
void sendSensorData() {
suhu = dht.readTemperature(); // Membaca suhu
kelembapan = dht.readHumidity(); // Membaca kelembapan
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca data dari sensor DHT!");
return;
}
Blynk.virtualWrite(V1, suhu); // Kirim suhu ke Virtual Pin V2
Blynk.virtualWrite(V2, kelembapan); // Kirim kelembapan ke Virtual Pin V1
Serial.println("Data sensor dikirim ke Blynk:");
Serial.print("Suhu: ");
Serial.println(suhu);
Serial.print("Kelembapan: ");
Serial.println(kelembapan);
}
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
String text = bot.messages[i].text;
if (text == "nyala") {
digitalWrite(ledPin, HIGH);
ledState = HIGH;
bot.sendMessage(chat_id, "LED Menyala", "");
Serial.println("Perintah dari Telegram: LED Menyala");
} else if (text == "mati") {
digitalWrite(ledPin, LOW);
ledState = LOW;
bot.sendMessage(chat_id, "LED Mati", "");
Serial.println("Perintah dari Telegram: LED Mati");
} else if (text == "suhu") {
String message = "Suhu saat ini: " + String(suhu) + "°C, Kelembapan: " + String(kelembapan) + "%";
bot.sendMessage(chat_id, message, "");
Serial.println("Perintah dari Telegram: " + message);
} else {
bot.sendMessage(chat_id, "Perintah tidak dikenal. Ketik 'nyala', 'mati', atau 'suhu'.", "");
Serial.println("Perintah dari Telegram salah.");
}
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(LED, OUTPUT);
Serial.print("Menghubungkan ke WiFi");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Terhubung ke WiFi.");
dht.begin(); // Inisialisasi DHT sensor
client.setInsecure();
bot.sendMessage(chat_id, "BOT lampu LED aktif", "");
digitalWrite(ledPin, LOW);
timer.setInterval(2000L, sendSensorData); // Kirim data sensor ke Blynk setiap 2 detik
}
void loop() {
Blynk.run();
timer.run();
int reading = digitalRead(buttonPin);
if (reading != terakhirButtonState) {
terakhirTekan = millis();
}
if (millis() - lastTimeBotRan > botInterval) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
Serial.println("Ada pesan baru di Telegram");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
if ((millis() - terakhirTekan) > delayTekan) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
ledState = !ledState;
digitalWrite(ledPin, ledState);
if (ledState) {
bot.sendMessage(chat_id, "LED Menyala", "");
Serial.println("LED Menyala");
} else {
bot.sendMessage(chat_id, "LED Mati", "");
Serial.println("LED Mati");
}
}
}
}
terakhirButtonState = reading;
}