FIRMWARE DESIGN

State Machine untuk ESP32 agar Sensor, UI, dan Wi-Fi Tidak Saling Mengunci

Pendekatan non-blocking untuk mengatur pembacaan sensor, layar, koneksi, alarm, timer, dan kontrol tanpa delay panjang.

Diterbitkan 30 Jul 2026Diperbarui 30 Jul 2026admin

Masalah delay

delay() panjang membuat program berhenti memproses tombol, layar, sensor, dan koneksi. Gejalanya dapat berupa UI terasa macet, watchdog reset, data terlambat, atau kontrol heater melewati target.

Penjadwalan berbasis waktu

Gunakan millis() untuk menentukan kapan tugas perlu dijalankan. Setiap tugas mempunyai interval dan waktu terakhir. Loop tetap berputar cepat, tetapi fungsi hanya bekerja ketika waktunya tiba.

State machine

Proses alat dibagi ke keadaan seperti INIT, IDLE, PREHEAT, RUNNING, COMPLETE, ERROR, dan LOW_BATTERY. Setiap state mempunyai aturan masuk, aksi, dan kondisi keluar. Tombol tidak langsung mengubah semua variabel, tetapi mengirim event yang diproses sesuai state.

Operasi jaringan

Koneksi Wi-Fi dan request HTTP harus memiliki timeout. Reconnect dilakukan berkala, bukan terus-menerus pada setiap loop. Pengiriman telemetri tidak boleh menghalangi fungsi keselamatan. Bila komunikasi gagal, alat lokal tetap menjalankan fungsi inti.

FreeRTOS

Task terpisah berguna untuk beban yang benar-benar independen, tetapi bukan obat untuk desain blocking. Shared data tetap membutuhkan sinkronisasi, dan penggunaan task berlebihan dapat menambah kompleksitas. State machine sederhana sering cukup untuk banyak alat.

Referensi dan bacaan lanjutan

  1. FreeRTOS Documentation
  2. Arduino-ESP32 API