Danu Andrean, 01 Jun 2025
OTA, Update Firmware Otomatis Lewat Wifi Dengan Mudah

Pernah kebayang gimana caranya update firmware ESP32 tanpa harus colok kabel USB lagi? 🤯 Yup, sekarang kamu bisa update firmware secara OTA (Over-the-Air) lewat jaringan WiFi. Cocok banget buat proyek IoT yang susah dijangkau atau sudah dipasang permanen di lapangan.
Di artikel ini, aku akan membagikan program sederhana yang memungkinkan perangkat ESP32 kamu mengecek versi firmware terbaru dan memperbaruinya secara otomatis jika diperlukan.
Apa itu OTA (Over-the-Air) Update?
OTA adalah proses memperbarui firmware microcontroller lewat jaringan, tanpa perlu koneksi fisik. Dalam dunia IoT, fitur ini sangat penting karena kita bisa melakukan perawatan jarak jauh, hemat waktu dan tenaga!
Alur Percobaan
perhatikan setiap langkah dengan teliti ya, kita akan menggunakan localhost sebagai percobaan.
Upload Program Lengkap Dibawah ke ESP32
upload program seperti biasa ke esp32, tunggu sampai selesai
Export Program BIN
klik di Sketch -> Export Compiled Binary

Copy BIN ke Server dan buat file version
silahkan copy file.bin hasil dari yang sudah kita export ke folder server kita. dan juga buat file dengan nama version.txt yang berisi versi dari program kita seperti dibawah ini

Kode Lengkap
#include <WiFi.h>
#include <HTTPClient.h>
#include <Update.h>
const char* ssid = "host";
const char* password = "password";
const char* ota_server = "http://ip/";
String ota_bin = String(ota_server) + "ota/ota.ino.bin";
String ota_version = String(ota_server) +"ota/version.txt";
#define FW_VERSION "0.0.1"
void setup() {
Serial.begin(115200);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
Serial.println("Checking for update...");
String latest_version = fetch_latest_version(ota_version);
if (is_new_version_available(FW_VERSION, latest_version)) {
Serial.printf("New version available: %s\n", latest_version.c_str());
perform_ota_update(); // lanjut update OTA
} else {
Serial.println("Firmware is up to date.");
}
Serial.print("version -> ");
Serial.println(FW_VERSION);
delay(5000);
}
bool is_new_version_available(const String& current_version, const String& new_version) {
return current_version != new_version; // bisa buat lebih kompleks untuk server
}
String fetch_latest_version(const String& url) {
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String version = http.getString();
version.trim();
http.end();
return version;
}
http.end();
return "";
}
void perform_ota_update() {
Serial.println("Starting OTA update...");
HTTPClient http;
http.begin(ota_bin);
// Start the update process
if (Update.begin(UPDATE_SIZE_UNKNOWN)) {
Serial.println("Downloading...");
// Start the download
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
WiFiClient& stream = http.getStream();
uint8_t buffer[1024];
int bytesRead;
// Write the stream to the Update library in chunks
while ((bytesRead = stream.readBytes(buffer, sizeof(buffer))) > 0) {
if (Update.write(buffer, bytesRead) != bytesRead) {
Serial.println("Error during OTA update. Please try again.");
Update.end(false); // false parameter indicates a failed update
return;
}
}
// End the update process
if (Update.end(true)) {
Serial.println("OTA update complete. Rebooting...");
ESP.restart();
} else {
Serial.println("Error during OTA update. Please try again.");
Update.end(false); // false parameter indicates a failed update
}
} else {
Serial.println("Failed to download firmware.");
Update.end(false); // false parameter indicates a failed update
}
} else {
Serial.println("Failed to start OTA update.");
}
// End HTTP client
http.end();
}
Konsep Program
Program ini bekerja dengan cara:
- Terhubung ke WiFi
- Mengecek versi firmware terbaru di server
- Jika ada versi lebih baru dari firmware saat ini, ESP32 akan:
- Mengunduh file .bin
- Melakukan update
- Restart otomatis
Inisialisasi Path Server dan Version
const char* ota_server = "http://ip/";
String ota_bin = String(ota_server) + "ota/ota.ino.bin";
String ota_version = String(ota_server) +"ota/version.txt";
#define FW_VERSION "0.0.1"
ESP32 akan membandingkan FW_VERSION lokal dengan isi dari version.txt di server.
Jika ada perbedaan versi, maka fungsi perform_ota_update() akan dijalankan untuk mengunduh firmware dan memperbarui ESP32 secara langsung.
Mengecek Versi Terbaru
String fetch_latest_version(const String& url) {
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String version = http.getString();
version.trim();
http.end();
return version;
}
http.end();
return "";
}
Update Firmware
if (Update.begin(UPDATE_SIZE_UNKNOWN)) {
// Streaming data dan menulis ke memori flash
}
Firmware baru diunduh menggunakan HTTP dan ditulis ke flash memory menggunakan library Update.
Jika semua sukses, ESP32 akan restart dan menjalankan firmware baru.
Penutup
Dengan OTA, kamu bisa:
- Menghemat waktu
- Menghindari bongkar pasang alat
- Menjadikan sistem IoT kamu lebih profesional dan scalable
Kalau kamu lagi ngerjain proyek ESP32, fitur ini WAJIB dicoba!. selamat mencoba! 🚀🚀🚀