Kembali ke Katalog Modul
MODUL 36 DEEP DIVE

Over-The-Air (OTA) Firmware Update via WiFi

MODUL 36 (SPESIALIS IOT): OVER-THE-AIR (OTA) FIRMWARE UPDATE


๐Ÿ“Œ META MODUL & PRASYARAT

  • Bidang Spesialisasi: Remote Firmware Management & Over-The-Air Updates.
  • Target Pembaca: Pembelajar yang sudah menguasai Firmware Security (Modul 35).
  • Learning Outcome:
  • Memahami arsitektur pembaruan OTA (Over-The-Air) secara nirkabel via WiFi.
  • Memahami pembagian Partition Table ESP32 (ota_0, ota_1, otadata).
  • Mampu mengimplementasikan ArduinoOTA.h dan HTTP Web Server OTA Rollout.
  • Memahami prosedur Rollback Otomatis jika biner firmware baru mengalami crash.
  • Estimasi Waktu Belajar: 120 Menit.
  • Tingkat Kesulitan: ๐ŸŸก Menengah - Lanjut (Level 36 / 40).
  • Prasyarat: Modul 35 (Firmware Security & Secure Boot pada ESP32).

๐Ÿง  ARSITEKTUR TABEL PARTISI OTA ESP32

=======================================================================
SKEMA PARTISI FLASH DUAL-BANK OTA ESP32
=======================================================================

[ FLASH MEMORY 4MB ]
โ”œโ”€โ”€ Bootloader (0x1000)
โ”œโ”€โ”€ Partition Table (0x8000)
โ”œโ”€โ”€ NVS & otadata (0x9000)
โ”œโ”€โ”€ [ PARTISI OTA_0 ] โ”€โ”€โ–บ (Firmware Lama Aktif v1.0)
โ””โ”€โ”€ [ PARTISI OTA_1 ] โ”€โ”€โ–บ (Tempat Mengunduh Firmware Baru v2.0 dari Server)

ALUR PEMBARUAN:
  • ESP32 mengunduh biner v2.0 dan menuliskannya ke Partisi OTA_1.
  • Verifikasi Hash Biner Sukses.
  • Update pointer otadata -> Alihkan Bootloader ke OTA_1.
  • Reboot. Jika v2.0 gagal booting (crash), otomatis Rollback ke OTA_0!

โšก CHEAT SHEET KODE ARDUINOOTA ESP32

#include <WiFi.h>
#include <ArduinoOTA.h>

void setup() {
Serial.begin(115200);
WiFi.begin("SSID", "PASS");
while (WiFi.status() != WL_CONNECTED) { delay(500); }

// Konfigurasi Port & Hostname OTA
ArduinoOTA.setHostname("esp32-sensor-kebun");
ArduinoOTA.setPassword("DeeptechOTAPassword123");

ArduinoOTA.onStart([]() { Serial.println("Mulai Proses OTA Update..."); });
ArduinoOTA.onEnd([]() { Serial.println("\nOTA Selesai! Rebooting..."); });
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress OTA: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: Gagal OTA\n", error);
});

ArduinoOTA.begin();
Serial.println("OTA Server Siap!");
}

void loop() {
ArduinoOTA.handle(); // Wajib dipanggil di loop untuk mendengarkan firmware baru
}



Latihan & Quiz Evaluasi Modul

Progres Quiz: 0 / 2 Soal
SOAL #1
Apakah nama fitur pembaruan firmware nirkabel yang memungkinkan kita memperbarui kode C++ pada ribuan sensor ESP32 terpasang di atas atap tanpa harus colok kabel USB?
SOAL #2
Mengapa ESP32 menggunakan skema **Dual-Bank Partition (`ota_0` & `ota_1`)** saat menerima pembaruan OTA?

Kunci Jawaban & Pembahasan

Kunci Jawaban: 1. b. Over-The-Air (OTA) Update, 2. b. Mencegah perangkat bricked jika mati lampu.


Apakah Anda siap lanjut ke Modul 37: Remote Device Management & Heartbeat Health Monitoring?