1. Home
  2. Docs
  3. ESP-IDF / ESP32
  4. IoT ve Kablosuz Haberleşm...
  5. ESP-IDF ile OTA (Over-The-Air) Kablosuz Yazılım Güncelleme

ESP-IDF ile OTA (Over-The-Air) Kablosuz Yazılım Güncelleme

Print

Sahaya dağıtılmış yüzlerce veya binlerce IoT cihazını USB kablosuyla tek tek bilgisayara bağlayıp güncellemek imkansızdır. Bir cihaz tavana monte edilmiş, bir fabrikada panoya kilitlenmiş veya müşterinin evinde olabilir. Bu noktada ESP-IDF OTA yazılım güncelleme (Over-The-Air) mimarisi; cihazın çalışan firmware’ini internet (HTTPS) üzerinden uzaktan ve kesintisiz olarak güncellemesini sağlar.

Bu rehberde; çift bölümlü (Dual-Partition) flash hafıza düzenini, esphttpsota kütüphanesini, güvenli güncelleme akışını ve yeni yazılım çökerse eski çalışan sürüme otomatik geri dönmeyi sağlayan Rollback mekanizmasını inceleyeceğiz.


OTA Bölüm Tablosu (Partition Table) Düzeni

OTA çalışabilmesi için ESP32 flash belleğinde en az iki adet uygulama (app) bölümü bulunmalıdır:

  1. ota_0 (Aktif çalışan sürüm)
  2. ota_1 (Yeni indirilen sürümün yazılacağı hedef)
  3. otadata (Hangi bölümün aktif olduğunu tutan kontrol alanı)

Örnek partitions.csv dosyası:

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x4000,
otadata,  data, ota,     0xd000,  0x2000,
phy_init, data, phy,     0xf000,  0x1000,
ota_0,    app,  ota_0,   0x10000, 0x180000,
ota_1,    app,  ota_1,   0x190000,0x180000,

Güncelleme sırasında cihaz ota0 üzerinden çalışırken, yeni yazılım ota1 bölümüne yazılır. İndirme başarıyla bitip hash doğrulanınca otadata güncellenir ve cihaz yeniden başlatılır.


Adım Adım HTTPS OTA Güncelleme Kodu

ESP-IDF’in yüksek seviyeli esphttpsota API’si tüm indirme, flash yazma ve doğrulama süreçlerini otomatikleştirir:

#include <stdio.h>
#include "esp_log.h"
#include "esp_https_ota.h"
#include "esp_ota_ops.h"

static const char *TAG = "OTA_UPDATE";

// Web sunucunuzun SSL Root Sertifikası
extern const uint8_t server_cert_pem_start[] asm("_binary_ca_cert_pem_start");

void do_ota_update(const char *firmware_url) {
    ESP_LOGI(TAG, "OTA Güncellemesi Başlatılıyor: %s", firmware_url);

    esp_http_client_config_t http_config = {
        .url = firmware_url,
        .cert_pem = (const char *)server_cert_pem_start, // Güvenli HTTPS doğrulaması
        .timeout_ms = 15000,
        .keep_alive_enable = true,
    };

    esp_https_ota_config_t ota_config = {
        .http_config = &http_config,
    };

    esp_err_t ret = esp_https_ota(&ota_config);
    if (ret == ESP_OK) {
        ESP_LOGI(TAG, "Yazılım Başarıyla İndirildi ve Yazıldı! Sistem yeniden başlatılıyor...");
        esp_restart();
    } else {
        ESP_LOGE(TAG, "OTA Güncellemesi Başarısız Oldu! Hata: %s", esp_err_to_name(ret));
    }
}

Hayati Güvenlik: Otomatik Geri Alma (Rollback)

Eğer yeni yüklenen yazılımda kritik bir hata varsa (örneğin Wi-Fi’a bağlanamıyor veya sonsuz döngüde çöküyorsa), cihaz sahada tuğlaya (brick) dönüşebilir. Bunu engellemek için ESP-IDF Rollback kullanılır:

void app_main(void) {
    // 1. Yeni sürümün ilk açılışı mı kontrol et
    esp_ota_img_states_t ota_state;
    const esp_partition_t *running = esp_ota_get_running_partition();

    if (esp_ota_get_state_partition(running, &ota_state) == ESP_OK) {
        if (ota_state == ESP_OTA_IMG_PENDING_VERIFY) {
            ESP_LOGW(TAG, "Yeni yazılım ilk kez çalışıyor. Doğrulama yapılıyor...");

            // Kendi sağlık testlerinizi yapın (Wi-Fi bağlantısı, sensör testi vb.)
            bool health_check = true; 

            if (health_check) {
                ESP_LOGI(TAG, "Sağlık testi başarılı! Yazılım ONAYLANDI.");
                esp_ota_mark_app_valid_cancel_rollback();
            } else {
                ESP_LOGE(TAG, "Sağlık testi başarısız! Eski sürüme GERİ DÖNÜLÜYOR...");
                esp_ota_mark_app_invalid_rollback_and_reboot();
            }
        }
    }

    // Normal uygulama akışı...
}

Eğer yeni yazılım espotamarkappvalidcancelrollback() çağıramadan çöker ve reset atarsa, bootloader bir sonraki açılışta otomatik olarak eski çalışan sürüme geri döner!


Özet

OTA kablosuz güncelleme, ticari IoT cihazlarının en önemli özelliğidir. HTTPS şifrelemesi ve otomatik Rollback güvenlik ağıyla cihazlarınızı sahada fiziksel müdahale gerektirmeden ömür boyu güncel tutabilirsiniz.

Tags , , , , ,

How can we help?