Kembali ke Katalog Modul
MODUL 03 DEEP DIVE

Embedded Systems & FreeRTOS Dual-Core

MODUL 03 (SPESIALIS IOT): EMBEDDED SYSTEMS & FREERTOS


๐Ÿ“Œ META MODUL & PRASYARAT

  • Bidang Spesialisasi: Real-Time Embedded Systems & Concurrency.
  • Target Pembaca: Pembelajar yang sudah memahami Arsitektur ESP32 (Modul 02).
  • Learning Outcome:
  • Memahami perbedaan Super Loop (delay biasa) dan Multitasking Real-Time (RTOS).
  • Mampu membuat Multitasking Task menggunakan FreeRTOS di ESP32 (Core 0 vs Core 1).
  • Memahami penggunaan Hardware Interrupt (ISR) untuk merespons sensor cepat secara instan.
  • Menguasai manajemen waktu tanpa memblokir CPU (Non-blocking delay menggunakan millis()).
  • Estimasi Waktu Belajar: 120 Menit.
  • Tingkat Kesulitan: ๐ŸŸก Menengah (Level 3 / 40).
  • Prasyarat: Modul 02 (Microcontroller & ESP32 Architecture).

๐Ÿ“š GLOSARIUM & DAFTAR ISTILAH BARU

IstilahDefinisi SederhanaAnalogi
Super Loop (loop())Alur program tradisional yang mengeksekusi instruksi satu per satu dari atas ke bawah secara berurutan.Kasir toko tunggal yang harus melayani 1 pelanggan sampai selesai sebelum melayani antrean berikutnya.
FreeRTOSSistem Operasi Real-Time ringan untuk microcontroller yang memungkinkan beberapa tugas berjalan paralel.Restoran cepat saji dengan banyak koki dan kasir bekerja bersamaan.
Hardware Interrupt (ISR)Sinyal darurat dari komponen luar yang langsung menghentikan program utama untuk mengeksekusi fungsi penting detik itu juga.Bel pintu rumah yang berbunyi saat Anda sedang menonton TV.
Multitasking / MultithreadingKemampuan menjalankan dua atau lebih tugas sekaligus dalam waktu bersamaan.Berjalan sambil mendengarkan musik di earphone.
Semaphore / MutexKunci pengaman untuk mencegah dua tugas (task) mengubah variabel yang sama secara bersamaan.Kunci toilet umum (hanya 1 orang boleh pakai dalam satu waktu).

3. Embedded Systems & FreeRTOS

๐ŸŽฏ Tujuan Pembelajaran

Setelah menyelesaikan modul ini, Anda akan dapat:
  • Menghilangkan fungsi delay() yang memblokir program.
  • Membagi tugas ESP32: Core 0 mengurus WiFi/MQTT, Core 1 mengurus Sensor/Layar.
  • Menangani tombol darurat menggunakan Hardware Interrupt.
  • Mencegah program membeku (freezing) akibat infinite loop.

๐Ÿ’ก Kenapa Materi Ini Penting?

Di dunia nyata, sistem IoT harus sangat responsif. Bayangkan jika robot pemadam kebakaran sedang melakukan delay(5000) untuk membaca sensor suhu, lalu ada halangan dinding di depannya. Robot akan menabrak dinding karena CPU sedang "pingsan" menjalankan delay()!

Dengan mempelajari FreeRTOS dan Interrupts, perangkat ESP32 Anda dapat membaca sensor setiap milidetik, mengirim data ke cloud, serta mendeteksi tombol tekan secara bersamaan tanpa saling menunggu!

๐Ÿง  Penjelasan Konsep Utama (Secara Bertahap)

1. Masalah Besar delay() (Blocking Code) vs millis() (Non-Blocking)

=======================================================================
PERBANDINGAN EXECUTION FLOW CODE
=======================================================================

A. PROGRAM DENGAN DELAY (BLOCKING):
[Baca Sensor] โ”€โ”€โ–บ [DELAY 5 DETIK (CPU MATI TOTAL)] โ”€โ”€โ–บ [Nyalakan Lampu]
โ–ฒ
โ”‚ (Jika tombol darurat ditekan di sini,
komputer TIDAK AKAN MERESPONS!)

B. PROGRAM DENGAN MILLIS / FREERTOS (NON-BLOCKING):
[Tugas 1: Sensor] โ”€โ”€โ”€โ–บ Berjalan di Background setiap 10ms โ”€โ”€โ”
[Tugas 2: WiFi ] โ”€โ”€โ”€โ–บ Berjalan paralel di Core 0 โ”€โ”€โ”ผโ”€โ–บ [CPU Tetap Responsif!]
[Tugas 3: Tombol] โ”€โ”€โ”€โ–บ Dipicu seketika lewat Interrupt โ”€โ”€โ”˜

2. Dual-Core Task Allocation di ESP32

ESP32 memiliki 2 Core CPU (Core 0 dan Core 1). Secara bawaan:
  • Core 0: Digunakan oleh sistem operasi ESP-IDF untuk mengurus stack Wi-Fi dan Bluetooth.
  • Core 1: Tempat kode utama Arduino setup() dan loop() dijalankan.

Dengan FreeRTOS, kita bisa membuat Task baru dan menaruhnya secara khusus di Core 0 agar tidak mengganggu kinerja Core 1!

๐ŸŽจ DIAGRAM ALUR TASK FREERTOS & HARDWARE INTERRUPT

                                ESP32 DUAL-CORE
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ–ผ โ–ผ
CORE 0 (WiFi / System) CORE 1 (User App)
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Task 1: Stream MQTT โ”‚ โ”‚ Task 2: Baca DHT22 โ”‚
โ”‚ (Priority High) โ”‚ โ”‚ (Priority Medium) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ–ผ
HARDWARE INTERRUPT (ISR)
(Pin GPIO 14 dipicu Tombol Darurat)
โ”‚
[ Hentikan Sementara CPU ]
โ”‚
[ Jalankan Fungsi Emergency ]
โ”‚
[ Kembalikan ke Task Utama ]

๐Ÿ“‹ TABEL MODUS TRIGGER INTERRUPT (GPIO)

Modus TriggerKapan Fungsi ISR Dijalankan?Contoh Penggunaan
RISINGSaat sinyal berubah dari LOW (0V) $\rightarrow$ HIGH (3.3V).Saat tombol mulai ditekan.
FALLINGSaat sinyal berubah dari HIGH (3.3V) $\rightarrow$ LOW (0V).Saat tombol dilepaskan.
CHANGESetiap kali ada perubahan status (LOW $\rightarrow$ HIGH atau sebaliknya).Sensor enkoder putaran roda motor.
LOWSelama pin bernilai LOW secara terus menerus.Sensor alarm kontinyu.

โšก CHEAT SHEET FREERTOS ESP32

// 1. Membuat Task FreeRTOS baru di Core 0:
xTaskCreatePinnedToCore(
TaskFunction, // Nama fungsi
"TaskWiFi", // Nama deskriptif task
10000, // Ukuran Stack (Bytes)
NULL, // Parameter
1, // Prioritas (1 = Rendah, 5 = Tinggi)
NULL, // Task Handle
0 // Core ID (0 atau 1)
);

// 2. Delay ramah FreeRTOS (tidak memblokir CPU):
vTaskDelay(1000 / portTICK_PERIOD_MS);

// 3. Menghubungkan Interrupt ke Pin GPIO:
attachInterrupt(digitalPinToInterrupt(GPIO_PIN), EmergencyISR, RISING);



Latihan & Quiz Evaluasi Modul

Progres Quiz: 0 / 2 Soal
SOAL #1
Core ESP32 manakah yang secara bawaan memproses koneksi jaringan Wi-Fi dan Bluetooth?
SOAL #2
Fungsi apakah yang digunakan untuk mendaftarkan Hardware Interrupt pada pin GPIO ESP32?

Kunci Jawaban & Pembahasan

Kunci Jawaban: 1. a. Core 0, 2. b. attachInterrupt().


Apakah Anda siap lanjut ke Modul 04: Pemrograman C++ & Struktur Kode IoT?