아두이노프로세싱 프로그래밍

weMos 무선 코딩 업데이트를 위한 Arduino OTA(Over The Air) 설치 및 BLINKING 예제

coding art 2017. 7. 3. 15:44
728x90

필요한 예제 코딩과 절차에 관해서는 곧 출간 준비중인 종이 책 "라즈베리 와이파이 코딩"을 참고하기 바란다


아두이노 편집기를 사용하면서 USB 커넥터나 시리얼 인터페이스 없이 ESP8266 보드에 무선 인터넷으로 코드를 업데이트 내지는 업로딩 하는 OTA(Over The Air) 설치 6단계 과정을 살펴보자. 대상이 되는 ESP8266 보드로는 weMos  보드를 들 수 있다.


1. USB 커네터 케이블을 사용하여 ESP8266 보드를 PC에 연결하고 아두이노 편집기를 실행 시키도록 한다.
2. 아두이노 편집기의 예제의 Arduino OTA 편에서 BasicOTA를 열어 보드 종류를 지정하고 컴파일하여 업로딩한다.
3. 업로딩 후 WiFi 네트워크가 연결되면 시리얼 모니터 창을 열어 가상 IP 가 출력됨을 확인하고
4. 다시 포트 항목에서 네트워크 포트 번호가 가상 IP와 함께 추가되어 있음을 확인한다.
5. ESP8266 보드의 USB 커넥터 케이블을 PC로부터 OFF 한 다음 ESP8266 보드를 스마트 폰용 보조 리튬배터리를 이용하여 전원을 직접 공급한다.
6. 여기서는 첨부된 weMos_example_01 파일을 불러 컴파일 업로딩하여 OTA가 실행되는지 확인 작업을 한다. 이 예제는 붙박이 LD인 14번을 블링킹하게 되어 있는데 블링킹 시간을 단축 수정하면서 컴파일 업로딩 작업과 동시에 업데이트 여부를 쉽게 확인하도록 한다.












































































.




.







































weMos_example_01


#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
 
const char* ssid = "android1234";
const char* password = "dddddddddd";
int ledpin = 14;
 
void setup() {
 Serial.begin(115200);
 Serial.println("Booting");
 WiFi.mode(WIFI_STA);
 WiFi.begin(ssid, password);
 while (WiFi.waitForConnectResult() != WL_CONNECTED) {
 Serial.println("Connection Failed! Rebooting...");
 delay(5000);
 ESP.restart();
 }
ArduinoOTA.onStart([]() {
 Serial.println("Start");
 });
 ArduinoOTA.onEnd([]() {
 Serial.println("\nEnd");
 });
 ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
 Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
 });
 ArduinoOTA.onError([](ota_error_t error) {
 Serial.printf("Error[%u]: ", error);
 if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
 else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
 else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
 else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
 else if (error == OTA_END_ERROR) Serial.println("End Failed");
 });
 ArduinoOTA.begin();
 Serial.println("Ready");
 Serial.print("IPess: ");
 Serial.println(WiFi.localIP());
 pinMode(ledpin, OUTPUT);
}
void loop() {
 ArduinoOTA.handle();
 digitalWrite(ledpin, HIGH); // turn the LED on (HIGH is the voltage level)
 delay(100); // wait for 2 second
 digitalWrite(ledpin, LOW); // turn the LED off by making the voltage LOW
 delay(100);
}