Penjelasan Program Absensi RFID dan ESP32 (Uji Kompetensi Edition) - 6. reconnect

Tujuan Utama: Fungsi ini adalah mekanisme pemulihan otomatis (self-healing). Tugasnya adalah terus mencoba untuk menghubungkan kembali ke server MQTT jika koneksi terputus, tanpa harus me-restart seluruh perangkat.

Bayangkan ini seperti "dokter on-call" untuk koneksi MQTT Anda. Ia akan terus memeriksa dan mencoba menyembuhkan koneksi sampai kembali sehat.


Pembahasan Kode

Fungsi ini memiliki struktur while loop yang sangat penting.

void reconnect() {
  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...");
    digitalWrite(LED1, LOW);
    digitalWrite(BUZZER, HIGH);
    delay(500);
    digitalWrite(BUZZER, LOW);
    delay(1500);
    Serial.println(mqtt_server);

    if (client.connect(MAC_char, mqtt_user, mqtt_password)) {

Blok if (...) { ... } (Jika Koneksi Berhasil)

Jika client.connect() mengembalikan true, maka kode di dalamnya dijalankan.

      Serial.println("connected");
      digitalWrite(LED1, HIGH);
      client.subscribe(mqtt_keywords2);

Setelah blok ini selesai, karena while loop akan mengecek lagi kondisinya (!client.connected()), dan kali ini kondisinya adalah false (karena sudah terhubung), maka loop akan berhenti, dan fungsi reconnect() selesai.


Blok else { ... } (Jika Koneksi Gagal)

Jika client.connect() mengembalikan false, maka kode di dalam else dijalankan.

    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      if (client.state() == 4) ESP.restart();
      else {
        Serial.println(" try again in 5 seconds");
        delay(5000);
      }
    }