ESP32 마이크로 컨트롤러와 ESP-IDF를 사용하여 무선(OTA) 업데이트를 수행하는 방법

작성자: Jacob Beningo

DigiKey 북미 편집자 제공

사물 인터넷(IoT) 제품 설계자는 연결 응용 제품의 성능을 향상시키고 설계를 가속화하면서 비용과 전력을 줄이기 위한 목적으로 플랫폼 및 부품 선택을 지속적으로 평가해야 합니다. 현재 선택할 수 있는 많은 솔루션이 있지만 설계자는 무선(OTA) 업데이트(배포된 경우)를 수행하여 장치 펌웨어를 최신 상태로 유지해야 합니다.

핵심은 사용 가능한 플랫폼을 조사하여 OTA 업데이트를 지원하기 위해 해당 솔루션에서 제공하는 추가 도구 및 지원을 확인하는 것입니다. 그런 지원은 프로세스를 매우 단순화할 수 있지만 약간의 주의가 필요합니다.

이 기사에서는 OTA 기본 사항에 대해 설명하고 개발자가 안고 있는 문제점에도 불구하고 거의 모든 IoT 시스템에서 OTA를 중요 기능으로 지원해야 하는 이유를 살펴봅니다. 그런 다음 Espressif SystemsESP32 Bluetooth 및 Wi-Fi 지원 마이크로 컨트롤러와 관련 모듈, 키트 및 ESP IoT Development Framework(ESP-IDF)를 함께 사용하여 OTA 파티션을 만들고 otatool.py 스크립트를 활용하여 애플리케이션이 실행 중인 상태에서 펌웨어 업데이트를 수행하는 방법을 알아봅니다.

OTA 업데이트 소개

대부분의 개발 팀은 제품별 기능, 즉 제품을 차별화하는 비즈니스 논리를 구현하는 데 주력합니다. 하지만 모든 IoT 제품에는 장치의 수명 주기 동안 배포, 구성, 유지 관리되어야 하는 기본 기능이 있습니다. 보안 업데이트가 좋은 예입니다. 이러한 업데이트를 수행해야 할 경우 적합한 개발 플랫폼을 평가할 때 중요하지만 간과하기 쉬운 기능으로 부트로더 또는 펌웨어 OTA(FOTA) 업데이트(OTA라고도 함) 기능이 있습니다.

OTA를 사용하면 엔지니어가 유지 관리 담당자를 장치가 있는 현장으로 보내거나 최종 클라이언트에게 장치를 능동적으로 업데이트하도록 지시할 필요 없이 기술 및 비즈니스 요구 사항에 따라 원격으로 제품을 유지 관리하고 업그레이드할 수 있습니다. 대신에, 장치 펌웨어를 '다운타임' 시간(예: 야간) 동안이나 백그라운드에서 자동으로 수행하여 모든 비용을 제거할 수 있습니다.

OTA 아키텍처는 맞춤형 솔루션부터 클라우드 공급자 제공 표준 구현까지 다양한 형태와 구성으로 제공될 수 있습니다. 그림 1에는 일반적인 아키텍처의 예가 나와 있습니다.

응용 제품 펌웨어를 업데이트하는 예시 프로세스를 보여주는 OTA 아키텍처 개요 구성도그림 1: 배포된 장치에 대한 응용 제품 펌웨어를 현장에서 업데이트하는 예시 프로세스를 보여주는 OTA 아키텍처 개요 (이미지 출처: Beningo Embedded Group)

이 예에서 OEM은 Amazon Web Services(AWS) IoT Core를 사용하여 새 펌웨어 버전을 업로드한 후 내장된 작업 기능을 사용하여 현장의 장치에 업데이트를 배포하고 있습니다. 이는 많은 예시 중 하나에 불과하지만 거의 모든 클라우드 공급자가 비슷한 솔루션을 가지고 있습니다.

현재 OTA를 지원하는 많은 마이크로 컨트롤러가 출시되어 있습니다. 저가용 시스템과 제조업체 모두에 널리 사용되는 마이크로 컨트롤러로 ESP32가 있습니다. ESP32가 널리 사용되는 데에는 다음과 같은 다양한 이유가 있습니다.

  • Wi-Fi/Bluetooth 인증 모듈과 통합된 마이크로 컨트롤러를 사용 가능
  • 낮은 가격
  • 오픈 소스 개발 환경 및 소프트웨어 프레임워크(예: ESP-IDF 및 ESP Audio Development Framework(ESP-ADF))
  • 웹에서 무료로 사용 가능한 많은 기존 애플리케이션 예

OTA 테스트를 위한 ESP32 모듈 선택

OTA 예시를 살펴보기 위해 사용자가 구매할 수 있는 다양한 ESP32 모듈 및 개발 기판이 있습니다. Adafruit 3405 ESP32 Huzzah Feather 기판을 예로 들어 보겠습니다(그림 2). 이 기판은 ESP32를 프로그래밍한 후 USB 커넥터를 통해 구동하기 위한 모든 회로망을 포함하는 저가용 개발 기판입니다.

Adafruit의 3405 Huzzah Feather 기판 이미지그림 2: 3405 Huzzah Feather 기판에는 4MB 플래시가 탑재된 ESP32 WROOM-32D 인증 Wi-Fi/Bluetooth 모듈이 포함되어 있습니다. 또한 USB를 통해 모듈을 프로그래밍하고 통신하는 데 필요한 모든 하드웨어가 포함되어 있습니다. (이미지 출처: Adafruit)

3405의 핵심에는 4MB 플래시, Wi-Fi, Bluetooth, 거의 모든 응용 분야에 적합한 완벽한 주변 장치를 포함하는 ESP32-WROOM-32D 모듈이 있습니다.

사용할 수 있는 다른 개발 기판으로는 Espressif Systems의 ESP32-LYRATD-SYNA 오디오 기판이 있습니다(그림 3). 이 개발 기판에는 ESP32-WROVER-B 모듈이 포함되어 있습니다.

Espressif Systems의 ESP32-LYRATD-SYNA 기판 이미지그림 3: ESP32-LYRATD-SYNA 기판은 4MB 플래시가 탑재된 ESP32 WROVER-B 인증 Wi-Fi/Bluetooth 모듈을 기반으로 합니다. 설계자는 USB를 통해 모듈을 프로그래밍하여 통신하고 오디오 응용 제품을 개발하는 데 필요한 회로망이 있습니다. (이미지 출처: Espressif Systems)

또한 ESP32-LYRATD-SYNA 모듈에는 4MB 플래시와 오디오 응용 제품을 위한 모든 회로망이 있습니다. 이 기판에는 오디오 응용 제품을 완벽하게 테스트하기 위한 오디오 코덱, 오디오 증폭기, 헤드폰 및 스피커 잭이 포함되어 있습니다.

OTA를 테스트하는 데 사용할 수 있는 마지막 개발 기판에는 Espressif ESP32-S2-SAOLA-1RI 개발 기판이 있습니다(그림 4). 개발 기판 중에 가장 저렴한 기판입니다. 이 기판에는 ESP32 Wrover 모듈과 칩을 프로그래밍하기 위한 회로망이 포함되어 있습니다. 이 기판에는 테스트를 위해 브레드 기판에 쉽게 연결할 수 있도록 제공되는 핀을 제외하면 꼭 필요한 소자만 포함되어 있습니다.

Wrover 모듈을 기반으로 하는 Espressif Systems의 ESP32-S2-SAOLA-1RI 이미지그림 4: Wrover 모듈을 기반으로 하는 ESP32-S2-SAOLA-1RI는 저렴하지만 기판 실장 모듈을 프로그래밍하는 데 충분한 회로망을 포함하는 베어본 개발 기판입니다. (이미지 출처: Espressif Systems)

각 ESP32 모듈에서 ESP-IDF를 활용하므로 테스트를 위해 선택하는 기판은 그리 중요하지 않습니다. 이 프레임워크는 드라이버, 미들웨어, RTOS, (이 기사의 목적상 중요한) 부터로더 및 OTA 라이브러리를 포함하여 개발자의 소프트웨어 개발 활동을 간소화하도록 설계되었습니다.

부트로더를 사용하면 개발자가 OTA 업데이트를 활용하고 메모리를 분할하여 기본 애플리케이션이 실행 중인 상태에서 펌웨어를 업데이트할 수 있으므로 다운타임을 최소화할 수 있습니다. 부트로더 설정은 처음에는 복잡해 보일 수도 있지만 제대로 안내될 경우 간단합니다.

OTA 개발 워크플로

ESP32의 OTA 개발 워크플로는 비즈니스 요구 사항과 제품 부품 선택에 따라 조금씩 달라질 수 있습니다. 예를 들어 AWS를 활용하는 팀은 AWS 설치 안내서와 예제를 사용하여 ESP32 OTA 솔루션을 작동할 수 있습니다. 반면에 자체 솔루션을 맞춤 제작하는 기업은 ESP32 설명서를 활용할 것입니다. 이 기사에서는 클라우드가 아니라 ESP32 수준에서 각 부분을 살펴보겠습니다. 각 부분은 일반적이어서 사용되는 클라우드 공급자 또는 솔루션에 상관없이 ESP32를 통해 OTA에 적용되기 때문입니다.

일반적으로 ESP32에서 OTA 업데이트를 설정하는 프로세스는 다음과 같은 단계를 포함합니다.

  1. ESP32 파티션 테이블 구성
  2. OTA를 지원하는 펌웨어 다운로드
  3. 서버 역할을 하고 새 펌웨어를 푸시할 도구 개발
  4. 최신 펌웨어를 ESP32로 다운로드
  5. 새 애플리케이션으로 스왑

이 방법은 간단합니다. 전체 펌웨어 업데이트 프로세스에 대한 자세한 내용은 그림 1을 참조하십시오. 이 프로세스는 매우 포괄적이므로 GitHub에 있는 기존 ESP32 OTA 예시를 활용하는 것이 좋습니다. 이 예시에서는 다음과 같은 여러 중요한 예를 제공합니다.

  • HTTPS OTA
  • 네이티브 OTA
  • 단순 OTA
  • OTA 도구(Python 스크립트 예)

그림 5는 배포 및 업데이트 프로세스 단계를 보여줍니다. 개발자는 먼저 빨간색으로 표시된 단계를 수행하여 OTA 솔루션을 ESP32 모듈에 배포해야 합니다. 그런 다음 OTA 업데이트를 간소화하기 위한 주황색 단계를 수행합니다.

Espressif Systems의 OTA 업데이트 예시 구성도그림 5: GitHub에 있는 Espressif Systems OTA 업데이트 예시에서는 개발자에게 OTA 업데이트를 수행하기 위해 ESP32를 가져오는 방법을 보여주는 몇 가지 간단한 예시를 제공합니다. (이미지 출처: Espressif Systems)

OTA를 위한 ESP32 애플리케이션 구성

ESP32에는 마이크로 컨트롤러에 있는 데이터 유형과 해당 데이터의 위치를 설명하는 파티션 테이블이 포함되어 있습니다. 예를 들어 표준 ESP32 파티션 테이블은 표 1과 비슷합니다.

표준 ESP32 파티션 테이블 이미지표 1: 마이크로 컨트롤러에 있는 데이터 유형과 데이터의 위치를 보여주는 표준 ESP32 파티션 테이블 (표 출처: Beningo Embedded)

출하 시 초기 애플리케이션과 NVS 라이브러리 및 물리층(PHY) 초기화(init) 데이터 섹션이 있습니다. OTA 기능을 사용하려면(출하 시) 기본 애플리케이션 이외에, 이 테이블을 업데이트하여 OTA 업데이트 펌웨어에 대한 메모리 위치를 지정해야 합니다. OTA의 경우 일반적으로 업데이트에 할당되는 두 파티션이 있습니다. 하나는 업데이트된 활성 펌웨어를 위한 파티션이고, 다른 하나는 다운로드 중인 펌웨어(최신 버전)를 위한 파티션입니다. 따라서 출하 시 초기 애플리케이션을 그대로 유지할 수 있습니다. 업데이트된 OTA 파티션 테이블은 표 2와 비슷합니다.

일반 ESP32의 업데이트된 OTA 파티션 테이블 이미지표 2: 일반 ESP32의 업데이트된 OTA 파티션 테이블 (표 출처: Beningo Embedded)

위에서 살펴본 바와 같이 이제 1MB 크기의 ota_0 및 an ota_1 애플리케이션 섹션과 업데이트 프로세스에 할당되는 RAM에 해당하는 데이터 섹션(otadata)이 있습니다. 개발자는 애플리케이션에 맞게 이 테이블을 수정하여 업데이트할 수 있습니다.

OTA 예를 실행하기 위한 간단한 지침이 GitHub의 'How to use the examples(예제 사용 방법)' 섹션에 나와 있습니다. 여기서는 애플리케이션을 빌드하여 프로그래밍하는 방법을 설명합니다.

또한 펌웨어를 업데이트하는 데 사용할 수 있는 otatool이 있습니다. 이 스크립트의 사용 목적은 다음과 같습니다.

  • OTA 파티션 읽기, 쓰기, 지우기
  • 부팅 파티션 전환
  • 공장 출하 시 파티션으로 전환

예제 스크립트를 실행하려면 다음 명령으로 터미널에서 예제를 실행하거나

./otatool_example.sh

Python을 사용합니다.

python otatool_example.py

OTA에 맞게 ESP32를 구성하려면 파티션이 설정되어 있는지 확인해야 합니다.

유용한 정보

EPS32 OTA 솔루션은 개발자의 펌웨어 업데이트 솔루션을 가속화 및 간소화할 수 있습니다. 솔루션이 개발에 부담이 되지 않도록 유의해야 할 몇 가지 '유용한 정보'가 있습니다.

  • 가능하면 회사 클라우드 공급자에 포함된 기존 OTA 프레임워크를 활용합니다. 그러면 개발 및 통합을 획기적으로 간소화할 수 있습니다.
  • 저가형 개발 기판을 사용하여 OTA 기능과 부트로더를 테스트합니다. ESP32에는 여러 가지 옵션이 있으므로 몇 가지 실험을 수행하여 애플리케이션에 가장 적합한 옵션을 직접 결정할 수 있습니다.
  • 맞춤형 솔루션의 경우 GitHub의 ESP32 OTA 예시를 활용합니다.
  • Wi-Fi 라우터 또는 허브 역할을 하는 제품의 애플리케이션의 경우 펌웨어 이미지를 외부 메모리로 다운로드하여 대용량 스토리지 장치에서 업데이트를 수행하는 것이 좋습니다.
  • 잠시 ESP32 설명서에서 파티션 테이블에 대해 검토해 봅니다. 이는 일반 마이크로 컨트롤러 구현과 약간 다릅니다.
  • 보안상의 이유로 애플리케이션 롤백을 비활성화하는 것이 좋습니다. 애플리케이션을 이전 버전으로 롤백할 수 있는 경우 향후 공격자가 알려진 악용 사례가 있는 버전을 푸시하여 시스템을 훼손할 수 있습니다.

이러한 '유용한 정보'를 따르는 개발자는 ESP32 또는 다른 OTA 솔루션(해당하는 경우)을 활용하려고 할 때 많은 시간과 고민을 줄일 수 있습니다.

결론

OTA 업데이트는 많은 IoT 및 내장형 시스템에 중요한 기능입니다. 개발자는 설계 및 개발 프로세스 도중과 제품을 배송한 이후에 시간을 절약하기 위해 OTA 업데이트를 효과적으로 수행하는 방법을 잘 알고 있어야 합니다.

ESP32 무선 마이크로 컨트롤러는 광범위한 장치에서 사용되고 있으며, 위에서 살펴본 바와 같이 기성 OTA 솔루션이 있습니다. 개발자는 ESP-IDF와 관련 모듈 및 플랫폼을 활용하고 경험에 기반한 일부 유용한 정보를 이용하여 설계 시간을 획기적으로 단축하여 자체 OTA 솔루션을 실행할 수 있습니다.

DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

작성자 정보

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo는 임베디드 소프트웨어 컨설턴트로서 현재 십여 개국 이상의 국가에 있는 고객들과 협력하여 제품 품질, 비용, 출시 기간을 향상시켜 고객의 비즈니스를 극적으로 변화시키고 있습니다. 그는 인기 있는 강연자이자 기술 교육자이며 임베디드 소프트웨어 개발 기술에 대해 200개 이상의 기사를 발표했습니다. 그는 미시간 대학교 공학 석사 학위를 비롯하여 세 개의 학위를 소지하고 있습니다. 월간 Embedded Bytes 뉴스레터를 수신하려면 jacob@beningo.com 및 Jacob Beningo의 웹 사이트인 www.beningo.com으로 언제든지 문의해 주세요.

게시자 정보

DigiKey 북미 편집자