No ribet-ribet club, Arduino IDE Over The Air (OTA) Programming. 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
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.
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
1 komentar