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
| Istilah | Definisi Sederhana | Analogi |
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. |
| FreeRTOS | Sistem 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 / Multithreading | Kemampuan menjalankan dua atau lebih tugas sekaligus dalam waktu bersamaan. | Berjalan sambil mendengarkan musik di earphone. |
| Semaphore / Mutex | Kunci 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 melakukandelay(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()danloop()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 Trigger | Kapan Fungsi ISR Dijalankan? | Contoh Penggunaan |
| RISING | Saat sinyal berubah dari LOW (0V) $\rightarrow$ HIGH (3.3V). | Saat tombol mulai ditekan. |
| FALLING | Saat sinyal berubah dari HIGH (3.3V) $\rightarrow$ LOW (0V). | Saat tombol dilepaskan. |
| CHANGE | Setiap kali ada perubahan status (LOW $\rightarrow$ HIGH atau sebaliknya). | Sensor enkoder putaran roda motor. |
| LOW | Selama 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?
Apakah Anda siap lanjut ke Modul 04: Pemrograman C++ & Struktur Kode IoT?