// NAMA : ANISA SUSILAWATI
// NIM : 2305080022
// TUGAS INSTRUMENTASI ELEKTRONIS
// SENSOR SUHU DAN KELEMBABAN PADA TANAMAN HIDROPONIK
#include "DHTesp.h" //import library DHTesp, digunakan untuk berinteraksi dengan sensor suhu dan kelembaban DHT
#include <LiquidCrystal_I2C.h> //import library LiquidCrystal_I2C, digunakan untuk mengendalikan LCD dengan protokol I2C.
LiquidCrystal_I2C lcd(0x27, 20, 4); //Membuat objek lcd dengan alamat I2C 0x27 dengan ukuran 20 kolom dan 4 baris.
// Blynk setup: untuk menghubungkan dengan Blynk app dan menampilkan data di aplikasi
#define BLYNK_TEMPLATE_ID "TMPL6_l4c4S35" // ID Template untuk Blynk
#define BLYNK_TEMPLATE_NAME "SUHU" // Nama template untuk Blynk
#define BLYNK_AUTH_TOKEN "M8-mGttBJcYGpP4hNZmZx6ppyJ27zH_L" // Token autentikasi Blynk
const int DHT_PIN = 15; //Pin DHT yang disambungkan ke ESP32.
// Inisialisasi sensor DHT (DHTesp untuk sensor DHT22) dan objek untuk nilai suhu dan kelembaban
DHTesp dhtSensor; // Membuat objek dari kelas DHTesp untuk menghubungkan sensor DHT
int suhu; // Variabel untuk menyimpan nilai suhu
int kelembaban; // Variabel untuk menyimpan nilai kelembaban
#define BLYNK_PRINT Serial // Mengonfigurasi library Blynk agar menggunakan objek Serial untuk output debug.
// Mengimpor library untuk koneksi WiFi dan Blynk
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Mengatur nama dan kata sandi jaringan WiFi untuk koneksi
char ssid[] = "Wokwi-GUEST"; // SSID WiFi
char pass[] = ""; // Password WiFi (kosong jika tidak ada password)
// Interval pengiriman data ke server Blynk.
BlynkTimer timer;
/* Fungsi yang dipanggil setiap interval timer untuk membaca suhu dan kelembaban dari sensor DHT,
mengirim data ke server Blynk, dan menampilkan informasi di Serial Monitor serta LCD. */
void myTimerEvent()
{
// Membaca data suhu dan kelembaban dari sensor DHT
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhu = data.temperature; // Menyimpan suhu ke variabel suhu
kelembaban = data.humidity; // Menyimpan kelembaban ke variabel kelembaban
// Mengirim data suhu dan kelembaban ke aplikasi Blynk pada virtual pin V0 (suhu) dan V1 (kelembaban)
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, kelembaban);
// Menampilkan data suhu dan kelembaban di Serial Monitor
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Kelembaban: " + String(data.humidity, 2) + "%");
Serial.println("============");
// Menampilkan data suhu dan kelembaban di LCD
lcd.setCursor(0, 0); // Menetapkan posisi cursor pada baris pertama dan kolom pertama
lcd.print("Temp= " + String(data.temperature, 2) + " C"); // Menampilkan suhu pada LCD
lcd.setCursor(0, 1); // Menetapkan posisi cursor pada baris kedua
lcd.print("Kelembaban= " + String(data.humidity, 1) + "%"); // Menampilkan kelembaban pada LCD
delay(1000); // Menunggu selama 1 detik sebelum membaca kembali
}
void setup() {
Serial.begin(115200); // Memulai komunikasi serial dengan baud rate 115200
// Menyiapkan sensor DHT di pin yang telah ditentukan
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Menghubungkan ESP32 ke Blynk menggunakan autentikasi token dan WiFi
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Mengatur interval timer untuk mengirim data setiap 1000 ms (1 detik)
timer.setInterval(1000L, myTimerEvent);
// Menyiapkan LCD
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Menyalakan lampu latar LCD
}
/* Fungsi loop ini akan terus dijalankan berulang-ulang untuk menjaga koneksi dengan Blynk
dan menjalankan timer untuk pembacaan sensor suhu dan kelembaban. */
void loop() {
Blynk.run(); // Menjalankan fungsi Blynk.run() untuk menjaga koneksi ke server Blynk
timer.run(); // Menjalankan fungsi timer.run() untuk memanggil fungsi timer yang telah ditentukan
}