UTS IOT FINAL — ESP32-S3 simulation

An interactive ESP32-S3 circuit simulation you can run free in your browser on Velxio, by itsmebenn.

Components

Sketch code

#include <WiFi.h>
#include <WiFiClient.h>

WiFiClient wifiClient;

#include <Keypad.h>
#include <SPI.h>
#include <WiFi.h>
#include <XPT2046_Touchscreen.h>
#include <sys/time.h>
#include <time.h>

#include <PubSubClient.h> // Pastikan library ini sudah ter-install di Velxio
#include "MqttHub.h"

#include "DeviceHub.h"  // IMPOR KONTROL LED & KIPAS
#include "SensorHub.h"
#include "TftEngine.h"

// #define TFT_BL   46
#define BUZZER_PIN 46

#define TOUCH_CS 41
// #define TOUCH_IRQ 40
XPT2046_Touchscreen ts(TOUCH_CS);
// XPT2046_Touchscreen ts(TOUCH_CS, TOUCH_IRQ);

const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},
                         {'4', '5', '6', 'B'},
                         {'7', '8', '9', 'C'},
                         {'*', '0', '#', 'D'}};
byte rowPins[ROWS] = {36, 35, 21, 20};
byte colPins[COLS] = {19, 48, 47, 18};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

enum ScreenState {
  DASHBOARD,
  AIR_DETAIL,
  ROOM_LIST,
  ROOM_LIVING_ROOM,
  ROOM_FRONT_YARD,
  LED_CONTROL,
  SETTING_MENU,
  SECURITY_MENU,
  SOUND_MENU,
  SCREEN_MENU,
  VERIFY_PIN,
  PIN_INPUT_MAIN,
  PIN_INPUT_GUEST,
  CONFIRM_PIN,
  LOG_MENU,
  INFO_MENU,
  DATETIME_MENU,
  NETWORK_MENU,
  WIFI_LIST_MENU,
  THRESHOLD_MENU,
  ALARM_SCREEN,
  INTRUDER_SCREEN,
  BELL_SCREEN,
  WAITING_KAMAR_1, ROOM_KAMAR_1, 
  WAITING_KAMAR_2, ROOM_KAMAR_2, 
  // --- TAMBAHAN BARU ---
  WAITING_GARASI, ROOM_GARASI, 
  WAITING_DAPUR, ROOM_DAPUR, // <--- TAMBAHAN BARU
  REMOTE_LED_CONTROL,
  WAITING_FRONT_YARD
};

// --- VARIABEL GLOBAL DAPUR ---
float dapur_temp = 0.0; 
float dapur_gas = 0.0;

// --- VARIABEL GLOBAL KAMAR 1 & 2 ---
float k1_temp = 0.0, k1_hum = 0.0; String k1_door = "TERTUTUP";
float k2_temp = 0.0, k2_hum = 0.0; String k2_door = "TERTUTUP";

// --- VARIABEL GLOBAL GARASI ---
int garasi_dist = 0; 
String garasi_door = "TERTUTUP";

// PERBAIKAN: Perbesar array lampu menjadi 4 Ruangan (Kamar 1, Kamar 2, Garasi, Dapur)
bool remoteLampState[4][2] = {{true, true}, {true, true}, {true, true}, {true, true}};
int remoteLampBright[4][2] = {{255, 255}, {255, 255}, {255, 255}, {255, 255}};
int remoteLampHue[4][2] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};

int activeRemoteRoom = 1; // 1 = Kamar 1, 2 = Kamar 2, 3 = Garasi
int activeRemoteLamp = 0; // 0 = Lampu 1, 1 = Lampu 2 (Garasi hanya pakai index 0)

// TAMBAHAN: Variabel teks dinamis untuk layar alarm
String alarmReason = "Kualitas Udara Sangat Buruk";

// --- TAMBAHAN: Variabel Timer Timeout MQTT ---
unsigned long waitingMqttTimer = 0;

ScreenState currentState = DASHBOARD;
ScreenState nextPinState;
unsigned long bellScreenTimer = 0; // Timer untuk menghitung 5 detik layar bel

// 2. Tambahkan variabel ini di bawah deklarasi ScreenState:
int overridePressCount = 0;
bool isAirQualityOverridden = false;
unsigned long lastAlarmBeep = 0;
bool alarmBeepState = false;
bool isRemoteEmergency = false; // Mencegah evaluateSafety menutup alarm dari luar

String doorMagnetState = "T

More projects by itsmebenn