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

  1. OOP adalah alat, bukan tujuan.
  2. Determinism lebih penting dari elegance.
  3. Memory discipline lebih penting dari abstraction.
  4. Simplicity > overengineering.
  5. 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.

NoArtikelDomain Keputusan
01Problem Firmware SpaghettiProblem Mapping
02OOP Dependency ControlGlobal & Ownership Freeze
03Object Lifecycle & Memory DisciplineAllocation Policy Freeze
04Layered Firmware ArchitectureDependency Direction Freeze
05OOP + FreeRTOS DeterminismConcurrency Boundary
06Communication ArchitectureCommManager & State Machine Freeze
07Production Reliability DesignError Model & Fail-Safe Freeze
08OOP Anti-Pattern & AuditGuardrail & 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.