Arduino IDE 및 웹 서버를 사용하여 ESP32 펌웨어를 업데이트하는 방법 -The -Air (OTA)

문제를 제거하기 위해 도구를 사용해보십시오





과거에는 펌웨어가 업데이트됩니다 임베디드 시스템 중요한 작업이었습니다. 그러나 대부분의 IoT 장치 및 임베디드 장치는 인터넷을 통해 연결되어 개발자가 원격으로 펌웨어를 업데이트합니다. 인터넷에 연결할 수있는 장치는 스스로 업데이트 할 수 있습니다. 따라서 이러한 종류의 펌웨어 프로그래밍이 ESP32 OTA (Over-the-Air)라고하며, 이는 임베디드 장치를 최소한의 사용자 개입으로 최신 상태로 유지하는 데 도움이됩니다.  또한, 오버 헤어는 많은 기능을 제공하며 개발자가 장치를 업데이트 할 수있는 비용 효율적인 기술입니다. 이 기사는 다음을 탐구합니다 OTA 펌웨어 ESP32 개발위원회에 대한 절차를 업데이트하십시오.


ESP32/ ESP32 OTA의 OTA 프로그래밍은 무엇입니까?

ESP32 OTA는 컴퓨터에 연결하지 않고 인터넷을 통해 ESP32 개발 보드 프로세스에 새 프로그램을 업로드하거나 업데이트하는 기능입니다. 또한이 프로세스는 유지 보수에서 모든 ESP 모듈을 업데이트하는 데 필요한 시간을 줄일 수 있습니다. 따라서 인터넷 또는 기타 유형의 무선 네트워크를 통해 무선 업데이트가 가능합니다.



ESP32 Development Board는 사용을 사용하여 펌웨어 업데이트에주의를 기울입니다. 프로토콜 HTTPS, MQTT 또는 HTTP와 같습니다. 그 후, ESP32 보드의 메모리 내에서 할당 된 파티션으로 확인하고 플래시합니다.  OTA 업데이트는 특히 장치가 액세스하기 어려운 경우 또는 원격 위치에서 내장 장치 또는 IoT 장치에 중요합니다.

ESP32 OTA 코어 부품

ESP32 OTA는 장치를 물리적으로 연결하지 않고 펌웨어 업데이트에 다양한 주요 구성 요소를 사용합니다. 따라서이 OTA의 핵심 부분은 업데이트 전송 및 수신에 도움이됩니다. 또한, esyncelegantota (또는) ESPRESSIF에서 ESP HTTPS OTA 라이브러리 및 프레임 워크는 구현 절차를 단축시킵니다.



OTA의 데이터 파티션

ESP32 보드의 플래시 메모리 내의이 파티션은 펌웨어 이미지 및 카운터와 같이 OTA의 업데이트 된 정보를 저장하여 최근에 어떤 슬롯을 기록했는지 추적합니다.

의사 소통 메커니즘

OTA 업데이트는 주로 무선 통신 프로토콜과 같은 무선 통신 프로토콜에 따라 다릅니다 블루투스 또는 Bluetooth가보다 현지화되고 작은 업데이트에 사용되는 WiFi 및 WiFi는 일반적으로 사용됩니다.

  PCBWAY

클라이언트 서버 아키텍처

모바일 앱이나 PC와 같은 클라이언트는 업데이트를 시작하고 펌웨어를 ESP32 서버로 보냅니다.

라이브러리 및 프레임 워크

Asyncelegantota 및 ESP HTTPS OTA 라이브러리는 OTA 절차를 처리하고 개발을 단축하기 위해 사전 구축 된 기능을 제공합니다.

부트 로더

이 부트 로더는 성공적인 OTA 업데이트 후 최신 펌웨어로의 전환을 처리합니다.

안전한 OTA

안전한 OTA 업데이트에는 펌웨어 서명 이미지 확인이 포함되어있어 무결성 및 진정성을 보장합니다.

본질적으로 ESP32 OTA 업데이트에는 소프트웨어 (파티션, 라이브러리 및 펌웨어) 및 통신 프로토콜 (Wi-Fi 또는 Bluetooth)의 조합이 포함됩니다. 따라서 물리적 액세스없이 장치의 펌웨어를 완벽하게 업데이트합니다.

일하고 있는

ESP32 OTA 프로그래밍을 통해 ESP32의 펌웨어/소프트웨어는 물리적 연결없이 컴퓨터에 무선으로 업데이트 할 수 있습니다. 따라서 Wi-Fi와 같은 네트워크를 통해 새로운 펌웨어 이미지를 보내고 ESP32의 플래시 메모리에 작성하여 수행 할 수 있습니다. 따라서 ESP32 개발 보드가 재부팅되고 최신 펌웨어가 실행 중입니다.

ESP32 OTA의 구현

ESP32 개발위원회의 오버 공기 업데이트를 구현하려면 기본 OTA 스케치를 업로드해야합니다. 그 후 웹 서버는 최신 펌웨어를 업로드하는 데 사용됩니다. 따라서 ESP32 OTA 절차의 전체 설치에는 Wi-Fi 연결 설정, 라이브러리 설치가 포함되며, 그 후 컴파일 된 이진 파일이 ESP32 보드에 업로드됩니다.

ESP32 OTA 구현의 단계별 절차 :

  • 먼저 Arduino IDE 내에 ESP32 보드 패키지를 설치해야합니다.
  • 그 후, ESP32의 특정 및 기타 필요한 라이브러리를 포함하십시오.
  • 기본 OTA 스케치를 업로드해야하며, 일반적으로 OTA 업데이트 용 웹 서버가 포함되어 있습니다.
  • 브라우저를 열고 ESP32의 웹 서버 IP 주소를 허용하십시오.
  • 업로드하려는 웹 서버 인터페이스에서 .bin 파일을 선택하십시오.
  • 업로드 버튼을 클릭하여 OTA 업데이트를 시작하십시오.
  • 이제 ESP32가 Wi-Fi 네트워크에 연결되어 있습니다.
  • Open Aard는 새로 업로드 된 펌웨어를 통해 재부팅됩니다.
  • Arduinoota 라이브러리는 ESP32 코어에서 사용되어 OTA 절차를 단순화해야합니다.
  • 라이브러리에서 제공 한 Basicota 예제를 사용하거나 자신의 OTA 응용 프로그램을 만들 수도 있습니다.
  • 이제 Arduinoota 라이브러리를 사용하면 최신 스케치 OTA를 ESP32에 업로드 할 수 있습니다.

웹 서버를 사용하십시오

  • ESP32 Arduino 라이브러리에서 Otawebupdater 예제는 펌웨어를 업로드하기위한 웹 인터페이스를 제공합니다.
  • 스케치는 .bin 파일을 생성하도록 컴파일 된 후 웹 서버를 통해 업로드 할 수 있습니다.
  • 이 기술은 간단하고 접근 가능한 OTA 업데이트를 허용합니다.
  • 또한 ESP32 보드 내에 최소 2 개의 OTA 파티션이 있는지 확인하십시오.
  • 주로 OTA 업데이트에 Arduino IoT Cloud와 같은 다른 기술을 사용하십시오.
  • OTA 절차는 실행중인 펌웨어가 안정적으로 유지되도록하여 전용 OTA 파티션 내에서 기존 펌웨어를 덮어 씁니다.

ESP32 Arduino와 인터페이스하는 OTA

WiFi 지원 마이크로 컨트롤러의 주요 특징 (ESP32 & ESP8266 ) OTA 프로그래밍입니다. 이 장치는 펌웨어를 무선으로 업그레이드합니다. OTA를 사용하면 유사한 네트워크에있는 다양한 마이크로 컨트롤러로 업데이트를 전송할 수 있습니다. 이 기능은 여러 마이크로 컨트롤러, 셋톱 박스, 컴퓨터, 휴대 전화 등에 일부 기능을 포함하여 버그 해결을위한 업데이트를 보내는 데 사용됩니다.

일반적으로 OTA 업데이트는에서 중요한 역할을합니다 사물의 인터넷 새로운 설정 및 소프트웨어로 인터넷 연결 장치를 원격으로 업데이트합니다. 여기서 우리는 Arduino IDE에있는 ESP32 보드와 OTA 웹 업데이트와 함께 OTA 프로그래밍을 사용할 것입니다.

Arduino 보드와 인터페이스하는 ESP32 OTA에 필요한 구성 요소에는 ESP32 보드 및 Arduino IDE가 포함됩니다.

  ESP32 Arduino와 인터페이스하는 OTA
 ESP32 Arduino와 인터페이스하는 OTA

OTA 코드

ESP32 개발위원회의 OTA 코드는 다음과 같습니다.

#include

#include

const char* host =“ESP32”;  ssid = 'xxx'; 비밀번호 = 'xxxx';

웹 서버 서버 (80);

/* 로그인 페이지*/

const char* logindex =

'<양식 이름 = 'loginform'>'

'<테이블 너비 = '20%'bgcolor ='A09F9F 'align ='센터 '>”

''

“”

'

ESP32 로그인 페이지
'

'
'

“”

'
'

'
'

“”

''

' 사용자 이름 : '

'
'

“”

'
'

'
'

''

' 비밀번호 : '

' <입력 유형 = '비밀번호'크기 = 25 이름 = 'pwd'>
'

'
'

'
'

“”

''

'

“”

“”

“”

'기능 확인 (양식)'

'{'

'if (form.userid.value == 'admin'&& form.pwd.value == 'admin')'

'{'

'Window.Open (‘/serverIndex’)'

'}'

'또 다른'

'{'

'Alert ( '오류 암호 또는 사용자 이름')/*오류 메시지를 표시*/'

'}'

'}'

'';

/*

* 서버 인덱스 페이지

*/

const char* serverIndex =

“<스크립트 SRC = 'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js’></script>”

'

“<입력 유형 = '파일'이름 = '업데이트'>”

“<입력 유형 = '제출'값 = '업데이트'>”

'

진행 : 0%
'

'$ (‘form’). 제출 (function (e) {'

'E.preventDefault ();'

'형식 = $ ( '#upload_form') [0];'

'데이터 = 새로운 formdata (form);'

'$ .ajax ({”

'URL :‘/업데이트’,'

'유형 :‘포스트’,'

'날짜 : 날짜,'

'ContentType : False,'

'ProcessData : False,'

“xhr : function () { '

'var xhr = new window.xmlhttprequest ();'

'xhr. upload.addentListen ( 'progress', function (아마도) {'

“if (evt.lengthcomputable) { '

'var pear = evt.evt.total;'

'$ (‘#prg’). html (‘진행 :‘ + math.round (*100) +‘%’);'

'}'

'}, 거짓);'

'XHR 리턴;'

'},'

“성공 : 기능 (d, s) { '

'Console.log (‘성공!’)' '

'},'

“오류 : 함수 (a, b, c) { '

'}' '});'; ' '});'

””;

/*

* 설정 함수

*/

void setup (void) {

Serial.begin (115200);

// Wi -Fi 네트워크에 연결합니다

wifi.begin (ssid, password);

serial.println (“”);

// 연결을 기다립니다

while (wifi.status ()! = wl_connected) {

지연 (500);

Serial.print (“.”);

}

serial.println (“”);

Serial.print (“연결된”);

Serial.println (SSID);

serial.print (“IP 주소 :“);

serial.println (wifi.localip ());

/*호스트 이름 해상도에 mdns를 사용하십시오*/

if (! mdns.begin (host)) {// c2e2f8f35ba56eedbbc296b8125c387d1182e239

serial.println (“MDNS 응답자 설정 오류!”);

(1) {

지연 (1000);

}

}

Serial.println (“MDNS 응답자 시작”);

/ *ServerIndex에 저장된 반환 인덱스 페이지 */

Server.on ( '/', http_get, [] () {

Server.SendHeader ( 'Connection', 'Close');

Server.Send (200, 'Text/Html', loginIndex);

});

Server.on ( '/serverIndex', http_get, [] () {

Server.SendHeader ( 'Connection', 'Close');

Server.Send (200, 'Text/Html', ServerIndex);

});

/ *펌웨어 파일 업로드 처리 */

Server.on ( '/update', http_post, [] () {

Server.SendHeader ( 'Connection', 'Close');

Server.Send (200, 'Text/Plain', (update.haserror ())? '실패': 'OK');

esp.restart ();

} {

httpupload & upload = server.upload ();

if (upload.status == upload_file_start) {

serial.printf (“업데이트 : %s \ n”, upload.filename.c_str ());

if (! update.begin (update_size_unknown)) {// 최대 사용 가능한 크기로 시작합니다

update.printerror (Serial);

}

} else if (upload.status == upload_file_write) {

/* ESP에 플래시 펌웨어*/

if (update.write (upload.buf, upload.currentsize)! = upload.currentsize) {

update.printerror (Serial);

}

} else if (upload.status == upload_file_end) {

if (update.end (true)) {// 크기를 현재 진행 상황으로 설정하려면 true

Serial.printf (“업데이트 성공 : %u \ nrebooting… \ n”, upload.totalsize);

} 또 다른 {

update.printerror (Serial);

}}}

server.begin ();

}

void loop (void) {

Server.HandleClient ();

지연 (1);

}

OTA 프로그래밍 작업

OTA 프로그래밍 기능을 사용하려면 직렬 포트를 통해 스케치를 업로드해야합니다. 이 스케치에는 OTA 웹 업데이터를 만드는 HTML 코드가 포함되어 있습니다. 나중에 브라우저로 코드를 쉽게 업로드 할 수 있습니다. 코드가 직렬 포트를 통해 업로드되면 웹 브라우저를 통해 새 스케치를 선택하고 업로드 할 수있는 웹 서버가 작성됩니다.

ESP32 보드를 노트북에 연결하여 기본 코드를 업로드 한 다음 Arduino IDE를 열고 ESP32 DEV 키트로 보드 유형을 선택하고 오른쪽 직렬 포트를 선택하십시오.

원본 코드 내에서 Wi-Fi 및 비밀번호의 이름을 수정하십시오.

OTA 코드는 ESP32 보드에 업로드해야합니다. 코드가 성공적으로 업로드되면 직렬 모니터를 엽니 다. 그 후, 직렬 모니터에서 115200의 보드 비율을 변경해야합니다. ESP32 모듈 위의 재설정 버튼을 누르면 ESP32 보드의 IP 주소를 인쇄해야합니다.

기본 브라우저를 열면 ESP32 IP 주소를 붙여 넣습니다. 따라서 OTA의 웹 서버 페이지를 열어야합니다. 여기서 사용자 이름 및 비밀번호는 기본적으로 관리자입니다. 이제 로그인 세부 정보를 입력하고 로그인 페이지를 클릭 한 다음 새 탭이 열려 코드를 업로드합니다.

장점

ESP32 OTA의 장점에는 다음이 포함됩니다.

  • 이 중앙 집중식 접근 방식을 사용하면 단일 업데이트가 유사한 네트워크에서 다양한 ESP32로 분산 될 수 있습니다.
  • OTA는 개발 보드에 물리적으로 액세스하지 않고 원격 펌웨어의 업그레이드를 허용하여 IoT 배포에 적합합니다.
  • OTA는 특히 액세스 할 수없는 또는 원격 장치에 대한 업데이트 절차를 단순화하여 ESP32 보드를 업데이트하기 위해 물리적 연결 요구 사항을 제거합니다.
  • 업데이트는 원격으로 달성 될 수 있으므로 보호 및 운영에 소요되는 시간이 줄어 듭니다.
  • 단일 소스는 유사한 네트워크에서 수많은 ESP32로 업데이트를 보내고 거대한 배포에 대한 업데이트 절차를 간소화합니다.
  • OTA는 대규모 프로젝트에 매우 효율적으로 만들어 여러 장치를 동시에 업데이트 할 수 있습니다.
  • 피크 외 시간 내에 업데이트를 계획하고 실행할 수있어 장치 작동에 문제가 발생합니다.
  • OTA 업데이트에는 보안 패치 및 취약점을 보호하는 개선이 포함됩니다.
  • OTA 기능은 Arduinoota 라이브러리와 함께 ESP32 기반 프로젝트에 통합 될 수 있습니다.
  • OTA 프로그래밍을 사용하면 컴퓨터에 연결하지 않고 ESP32로 새로운 프로그램을 업데이트 할 수 있습니다.

단점

그만큼 ESP32 OTA의 단점 다음을 포함하십시오.

  • ESP32 보드의 공장 이미지에는 OTA 기능이 포함되어 있지 않습니다. 따라서 먼저 OTA 업데이트를 사용하기 전에 직렬 연결을 통해이 펌웨어를 업로드해야합니다.
  • 또한 일부 이전 ESP32 모델에는 메모리 제한이 있습니다. 특히 1MB의 플래시 메모리가있는 모델이 있습니다.
  • ESP32 보드에 업로드 된 모든 스케치에는 OTA 기능을 허용하는 데 필요한 코드가 포함되어야합니다. 이 코드가없는 장치는 더 이상 웹 서버를 통해 OTA 업데이트에 사용할 수 없습니다.
  • 많은 현대식 ESP32 보드에는 충분한 메모리가 있지만, 특히 업로드 된 스케치가 기존 메모리 한계에 가까운 경우, 더 작거나 오래된 ESP32 모델은 OTA를 통해 제한을 충족 할 수 있습니다.
  • 사용자가 암호가없는 코드를 업로드하면 향후 OTA 업데이트에 대해 장치가 도달 할 수 없을 수 있으며, 시리얼을 통해 필요한 OTA 스케치를 다시 제출해야 할 수도 있습니다.
  • 사용자가 안전을 위해 사용자 이름과 비밀 단어를 추가 할 수 있지만이 측정은 누군가가 특정 URL을 식별하는 경우 무단 액세스로부터 OTA 업로드 페이지를 완전히 보호하지 못할 수 있습니다.
  • OTA 코드의 부적절한 구현은 향후 OTA 기능을 비활성화 할 수 있으므로 잠재적 인 문제로 이어질 수 있습니다.

응용 프로그램

ESP32 OTA의 응용 프로그램에는 다음이 포함됩니다.

  • ESP32 OTA 애플리케이션을 통해 장치의 펌웨어는 장치에 대한 물리적 연결없이 원격으로 업데이트 할 수 있습니다. 따라서 이는 접근 할 수없는 위치에 설치된 IoT 장치에 주로 도움이되며 다운 타임 및 유지 보수 비용이 줄어 듭니다. OTA를 사용하면 소프트웨어 업데이트, 버그 수정 및 기능 향상을 빠르고 효율적으로 배포 할 수 있습니다.
  • ESP32 OTA 업데이트는 주로 임베디드 시스템 및 IoT 배포에서 다양한 응용 프로그램에서 필수적입니다.
  • 이러한 업데이트는 산업 자동화 시스템의 유지 보수 및 전체 프로세스를 종료하지 않고 업그레이드하는 데 중요합니다.
  • OTA를 사용하면 Smart Home 장치가 최상의 성능 및 기능 개선을 보장하여 원격 펌웨어 업그레이드를받을 수 있습니다.
  • OTA 업데이트는 정확하고 기능적으로 유지하여 원격 센서의 펌웨어 및 모니터링 시스템을 업데이트하는 데 중요합니다.
  • OTA 업데이트는 원격 액세스가 비현실적이거나 제한적인 경우 IoT 애플리케이션에서 장치를 처리하고 유지하기에 적합한 방법을 제공합니다.
  • 사용자는 스마트 잠금, 보안 카메라 및 보안 시스템을 업데이트하여 안전하고 기능적인 상태를 유지합니다.
  • 산업은 ESP32 OTA를 사용하여 자동화 프로세스에서 기계의 소프트웨어 및 시스템을 업데이트합니다.
  • 기술자는 기상 관측소, 환경 모니터링 및 원격 애플리케이션에서 장치의 소프트웨어를 업데이트합니다.
  • 이 OTA는 스마트 농장 장비, 관개 시스템 등의 소프트웨어를 업데이트합니다.
  • 자물쇠, 보안 시스템, 스마트 라이트 등과 같은 홈 자동화에서 스마트 홈 장치를 원격으로 관리하고 업데이트합니다.

결론:

따라서, ESP32 OTA 업데이트가 제공됩니다 물리적 연결을 제거하여 ESP32 장치에서 펌웨어 및 기타 파일을 무선으로 업데이트하는 편리한 방법. 따라서이 방법은 주로 원격 배포에 도움이되며 물리적 연결없이 버그 수정 및 기능 향상을 허용하여 유지 보수를 줄입니다. ESP32 OTA 업데이트는 ESP32 장치를 원격으로 유지 관리하고 업데이트하고 유지 보수를 단순화하며 업데이트 프로세스를 단축하는 데 유용한 기술을 제공합니다. 여기에 질문이 있습니다 : ESP32 보드는 무엇입니까?