No ribet-ribet club, Arduino IDE Over The Air (OTA) Programming. Upload program Arduino IDE ke ESP Board via wifi

Upload program Arduino IDE ke ESP 8266 melalui wifi

Upload program Arduino IDE ke ESP Board via wifi

Saat kita melakukan rancang hardware berbasis mikrokontroller, kita harus memikirkan interface yang menghubungkan perangkat dengan computer untuk melakukan upload program. Nah dengan fitur OTA programming ini kita dapat melupakan hal tersebut sehingga desain hardware kita akan lebih compact dan praktis.

OTA programming memungkinkan kita untuk memperbarui/mengupload program baru ke ESP8266 melalui Wi-Fi tanpa harus menghubungkan ESP8266 ke komputer melalui USB. Fungsionalitas OTA berguna saat tidak ada akses fisik ke modul ESP. Selain itu, ini mengurangi waktu yang diperlukan untuk memperbarui setiap modul ESP selama pemeliharaan.

Salah satu keunggulan utama OTA adalah kita dapat mengirim pembaruan ke beberapa ESP di jaringan yang sama melalui satu lokasi terpusat (lebih praktis dan efisien). Sementara itu untuk kelemahanny adalah kita harus menyertakan kode OTA di setiap skech program yang akan kita upload (untuk penggunaan OTA di pembaruan berikutnya), kode OTA ini pastinya akan memberikan tambahan penggunaan memory.

Requirement*

Untuk menggunakan fitur OTA ini, pastikan telah menginstal Python 2.7.x terlebih dahulu. Apabila belum, maka install terlebih dahulu. Kamu dapat download installernya disini https://www.python.org/downloads/release/python-2714/ (Versi Python 2.7.14)

1. Upload program OTA secara USB/serial

Fitur OTA ini sebenarnya dapat digunakan di beberapa perangkat/board yang sudah memiliki kemampuan untuk terhubung ke jaringan internet seperti ESP8266, ESP32, Arduino MKR 1000, Arduino Yun, dll. Nah untuk contoh kali ini, saya menggunakan ESP8266 ya.  Secara default, ESP8266 tidak memiliki kemampuan OTA, Kita harus mengupload program OTA ke ESP8266 terlebih dahulu melalui downloader USB/Serial.

Basic program OTA dapat kita temukan di Examples Sketch dari library OTA. Pertama, pastikan board yang akan digunakan (dengan memilih board esp8266). Setelah itu buka contoh programnya di File > Examples > ArduinoOTA > BasicOTA

Cara Upload program ESP8266 via wifi

Cara Upload program ESP8266 via wifi

Nah, Sebelum kita mengupload programnya, pastikan kita telah menyesuaikan dua variabel terkait dengan konektivitas Wifi (SSID dan Password) sehingga ESP8266 dapat terhubung ke jaringan yang ada. Sebagai contoh:

#ifndef STASSID
#define STASSID "WIFI-BERKAH"    //nama Hostpot wifi
#define STAPSK  "Arducoding@123" //password wifinya
#endif

Setelah selesai menyesuaikan variable tersebut, maka program dapat sudah dapat diupload (via COM ya..). Secara umum programnya akan terlihat seperti ini:

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

#ifndef STASSID
#define STASSID "WIFI-BERKAH"    //nama Hostpot wifi
#define STAPSK  "Arducoding@123" //password wifinya
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

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("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else {  // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    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();
}

Sekarang, buka Serial Monitor, setting baud rate  ke 115200 dan tekan tombol RST pada ESP8266 ((untuk restart  perangkat). Jika tidak ada masalah maka kita  akan melihat alamat IP dari perangkat ESP8266 yang diberikan oleh router/Akses point. Nah, alamat ini nantinya yang akan digunakan sebagai tujuan kita untuk mengupload program selanjutnya.

Cara Upload program ESP8266 via wifi

2. Upload program secara OTA

Hal yang perlu diperhatikan adalah bahwa kita harus menyertakan kode OTA di setiap sketch program yang akan kita upload. Jika tidak, maka kita akan kehilangan kemampuan OTA dan tidak dapat melakukan upload program over-the-air berikutnya. Oleh karena itu, disarankan agar kita selalu menertakan kode basic OTA ini di setiap program yang kita tulis untuk proses upload selanjutnya.

Sebagai contoh, kita akan mengupload program sederhana led blink. Maka kita harus menyisipkan kode OTA kedalam kode program Blink tersebut. Sehingga kurang lebih programnya akan seperti berikut ini.

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

#ifndef STASSID
#define STASSID "WIFI-BERKAH"    //nama Hostpot wifi
#define STAPSK  "Arducoding@123" //password wifinya
#endif

const char* ssid = STASSID;
const char* password = STAPSK;
const int LED = D0; // onboard LED di ESP8266

void setup() {
  pinMode(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(5000);
    ESP.restart();
  }

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

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

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else { // U_FS
      type = "filesystem";
    }

    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
    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(LED, HIGH);delay(1000); digitalWrite(LED, LOW); delay(1000);                      
  digitalWrite(LED, HIGH);delay(100); digitalWrite(LED, LOW); delay(100);
  digitalWrite(LED, HIGH);delay(100); digitalWrite(LED, LOW); delay(100); 
  digitalWrite(LED, HIGH);delay(100); digitalWrite(LED, LOW); delay(100);  
}

Selanjutnya mari kita Upload program tersebut via OTA. Pilih board yang akan menjadi tujuan melalui menu Tools > port > pilih ip perangkat. Klik tombol upload

Cara Upload program ESP8266 via wifi

Cara Upload program ESP8266 via wifi

Ok, jadi udah ada banyangan ya, fitur OTA ini akan sangat membantu sekali saat kita punya hardware stand alone yang sedang dalam uji coba (sering ubah konfig dan data pada program, sehingga kita akan sering melakukanupload program). Dengan demikian kita udah gak perlu lagi tuh copot-colok copot-colok kabel usb ke perangkat.  

SIP.. Segitu dulu untuk sharingnya, semoga bermanfaat. Salam olahraga