Penjelasan Program Absensi RFID dan ESP32 (Uji Kompetensi Edition) - 10. config.h
Ini adalah file yang paling strategis dan menjadi pusat dari seluruh konfigurasi proyek.
1. Pengaman Kompilasi (Header Guards)
#ifndef __CONFIGFILE__
#define __CONFIGFILE__
// ... semua kode di sini ...
#endif
- Fungsi: Mencegah kesalahan kompilasi karena pengulangan
include. - Penjelasan: Ini adalah teknik standar dalam C++.
#ifndef(jika tidak terdefinisi) memeriksa apakah__CONFIGFILE__sudah pernah didefinisikan. Jika belum, ia akan mendefinisikannya (#define) dan memproses semua kode di dalamnya. Jika file ini di-include lagi di tempat lain, kondisinya akan salah, dan seluruh isi file akan diabaikan. Ini memastikan semua kode hanya dikompilasi sekali.
2. Penanda (Flag) Global
//flag for saving data
bool shouldSaveConfig = true;
- Fungsi: Sebuah saklar global yang memberi tahu program apakah perlu menyimpan konfigurasi.
- Penjelasan: Variabel ini adalah jantung dari mekanisme penyimpanan. Ia diatur ke
trueolehsaveConfigCallback()saat pengguna menekan tombol "Save". FungsiSaveConfigFile()akan memeriksa variabel ini sebelum menulis ke file.
3. Pengaturan Default
char wifi_ssid[34] = "LSKKHomeAuto";
char wifi_password[34] = "1234567890";
char mqtt_server[40] = "cloudabsensi.pptik.id";
int mqtt_port = 1883;
char smqtt_port[5] = "1883";
char mqtt_user[40] = "/absensi:absensi";
char mqtt_password[40] = "PPTIK@|PASSWORD";
char mqtt_keywords1[40] = "absensi/service";
char mqtt_keywords2[40] = "absensi/control";
- Fungsi: Menyimpan nilai-nilai bawaan untuk semua pengaturan penting.
- Penjelasan:
- Ini adalah nilai yang akan digunakan jika perangkat dinyalakan untuk pertama kali (belum ada file
config.json). wifi_ssiddanwifi_passwordadalah kredensial Wi-Fi bawaan. (Catatan: Ini tidak digunakan olehWiFiManagerdalam logika utama, tapi bisa menjadi fallback).mqtt_server,mqtt_port, dll. adalah pengaturan MQTT bawaan yang akan muncul di form konfigurasi.smqtt_portadalah versi string darimqtt_port, diperlukan karenaWiFiManagerParametermemerlukan input teks.
- Ini adalah nilai yang akan digunakan jika perangkat dinyalakan untuk pertama kali (belum ada file
4. Konstanta Waktu dan Variabel MAC
const long interval = 2000;
uint8_t MAC_array[6];
char MAC_char[18];
- Fungsi:
interval: Mendefinisikan durasi jeda waktu (cooldown) sebesar 2000 milidetik (2 detik) antara pembacaan kartu. Meletakkannya di sini memudahkan untuk mengubah durasi jeda.MAC_arraydanMAC_char: Variabel untuk menyimpan alamat MAC perangkat.MAC_arrayuntuk byte mentah,MAC_charuntuk versi string yang akan digunakan sebagai Client ID MQTT.
5. Deklarasi Objek Global
WiFiClient espClient;
PubSubClient client(espClient);
- Fungsi: Membuat objek jaringan dan MQTT yang bisa diakses dari mana saja.
- Penjelasan: Dengan mendeklarasikannya di sini, semua file (
.ino) yang meng-includeconfig.hbisa menggunakan objekespClientdanclientyang sama. Ini memastikan seluruh program menggunakan satu koneksi jaringan dan satu koneksi MQTT yang konsisten.
6. Definisi Pin dan Objek Hardware
#define RST_PIN 5 // RST-PIN für RC522 - RFID - SPI - Modul GPIO5
#define SS_PIN 4 // SDA-PIN für RC522 - RFID - SPI - Modul GPIO4
#define BUZZER D3 // pcb merah (D3) (kalau hijau, biru D8)
#define LED1 D8// pcb merah (kalau hijau,biru d4)
#define LED2 D4
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
- Fungsi: Memetakan nama ke pin GPIO dan membuat objek untuk pembaca RFID.
- Penjelasan:
#defineadalah preprocessor directive. Ini akan mengganti setiap kemunculanBUZZERdalam kode denganD3(atau4untuk ESP32) sebelum kompilasi.- Ini membuat kode lebih mudah dibaca (
digitalWrite(BUZZER, HIGH)lebih jelas daripadadigitalWrite(4, HIGH)). - Ini membuat kode mudah dipelihara. Jika Anda menghubungkan buzzer ke pin lain, Anda hanya perlu mengubah satu baris ini.
- Penting:
D3,D8adalah konvensi penamaan ESP8266. Untuk ESP32, Anda harus menggantinya dengan nomor GPIO (misalnya#define BUZZER 4). MFRC522 mfrc522(...): Membuat objek pembaca RFID dan langsung memberitahu pin mana yang akan digunakan untukSSdanRST.
7. Prototipe Fungsi
void SaveConfigCallback ();
void ReadConfigFile();
- Fungsi: Memberitahu compiler bahwa ada fungsi dengan nama dan tipe ini.
- Penjelasan: Fungsi-fungsi ini didefinisikan lengkap di file
ConfigFile.ino. Namun, karena mereka bisa dipanggil dari file lain (misalnyaabsensi-rfid.ino), kita perlu memberikan "janji" atau "deklarasi" di sini agar compiler tidak mengeluh "fungsi tidak ditemukan" saat mengkompilasi file lain.
Kesimpulan
File config.h adalah fondasi dari proyek yang terstruktur, modular, dan mudah dikonfigurasi. Ia memisahkan logika program dari pengaturan dan definisi hardware, membuat proyek Anda jauh lebih mudah untuk dipahami, di-debug, dan dimodifikasi di masa depan.