- Published on
Readme - C++ for Production Firmware on ESP32
- Authors
π C++ for Production Firmware on ESP32
Architecture Discipline for 3β5 Year Firmware Stability
π― Positioning
Seri ini bukan kursus C++. Bukan buku OOP. Bukan kumpulan design pattern generik.
Seri ini adalah:
Panduan arsitektur firmware produksi berbasis C++ untuk ESP32 (Arduino core) yang dirancang agar stabil 3β5 tahun tanpa menjadi spaghetti.
Target pembaca:
- Embedded engineer aktif
- Firmware developer IoT produksi
- Tim yang firmware-nya mulai membesar
- Engineer yang sudah deploy ESP32 di lapangan
Bukan untuk:
- Pemula C++
- Belajar sintaks dasar
- Teori OOP akademis
- Template metaprogramming
π§ Filosofi Inti
- OOP adalah alat, bukan tujuan.
- Determinism lebih penting dari elegance.
- Memory discipline lebih penting dari abstraction.
- Simplicity > overengineering.
- Setiap keputusan arsitektur dikunci secara eksplisit.
π¦ Struktur Seri (Waterfall Discipline)
Semua artikel bersifat berurutan dan saling mengunci.
Keputusan yang dibekukan di artikel sebelumnya tidak boleh diubah di artikel berikutnya.
| No | Artikel | Domain Keputusan |
|---|---|---|
| 01 | Problem Firmware Spaghetti | Problem Mapping |
| 02 | OOP Dependency Control | Global & Ownership Freeze |
| 03 | Object Lifecycle & Memory Discipline | Allocation Policy Freeze |
| 04 | Layered Firmware Architecture | Dependency Direction Freeze |
| 05 | OOP + FreeRTOS Determinism | Concurrency Boundary |
| 06 | Communication Architecture | CommManager & State Machine Freeze |
| 07 | Production Reliability Design | Error Model & Fail-Safe Freeze |
| 08 | OOP Anti-Pattern & Audit | Guardrail & Production Audit |
π Architecture Model yang Dikunci
Setelah menyelesaikan seri ini, firmware Anda harus memiliki:
- No global mutable state
- No singleton
- Static-first allocation
- 3-layer model (
app_,svc_,drv_,sys_) - Dependency DAG (no circular include)
- ISR hanya notify
- ControlTask non-blocking
- CommManager sebagai gateway tunggal
- State machine eksplisit
- Fail-safe state mandatory
- Error propagation eksplisit (no exception)
Jika salah satu dilanggar, firmware kembali berisiko menjadi spaghetti.
π Struktur Project (Arduino Constraint)
Seri ini diasumsikan berjalan pada:
- ESP32
- Arduino Core
- VSCode + Arduino Community Edition
- Flat file structure (tanpa nested folder)
Contoh struktur final:
IndustrialNode/
β
βββ IndustrialNode.ino
β
βββ app_ControlApp.h
βββ app_ControlApp.cpp
β
βββ svc_SensorService.h
βββ svc_SensorService.cpp
βββ svc_ActuatorService.h
βββ svc_ActuatorService.cpp
βββ svc_CommManager.h
βββ svc_CommManager.cpp
βββ svc_HealthService.h
βββ svc_HealthService.cpp
β
βββ drv_TempSensorDriver.h
βββ drv_TempSensorDriver.cpp
βββ drv_RelayDriver.h
βββ drv_RelayDriver.cpp
β
βββ sys_Config.h
βββ sys_Status.h
βββ sys_Types.h
β
βββ ARCHITECTURE_RULES.md
Prefix file adalah boundary enforcement karena Arduino tidak mendukung nested folder kompleks.
π Apa yang Tidak Dibahas
Seri ini secara sengaja tidak membahas:
- Advanced template metaprogramming
- STL heavy usage
- Modern C++ feature lengkap
- Generic design pattern catalog
- Desktop OOP theory
Jika tidak relevan langsung ke firmware produksi ESP32 β tidak dibahas.
π§ͺ Success Criteria
Seri ini dianggap berhasil jika setelah implementasi:
- Firmware lebih terstruktur
- Dependency jelas dan terarah
- Heap usage stabil dalam jangka panjang
- Tidak ada redesign besar setelah Artikel 4
- Code review lebih cepat
- Uptime meningkat signifikan
π‘ Guardrail Final
Firmware production bukan tentang βfitur banyakβ.
Firmware production adalah tentang:
- Predictability
- Determinism
- Observability
- Boundary discipline
- Auditability
Tanpa disiplin arsitektur, firmware akan rusak bukan karena bug besar, tetapi karena kompleksitas yang tidak dikontrol.
π Final Statement
Seri ini bukan:
βBelajar OOP untuk ESP32β
Seri ini adalah:
Cara menggunakan C++ untuk membuat firmware ESP32 yang bisa hidup 3β5 tahun tanpa menjadi monster spaghetti.
Catatan Penyusunan Artikel ini disusun sebagai materi edukasi dan referensi umum berdasarkan berbagai sumber pustaka, praktik lapangan, serta bantuan alat penulisan. Pembaca disarankan untuk melakukan verifikasi lanjutan dan penyesuaian sesuai dengan kondisi serta kebutuhan masing-masing sistem.