0

Nạp code từ xa cho ESP8266 | ESP8266 OTA | Arduino IDE

ESP8266 Nạp code từ xa

Tại sao cần nạp code từ xa cho ESP8266? Theo như thông thường thì chúng ta thường sử dụng ESP trên nền tảng Arduino IDE là chủ yếu, nên hôm nay ESPITEK xin giới thiệu đến các bạn cách nạp code mà không giống như những cách thông thường chúng ta hay sử dụng là sử dụng dây cắm để nạp qua UART. Sử dụng ESP8266/ESP32 thì đã mặc định sử dụng với các ứng dụng IOT hay có các kết nối Internet. Chỉ việc cho EPS8266 kết nối đến mạng cùng với máy tính bạn sử dụng là có thể Upload Firmware đến ESP8266 bất cứ lúc nào rồi.

Bài viết bạn nên đọc:

Lập trình OTA là gì?

Lập trình OTA (Over the Air) là một quá trình cho phép các thiết bị nâng cấp firmware hoặc phần mềm mà không cần dùng không dây để  nạp. Sử dụng công nghệ không dây như Wi-Fi, Bluetooth, GPRS hoặc 4G / 3G thay vì giao tiếp nối tiếp có dây. OTA được sử dụng để lập trình lại các thiết bị như vi điều khiển, điện thoại di động, máy tính, hộp giải mã, vv Các bản cập nhật OTA thường được gửi để cập nhật phần mềm, giải quyết các lỗi, thêm một số tính năng, v.v … Với việc sử dụng các thiết bị IoT ngày càng tăng thì việc Update code cho các phiên bản khác nhau mà không cần phải thu hồi sản phẩm là một việc rất quan trọng và vô cùng hữu ích.

Cách nạp code từ xa nào dành cho ESP8266

Sử dụng thư viện Arduino OTA có sẵn trong Example của Arduino IDE

Mở Example BasicOTA trên Arduino IDE

Mở Examples ArduinoOTA có trong thư viện của IDE sau đó tiến hành cập nhật tên wifi và mật khẩu bạn đang sử dụng cho ESP8266.

Chỉnh sửa tên wifi và mật khẩu

Tiếp theo mình sẽ hướng dẫn ví dụ nạp code từ xa cho ESP8266 bằng cách Blink led có sẵn trên ESP8266.

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

const char* ssid = "TEN WIFI"; 
const char* password = "MAT KHAU";

const int blink_led = D0;  // LED pin on NodeMCU ESP8266

void setup() {
  pinMode(blink_led,OUTPUT); 
  
  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(1000);
    ESP.restart();
  }

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_SPIFFS
      type = "filesystem";
    }
    Serial.println("Start updating " + type);
  });
  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("IP address: ");
  Serial.println(WiFi.localIP());    
}

void loop() {
  ArduinoOTA.handle();
  digitalWrite(blink_led,HIGH);
  delay(1000);  
  digitalWrite(blink_led,LOW);
  delay(1000);
}

Sau khi viết code xong, các bạn tiến hành chọn IP và dùng nó để nạp code thông qua mạng Wifi

Chọn IP để nạp code

Lưu ý: Nếu bạn không thấy hiện IP chỗ Port thì tắt Arduino IDE đi và mở lại thì IP sẽ xuất hiện như hình trên.

Các bước nạp code từ xa cho esp8266 cơ bản đã thành công, tuy nhiên có một vấn đề là nếu update như vậy thì ai ở trong cùng một mạng, có máy tính và Arduino IDE đều có thể điều chỉnh thay đổi và nạp code giống như bạn xuống dưới ESP8266. Vậy nên mình sẽ thêm mật khẩu cho chương trình cho chắc ăn.

ArduinoOTA.setPassword((const char *)"ESPITEK");

ESPITEKlà mật khẩu bạn có thể thay thế theo ý bạn.

Lưu ý: Khi nạp code từ xa cho esp8266 thì bạn nên tắt Serial của IDE đi nhé !

Sau đó tiến hành nhấn nút UPLOAD trên Arduino IDE như bình thường nhé.

ESP8266 OTA Blink

Ngoài ra các bạn cũng có thể nạp code từ xa cho ESP8266 thông qua Web hay HTTP, ở đây mình chỉ hướng dẫn một cách duy nhất để các bạn dễ nắm rõ. Nếu cần các bạn có thể tham khảo ở các bài hướng dẫn sau:

Nếu các bạn sử dụng ESP32 có thể theo dõi cách nạp code từ xa này mà ESPITEK đã chia sẽ trong bài: https://espitek.com/esp32/lap-trinh-esp32-over-the-air-thong-qua-web-browser-arduino-ide/

Chúc các bạn thành công!

Trả lời

Email của bạn sẽ không được hiển thị công khai.