ESP8266 OTA Update dengan menggunakan Arduino IDE

Published by faiz on

Sharing is caring!

 

Kali ini saya ingin menunjukkan kaedah untuk update firmware ke ESP8266 dengan menggunakan web browser.

OTA (Over The Air) update adalah proses memuat naik firmware ke ESP8266 menggunakan WiFi berbanding menggunakan USB kabel. Fungsi ini amat berguna terutamanya ketika ketiadaan akses fizikal ke ESP8266.

Uploading new sketch secara wireless dari Arduino amat diperlukan seperti situasi berikut :

  • semasa pembinaan firmware sebagai satu cara yang mudah dan berkesan berbanding sambungan USB.
  • update beberapa ESP pada network yang sama.

OTA update dapat dilakukan dengan kaedah berikut:

  • Arduino IDE
  • Web Browser
  • HTTP Server

Untuk tutorial kali ini akan menerangkan tentang kaedah Web Browser.

Pertama sekali pastikan Arduino core untuk ESP8266 telah diinstall. Klik sini untuk cara install. Kemudian pastikan ESP8266 dan Komputer berada di rangkaian yang sama.

  • Pertama sekali upload sketch berikut menggunakan USB cable. Proses ini hanya dilakukan sekali sahaja. Proses untuk upload seterusnya akan menggunakan teknik OTA menggunakan WiFi.

/*
 To upload through terminal you can use: curl -F "image=@firmware.bin" esp8266-webupdate.local/update
*/

#include <ESP8266WiFi.h> 
#include <WiFiClient.h> 
#include <ESP8266WebServer.h> 
#include <ESP8266mDNS.h> 
#include <ESP8266HTTPUpdateServer.h>

const char* host = "esp8266-webupdate";
const char* ssid = "........"; //update ssid wifi anda
const char* password = "........"; //beserta passwordnya.

ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;

void setup(void){

Serial.begin(115200);
 Serial.println();
 Serial.println("Booting Sketch...");
 WiFi.mode(WIFI_AP_STA);
 WiFi.begin(ssid, password);

while(WiFi.waitForConnectResult() != WL_CONNECTED){
 WiFi.begin(ssid, password);
 Serial.println("WiFi failed, retrying.");
 }

MDNS.begin(host);

httpUpdater.setup(&httpServer);
 httpServer.begin();

MDNS.addService("http", "tcp", 80);
  Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
 
 Serial.println("atau");
 Serial.print("http://");
 Serial.print(WiFi.localIP());
 Serial.println("/update\n");
}

void loop(void){
 httpServer.handleClient();
}

  • Setelah proses upload selesai klik pada Tools -> Serial Monitor. Paparan seperti Rajah di bawah akan terhasil.

  • Seterusnya buka web brower dengan alamat seperti yang terpapar pada Serial Monitor.

  • Jika berhasi, bermaksud proses upload telah berjaya.

Seterusnya diterangkan proses untuk upload dengan teknik OTA.

  • Pertama sekali Open File > Preferences, cari  “Show verbose output during:” dan tick “compilation” option.

  • Pada sketch code, code di atas mestilah dijadikan sebagai template sebelum memulakan program. Di sini saya akan menunjukkan contoh untuk upload program blinking yang ada pada bahagian examples. Code pada example akan diubah menjadi seperti berikut :

/*
To upload through terminal you can use: curl -F "image=@firmware.bin" esp8266-webupdate.local/update
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>

const char* host = "esp8266-webupdate";
const char* ssid = "........";
const char* password = "........";

ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;

void setup(void){

Serial.begin(115200);
Serial.println();
Serial.println("Booting Sketch...");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);

while(WiFi.waitForConnectResult() != WL_CONNECTED){
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}

MDNS.begin(host);

httpUpdater.setup(&httpServer);
httpServer.begin();

MDNS.addService("http", "tcp", 80);
 Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
 
 Serial.println("atau");
 Serial.print("http://");
 Serial.print(WiFi.localIP());
 Serial.println("/update\n");
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
}

void loop(void){
httpServer.handleClient();

digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is acive low on the ESP-01)
delay(1000); // Wait for a second
digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off by making the voltage HIGH
delay(2000);
}

  • Compile code ini dan dapatkan .bin file

  • Buka web browser dengan url untuk update. Klik choose file dan pilih .bin file. Seterusnya klik update.
  • Setelah selesai anda akan dapati led berkelip. Dan boleh buka web browser dan url untuk update sketch yang lain pula.

Sekian dulu.

Selamat mencuba.

Sharing is caring!

Categories: ArduinoESP8266