AWS IoT

AWS IoT에서 OTA(Over-the-Air) 업데이트 적용 방법

임베디드 친구 2025. 4. 7. 09:46
728x90
반응형

AWS IoT에서 OTA(Over-the-Air) 업데이트 적용 방법

IoT 디바이스는 원격지에서 운영되는 경우가 많으며, 이를 효율적으로 관리하려면 펌웨어 업데이트가 필수적입니다. AWS IoT에서는 OTA 업데이트 기능을 제공하여 보안 패치, 기능 개선, 버그 수정 등을 원격으로 적용할 수 있습니다. 이번 포스팅에서는 AWS IoT를 활용한 OTA 업데이트 방법과 ESP32 IDF 및 AWS IoT Device SDK for Embedded C를 이용한 예제 코드를 함께 다룹니다.


1. OTA 업데이트 개요

OTA(Over-the-Air) 업데이트란, 물리적으로 접근할 수 없는 IoT 디바이스에 네트워크를 통해 펌웨어를 업데이트하는 기술을 의미합니다. AWS IoT는 이를 지원하기 위해 AWS IoT Jobs 및 Amazon S3를 활용한 업데이트 프로세스를 제공합니다.

1.1 OTA 업데이트의 장점

  • 원격 관리: IoT 디바이스를 직접 방문하지 않고 업데이트 가능
  • 보안 강화: 최신 보안 패치를 적용하여 보안 위협 감소
  • 유지보수 비용 절감: 물리적인 유지보수 비용 절감
  • 기능 개선: 새로운 기능을 지속적으로 추가 가능

1.2 AWS IoT를 활용한 OTA 업데이트 프로세스

  1. 펌웨어 빌드: 새로운 버전의 펌웨어를 빌드
  2. Amazon S3 업로드: 빌드된 펌웨어 파일을 Amazon S3에 업로드
  3. AWS IoT Job 생성: IoT 디바이스가 업데이트를 수행하도록 AWS IoT Jobs를 생성
  4. 디바이스 업데이트 수행: IoT 디바이스가 업데이트를 다운로드하여 적용

2. AWS IoT 서버 설정 (Python)

AWS IoT Core에서 OTA 업데이트를 진행하려면 AWS IoT Jobs를 활용하여 업데이트 명령을 디바이스로 전달해야 합니다.

2.1 AWS IoT Job 생성

아래의 Python 코드를 통해 AWS IoT Job을 생성할 수 있습니다.

import boto3

iot_client = boto3.client('iot')

def create_ota_job(job_id, thing_name, s3_url):
    response = iot_client.create_job(
        jobId=job_id,
        targets=[f"arn:aws:iot:us-east-1:123456789012:thing/{thing_name}"],
        document={
            "operation": "update",
            "firmware": {
                "s3Url": s3_url
            }
        },
        description="ESP32 OTA Update",
    )
    print(response)

create_ota_job("esp32-ota-update", "my-esp32-device", "s3://my-bucket/new-firmware.bin")

위 코드에서는 AWS IoT Job을 생성하고 특정 디바이스(thing_name)에 펌웨어 업데이트를 명령하는 방식으로 동작합니다.


3. ESP32에서 AWS IoT OTA 업데이트 적용

ESP32에서 AWS IoT OTA 업데이트를 수행하려면 AWS IoT Device SDK for Embedded CESP-IDF를 사용하여 펌웨어를 구성해야 합니다.

3.1 ESP32 프로젝트 설정

OTA 업데이트를 지원하는 ESP32 프로젝트를 생성하려면 esp-idf 환경을 설정해야 합니다.

idf.py set-target esp32
idf.py menuconfig

3.2 AWS IoT에 연결하는 코드 (ESP32)

아래 코드에서는 AWS IoT Job을 확인하고 OTA 업데이트를 수행하는 기본적인 ESP32 예제입니다.

#include <stdio.h>
#include "aws_iot_jobs_interface.h"
#include "aws_iot_mqtt_client_interface.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

static const char *TAG = "OTA_UPDATE";

void check_for_ota_update(void *param) {
    while (1) {
        ESP_LOGI(TAG, "Checking for OTA updates...");
        // AWS IoT Job을 확인하는 로직 추가
        vTaskDelay(pdMS_TO_TICKS(30000)); // 30초마다 확인
    }
}

void app_main() {
    ESP_LOGI(TAG, "Initializing AWS IoT OTA update...");
    xTaskCreate(&check_for_ota_update, "OTA Update Check", 4096, NULL, 5, NULL);
}

이 코드에서는 check_for_ota_update 함수가 AWS IoT Jobs를 정기적으로 확인하여 업데이트가 필요하면 새로운 펌웨어를 다운로드하고 적용하는 방식으로 동작합니다.


4. OTA 업데이트 진행 절차

  1. AWS IoT Job 생성: Python 스크립트를 실행하여 OTA 업데이트 Job을 생성합니다.
  2. ESP32 OTA 적용:
    • ESP32는 AWS IoT에 연결하여 새로운 Job을 확인합니다.
    • 업데이트가 감지되면 S3에서 최신 펌웨어를 다운로드합니다.
    • 새로운 펌웨어로 자동 재부팅하여 업데이트를 완료합니다.
  3. 업데이트 성공 여부 확인:
    • AWS IoT 콘솔에서 Job 상태 확인
    • ESP32 로그를 통해 업데이트 결과 확인

5. 결론

AWS IoT를 활용하면 안전하고 효율적인 OTA 업데이트를 수행할 수 있습니다. AWS IoT Jobs와 Amazon S3를 활용하여 IoT 디바이스의 펌웨어를 원격으로 관리하는 방법을 알아보았습니다. 또한, ESP32 IDF와 AWS IoT Device SDK for Embedded C를 이용한 실제 코드 예제를 통해 실습할 수 있도록 구성하였습니다.

이제 AWS IoT를 활용하여 IoT 디바이스의 유지보수를 자동화하고, 원격지에서도 안전한 업데이트를 수행할 수 있도록 프로젝트를 확장해보시기 바랍니다.

반응형