Over the Air NodeMcu Dev Kit V1.0 PlatfromIO


OTA คือ  Over the Air 
แล้วยังไง....
ถ้าบอกว่า Upload Program ผ่าน Wifi หล่ะ
นั่นแหล่ะ
อย่างที่รู้ NodeMcu Dev Kit Vx.x หรือ พวก  ESP8266 พวกนี้มันเป็น chip  wifi
ก็จัดเลย

ต้นเหตุมันเกิดจากผมทำโปรเจทเกี่ยวกับ Power Meter คือมันต่อกับ 220V ก็กลัวบ้างอะไรบ้าง เห็นเพื่อนๆ พี่ๆ ก็ได้ลอง OTA กันมานานแล้ว ไอ้เราก็มัวแต่ไปทำอย่างอื่น ตอนนี้เลยถือโอกาสลองแล้วใช้งานมันสะเลย

ต่อ
PlatformIO มันทำให้ง่ายอีกแล้ว
ใน packet ของ esp8266/aruduino จะมี Example ชื่อว่า  BasicOTA.ino
เราจะใช้ Code จากอันนี้เป็นหลักเลย

Upload Header OTA
New Project สร้าง main.cpp แล้วยัด Code นี้เข้าไปเลย

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "----";
const char* password = "-----";

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();
}

// Port defaults to 8266
ArduinoOTA.setPort(8266);

// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");

// No authentication by default
ArduinoOTA.setPassword((const char *)"123");

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 NutDIY");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}

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

ทำการ Upload

0. Upload

หลังจาก Upload เสร็จก็ต่อ Serial ดู IP เลย
ตัวอย่างเป็น IP = 14.1.1.203

1. Test Serial

Test Upload OTA
เพิ่ม Code เพื่อทดสอบ


ก็ไฟกระพริบดีๆนี่แหล่ะ (Blink Code)



2. Edit Code OTA
Config platformio.ini 
เพิ่มส่วนนี้เข้าไป 
upload_port = 14.1.1.203 <----- IP ของ NodeMcu Dev kit ของเรา
upload_flags = --auth=123 --port=8266 <----- รหัสของเรา
port  8266 จริงๆมันเป็น default อยู่แล้ว แต่ใส่ลงไปเพื่อให้เห็นว่า  upload_flags มันสามารถใส่ option ต่อกันไปเรื่อยๆ

3. platfromio.ini OTA Config
กันงง
4.ConfigLink-PlatformIO-OTA

upload ..... เราสามารถต่อ Serial monitor ดูได้ด้วย

5. upload and Serial monitor

บางทีก็  error นะ

6. error
ข้อกำหนดในการ Upload ด้วย OTA 
1. IP ต้องอยู่ในวงเดียวกัน
2. ต้องอยู่หลัง Gateway (Router) ตัวเดียวกัน

เมื่อ Upload ผ่าน เราก็จะได้ ไฟกระพริบ




เวลาเรา เพิ่มโปรแกรม จำเป็นต้องมี OTA Code เข้าไปทุกครั้งนะครับ
ถ้าไม่มี ก็ไม่สามารถ Upload OTA  ได้ในครั้งต่อไป 

7. OTA Header Code


สวัสดีครับ


NutDIY

Share this

Previous
Next Post »