본문 바로가기

IoT HomeNet

ESP8266 Online Update 구현

Arduino IDE 로 ESP8266 에 OTA 를 구현하는 방법

ESP8266 OTA (arduinoIDE)




온라인으로 펌웨어 업데이트가 가능하면 여러모로 편한게 많다. 케이스를 뜯지 않고도 간단하게 변경이 가능해지기 때문에 손발이 편해지고, 왠지 멋저 보인다. ^^


OTA 를 구현하기 위해 알아두어야 하는 사항

  • 당연하지만 최초에 펌웨어를 올릴때는 시리얼포트를 이용해서 올려야 한다.
  • Air(WIFI)로 펌웨어를 받아두기위한 저장공간이 필요하므로 펌웨어의 크기는 ESP8266 플래시 공간의 반만 사용해야 한다.
  • 온라인 업데이트를 하는 방법은 Arduino IDE 를 이용, Web Server 를 구축하고 브라우저를 통해 플래시 파일을 upload, 별도로 다른 방법으로 짜는 길이 있다.


ESP8266 모듈의 선택

ESP12E(or12F) 같이 플래시 공간이 충분한 경우는 별로 어려울것이 없고 ESP07 같이 512K 에 불과한 경우는 아슬아슬 하다.

여러모로 용량을 줄이는 노력이 필요하고, 결과물을 보면 플래시공간의 대부분은 OTA 펌웨어가 올라가고 나머지 일부만이 사용가능 영역이여서 복잡한 동작을 해야 하는 경우는 모듈자체를 고용량으로 선택하는게 정신건강에 좋다

그리고 금액으로 따져봐도 새버전이 더 싸다.


ESP12F 가 2.33$(ebay) ESP07 2.38$, ESP02 2.5$ 정도인데, 이후 버전과 생산단가가 그리 차이 나지 않는 이유로 많이 쓰는 새버전의 가격이 더 싸지는 경향이 있다.


모듈중에는 여러모로 ESP12F가 갑인데 외부 안테나를 위한 ULF 단자만 있으면 딱좋겠다. 나오면 누가 알려줘요..


외부안테나 컨넥터가 없는 모델에 컨넥터를 달아도 의도대로 신호강도도 높아지고 잘 작동하는지 물어보는 사람들이 인터넷에 검색해보면 종종 나타나는데 아직 사례를 공유한 사람은 없다. 괜찮은 제품이 계속 나타나지 않으면 한번 해봐야 겠다.



ESP12F의 SPIFFS (SPI nor Flash devices on embedded File System) 설정

ESP8266 의 Flashmap 을 보면 

Sketch 영역, OTA update, File system, EEPROM,WiFi config (SDK) 로 구분 된다.




2M Flash 제품들은 SPIFFS 를 위해 1M,  4M 제품들은 1M,3M 중에 선택 할 수 있다.

SPIFFS 크기를 줄이면 OTA 영역과 Sketch 영역이 늘어나게 되므로 가급적 작게 선택하는것이 좋다.


참고 : http://esp8266.github.io/Arduino/versions/2.0.0/doc/filesystem.html


위에 이미지에는 ESP-12E 로 되어 있는데, 12E 와 12F 는 안테나 모양만 다르고 같은 모델로 보면 된다. 12F 에서 개선되었다.


OTA 구현방법

#include <ESP8266mDNS.h>

#include <ArduinoOTA.h>

#define SERVER_NAME "ESP8266-Test"

void setup()
{
// wifi config 

if (MDNS.begin(SERVER_NAME)) { }

ArduinoOTA.setHostname(SERVER_NAME);
ArduinoOTA.setPassword(UPDATE_PW);
ArduinoOTA.begin();
}

void loop(void){
  ArduinoOTA.handle();
}


구현방법은 간단하다.


주의사항은 ServerName 에 들어가면 안되는 문자가 있다.

예를 들어 아래 밑줄 '_' 을 쓰면 네트워크에 나타나지 않는다.


참고 : https://www.ietf.org/rfc/rfc1912.txt


 Allowable characters in a label for a host name are only ASCII letters, digits, and the `-' character.



주의 사항

  • upload 뒤에 모듈이 자동으로 reset 되는데 부팅이 안되는 현상이 있을 수 있다.  이때는 네트워크 포트를 COM 포트로 바꾸자. 네트워크 포트를 IDE 쪽에서 물고 있어서 그런걸로 보이는데, 버그 같다.




http://esp8266.github.io/Arduino/versions/2.1.0-rc2/doc/ota_updates/ota_updates.html

http://www.esp8266.com/viewtopic.php?p=35646

https://github.com/esp8266/Arduino/blob/master/libraries/ArduinoOTA/examples/BasicOTA/BasicOTA.ino



'IoT HomeNet' 카테고리의 다른 글

AppleTV HomeHub 구축  (2) 2017.01.14
Homebridge 설치  (0) 2017.01.09
ESP8266 를 보일러에 붙여보기 (4/4)  (0) 2016.12.24
ESP8266 를 보일러에 붙여보기 (3/4)  (0) 2016.12.24
ESP8266 를 보일러에 붙여보기 (2/4)  (1) 2016.12.23