Penjelasan Program Absensi RFID dan ESP32 (Uji Kompetensi Edition) - 5. callback dan printMACAddress
1. Fungsi void callback(char* topic, byte* payload, unsigned int length)
Fungsi ini adalah penerima perintah jarak jauh dari sistem. Ia tidak dipanggil secara langsung oleh Anda di loop(), melainkan akan dijalankan otomatis oleh library PubSubClient setiap kali ada pesan MQTT yang masuk.
Bayangkan ini seperti layanan pesan singkat (SMS) di ponsel Anda. Ponsel Anda tidak terus-menerus mengecek SMS, tetapi ketika ada pesan masuk, ponsel akan "berbunyi" dan menampilkan pesan tersebut. Fungsi callback adalah "pemberitahuan" dan "penampil pesan" itu.
Pembahasan Kode
void callback(char* topic, byte* payload, unsigned int length) {
char* topic: Ini adalah "alamat" atau "topik" tempat pesan dikirim. Misalnya,absensi/control.byte* payload: Ini adalah isi pesan itu sendiri, dalam bentuk array byte mentah.unsigned int length: Ini adalah panjang dari pesan (berapa byte) di dalampayload.
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
- Fungsi: Bagian ini murni untuk debugging. Ia mencetak ke Serial Monitor:
- Topik pesan yang diterima.
- Isi pesan tersebut, byte per byte, yang diubah menjadi karakter.
- Contoh Output di Serial Monitor:
Message arrived [absensi/control] 10
String sTopic = topic;
if (sTopic == mqtt_keywords2)
{
Serial.println("Sense Control Command");
- Fungsi: Ini adalah pengecekan keamanan. Program memastikan bahwa pesan yang diterima benar-benar berasal dari topik yang diharapkan (
mqtt_keywords2atauabsensi/control). Ini mencegah program bereaksi terhadap pesan dari topik lain yang tidak relevan.
if ((char)payload[1] == '1')
{
ResetSettings();
}
if ((char)payload[0] == '1')
{
delay(2000);
ESP.restart();
delay(5000);
}
- Fungsi: Ini adalah inti dari logika kontrol. Ini adalah cara yang cerdas untuk mengemas beberapa perintah dalam satu pesan singkat.
- Penjelasan Logika:
(char)payload[0] == '1': Program memeriksa karakter pertama dari pesan. Jika adalah'1', maka jalankan perintah restart.(char)payload[1] == '1': Program memeriksa karakter kedua dari pesan. Jika adalah'1', maka jalankan perintah reset settings.
- Contoh Penggunaan:
- Untuk restart saja, kirim pesan:
1 - Untuk reset settings saja, kirim pesan:
01(karakter pertama kosong/apa saja, yang kedua '1') - Untuk restart DAN reset settings, kirim pesan:
11
- Untuk restart saja, kirim pesan:
Kesimpulan callback: Ini adalah "telinga" perangkat Anda di dunia MQTT, yang memungkinkannya untuk menerima dan menjalankan perintah dari jarak jauh, seperti restart atau reset konfigurasi.
2. Fungsi printMACAddress()
Fungsi ini jauh lebih sederhana. Tugasnya hanya satu: menampilkan alamat MAC perangkat ke Serial Monitor.
void printMACAddress() {
Serial.println();
Serial.print("MAC Address = ");
Serial.println(WiFi.macAddress());
}
Pembahasan Kode
WiFi.macAddress(): Ini adalah fungsi dari libraryWiFi.hyang mengambil alamat MAC hardware dari chip Wi-Fi ESP32 dan mengembalikannya dalam format string yang sudah siap dibaca (misal:A4:CF:12:5B:9C:7F).Serial.println(...): Mencetak hasilnya ke Serial Monitor.
Fungsinya dalam Proyek Ini?
- Identifikasi & Debugging: Sangat berguna saat Anda memiliki beberapa perangkat ESP32 yang identik. Dengan mencetak MAC address, Anda bisa tahu pasti perangkat mana yang sedang Anda lihat di Serial Monitor.
- Verifikasi: Fungsi ini dipanggil di
setup_wifi()setelah koneksi berhasil. Ini memberikan konfirmasi visual kepada Anda tentang identitas unik perangkat yang sedang terhubung.
Perbedaan Penting dengan Kode di setup_wifi()
Di setup_wifi(), ada juga kode yang memproses MAC address:
// Di setup_wifi()
WiFi.macAddress(MAC_array);
// ... loop sprintf untuk memformatnya ke MAC_char
setup_wifi(): Tujuannya adalah menyimpan alamat MAC ke dalam variabelMAC_charuntuk digunakan sebagai Client ID MQTT.printMACAddress(): Tujuannya adalah menampilkan alamat MAC ke Serial Monitor hanya untuk keperluan informasi dan debugging.
Kesimpulan printMACAddress: Ini adalah fungsi utilitas kecil yang membantu Anda mengidentifikasi perangkat secara fisik selama proses pengembangan dan debugging.