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.
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.