// Deklarasi konfigurasi template pada aplikasi Blynk
#define BLYNK_TEMPLATE_ID "TMPL6dJFsxpkd"
#define BLYNK_TEMPLATE_NAME "CS Modul 9 Farrel Mirawan"
#define BLYNK_AUTH_TOKEN "8kOC5w4u3Hxg5e26TBBT1oQoUTW1PJoJ"
// Menggunakan Serial sebagai output untuk Blynk
#define BLYNK_PRINT Serial
// Pin LED bawaan (built-in) pada ESP32
#define LED_PIN LED_BUILTIN
// Menggunakan library Arduino, FreeRTOS, dan Blynk untuk ESP32
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
// Konfigurasi jaringan WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin-pins virtual untuk tombol dan indikator pada aplikasi Blynk
#define AC_POWER_PIN V0
#define AC_TEMPERATURE_PIN V1
#define AC_FAN_SPEED_PIN V2
#define DISP_POWER_PIN V3
#define DISP_TEMP_SPEED_PIN V4
// Variabel status dan pengaturan awal AC
int currentState = 0; // 0: AC MATI, 1: AC HIDUP
int targetTemperature = 16; // Pengaturan awal suhu
int targetFanSpeed = 1; // Pengaturan awal kecepatan kipas
bool ledState = false; // LED State
// Fungsi untuk mencetak timestamp ke Serial Monitor
void printTimestamp() {
unsigned long currentMillis = millis();
unsigned long seconds = currentMillis / 1000;
unsigned int minutes = seconds / 60;
seconds = seconds % 60;
Serial.print("( ");
Serial.print("Timestamp: ");
Serial.print(String(minutes, DEC));
Serial.print(":");
if (seconds < 10) {
Serial.print("0");
}
Serial.print(String(seconds, DEC));
Serial.print(" )");
Serial.print(" "); // Tambahkan spasi setelah timestamp
}
// Task untuk menjalankan Blynk di latar belakang
void TaskSerial(void *pvParameters) {
while (1) {
Blynk.run();
vTaskDelay(10);
}
}
// Handle AC power ON/OFF
BLYNK_WRITE(AC_POWER_PIN) {
currentState = param.asInt();
if(currentState == 1)
ledState = true;
else
ledState = false;
printTimestamp();
Serial.println(currentState == 1 ? "AC is ON" : "AC is OFF");
// Set LED state
digitalWrite(LED_BUILTIN, ledState);
// Send power status to Blynk
Blynk.virtualWrite(DISP_POWER_PIN, currentState);
}
// Callback saat suhu AC diubah pada aplikasi Blynk
BLYNK_WRITE(AC_TEMPERATURE_PIN) {
// Mengatur penyesuaian suhu AC
targetTemperature = param.asInt();
printTimestamp();
Serial.println("Temperature set to: " + String(targetTemperature) + "°C");
// Kirim data suhu ke Blynk
Blynk.virtualWrite(DISP_TEMP_SPEED_PIN, String(String(targetTemperature) +
"°C || " + String(targetFanSpeed)));
}
// Callback saat kecepatan kipas AC diubah pada aplikasi Blynk
BLYNK_WRITE(AC_FAN_SPEED_PIN) {
// Mengatur penyesuaian kecepatan kipas AC
targetFanSpeed = param.asInt();
printTimestamp();
Serial.println("Fan speed set to: " + String(targetFanSpeed));
// Kirim data kecepatan kipas ke Blynk
Blynk.virtualWrite(DISP_TEMP_SPEED_PIN, String(String(targetTemperature) +
"°C || " + String(targetFanSpeed)));
}
void checkConnection() {
if (!Blynk.connected()) {
Serial.println("Connection lost, attempting to reconnect...");
Blynk.connect();
}
}
// Fungsi utama untuk konfigurasi awal
void setup() {
Serial.begin(9600);
Serial.println("AC Remote Control");
// Konfigurasi pin LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Memulai koneksi Blynk dengan SSID dan password WiFi
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Kirim status Power ke Blynk
Blynk.virtualWrite(DISP_POWER_PIN, currentState);
// Kirim temperature and fan speed ke Blynk
Blynk.virtualWrite(DISP_TEMP_SPEED_PIN, String(String(targetTemperature) +
"°C || " + String(targetFanSpeed)));
// Membuat dan menjalankan task Blynk di latar belakang
xTaskCreate(TaskSerial, "SerialTask", 4096, NULL, 1, NULL);
}
// Fungsi loop kosong karena loop dijalankan oleh task Blynk
void loop() {
// Tetap kosong karena Blynk.run() dijalankan di dalam task Blynk
}