저번에 OTA 준비작업을 하였다면 이번에는 실제로 업데이트를 해보겠습니다.
저번과 조금은 방법을 바꿔서 해보도록 하겠습니다.
부팅할때마다 서버에 파일업데이트를 확인하는 방법입니다.
그러기 위해서 소스에서 버전관리를 해줘야 합니다.
1 2 | String version="sensorview 1"; String nextVersion="esp8266/sensorview2.bin"; | cs |
이런식으로 현재버전과 앞으로 업데이트 할 버전을 관리합니다.
그리고 서버쪽에는 업데이트 할 버전의 파일을 만들어서 넣어두면
부팅시 접속하여 업데이트 할 버전의 파일을 다운로드 합니다.
물론 새 버전에서는 위의 버전을 한단계씩 바꿔줘야 합니다.
ota를 할 함수는 재부팅시마다 실행되는데
ota 코드는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | String updateAddr="http://Server Address/"+nextVersion; t_httpUpdate_return ret = ESPhttpUpdate.update(updateAddr); switch (ret) { case HTTP_UPDATE_FAILED: debug.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); debug.println(""); break; case HTTP_UPDATE_NO_UPDATES: debug.println("HTTP_UPDATE_NO_UPDATES"); break; case HTTP_UPDATE_OK: debug.println("HTTP_UPDATE_OK"); break; } | cs |
Line 1 : OTA 파일 확인을 위한 주소입니다.
이제 컴파일및 다운로드를 합니다.
주의할 점은 flash size를 올바르게 설정해줘야 합니다.
제가 사용한 칩은 wroom-02인데 내부 플래쉬가 2M입니다.
그렇다 보니 Flash size를 2M로 설정해 줍니다.
다운로드가 완료된 후 디버깅 로그를 보면 파일이 없다고 나옵니다.
아직은 업데이트 할 파일이 서버에 없어서 그렇습니다.
서버에 파일을 복사한 후 다시 재부팅 합니다.
별도의 에러메세지가 나타나지 않고 잠깐 동안 딜레이가 걸리는데
파일을 다운로드하고 설치하는 시간입니다.
중간쯤 2칸이 비워져 있는 부분입니다.
그리고 재부팅이 됩니다.
재부팅이 되면 버전이 2로 바뀌어 있는 것을 볼 수 있습니다.
그리고 다음 버전은 없으므로 파일을 찾을 수 없다고 나타납니다.
P.S 만약 403에러가 나타난다면 서버쪽에 방화벽으로 인해
파일에 접근할 수 있는 권한이 없는 경우이므로 방화벽을 풀어주세요.~
추가로 ide Size 가져오는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | uint32_t realSize = ESP.getFlashChipRealSize(); uint32_t ideSize = ESP.getFlashChipSize(); FlashMode_t ideMode = ESP.getFlashChipMode(); debug.printf("Flash real id: %08X\n", ESP.getFlashChipId()); debug.printf("Flash real size: %u bytes\n\n", realSize); debug.printf("Flash ide size: %u bytes\n", ideSize); debug.printf("Flash ide speed: %u Hz\n", ESP.getFlashChipSpeed()); debug.printf("Flash ide mode: %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN")); if (ideSize != realSize) { debug.println("Flash Chip configuration wrong!\n"); } else { debug.println("Flash Chip configuration ok.\n"); } | cs |
'Study > ESP8266(WIFI),ESP32(BLE,WIFI)' 카테고리의 다른 글
ESP32 하드웨어 시리얼 변경 (0) | 2019.12.13 |
---|---|
ESP32 PWM사용하기 (0) | 2019.12.11 |
ESP8266-arduino Serial(UART) 통신시 유의점 (0) | 2019.02.21 |
ESP8266에서 I2C 사용하기 (2) | 2018.11.06 |
ARDUINO PHP POST로 통신하기2 (0) | 2018.06.21 |