#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6EdpUWuNX"
#define BLYNK_TEMPLATE_NAME "DWIKY"
#define BLYNK_AUTH_TOKEN "SrkZK_4KVnc6Q-VHGmT39NjlYiqVZiTL"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <math.h> // Library untuk fungsi log()
// Informasi WiFi
char ssid[] = "wedus"; // Nama WiFi
char pass[] = "asuwiuwiu"; // Password WiFi
// Token Blynk
char auth[] = BLYNK_AUTH_TOKEN;
// Konfigurasi sensor suhu (termistor)
const float BETA = 3950; // Koefisien Beta dari termistor
const float referensiSuhu = 298.15; // Temperatur referensi (25°C dalam Kelvin)
float faktorKalibrasi = 1.0; // Faktor kalibrasi default
float offset = 0.0; // Offset suhu
int suhuPin = 34; // Pin sensor suhu (misalnya, gunakan pin analog 34)
int relayPin = 26; // Pin relay
int buzzerPin = 27; // Pin buzzer
float suhu; // Variabel untuk menyimpan suhu
bool relayManual = false; // Status kontrol manual relay
BlynkTimer timer;
// Fungsi untuk membaca suhu
void bacaSuhu() {
int analogValue = analogRead(suhuPin);
// Perhitungan suhu dalam derajat Celcius dengan kalibrasi
suhu = 1 / (log(1 / (4095.0 / analogValue - 1)) / BETA + 1.0 / referensiSuhu) - 273.15;
suhu = suhu * faktorKalibrasi + offset; // Menerapkan faktor kalibrasi dan offset
Serial.print("Suhu: ");
Serial.println(suhu);
// Kontrol otomatis relay berdasarkan suhu, jika kontrol manual tidak aktif
if (!relayManual) {
if (suhu > 30.0) {
digitalWrite(relayPin, HIGH); // Relay menyala
} else {
digitalWrite(relayPin, LOW); // Relay mati
}
}
// Mengaktifkan buzzer jika suhu lebih dari 35°C
if (suhu > 35.0) {
digitalWrite(buzzerPin, HIGH); // Buzzer menyala
} else {
digitalWrite(buzzerPin, LOW); // Buzzer mati
}
Blynk.virtualWrite(V1, suhu); // Mengirim suhu ke Blynk (virtual pin V1)
}
// Fungsi untuk mengontrol relay secara manual dari Blynk
BLYNK_WRITE(V2) { // V2 adalah virtual pin untuk tombol relay
relayManual = param.asInt(); // Membaca status tombol (0 atau 1)
if (relayManual) {
digitalWrite(relayPin, HIGH); // Relay menyala
} else {
digitalWrite(relayPin, LOW); // Relay mati
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(suhuPin, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(relayPin, LOW); // Pastikan relay mati saat memulai
digitalWrite(buzzerPin, LOW); // Pastikan buzzer mati saat memulai
timer.setInterval(2000L, bacaSuhu); // Membaca suhu setiap 2 detik
}
void loop() {
Blynk.run(); // Menjalankan fungsi Blynk
timer.run(); // Menjalankan fungsi timer
}