OTA (Over The Air) dengan Node MCU

Assalamualaikum!!!
Setelah sekian lama mengembara, nulis cuman disimpen di folder gak di revisi dan gak pernah di posting, akhirnya saya tobat xD. Mulai mendisiplinkan diri untuk rajin lagi dokumentasi.

Oke, sekarang saya akan share tentang OTA
OTA atau Over The Air adalah cara yang mumgkinkan kita untuk mengupdate program/firmware mikrokontroller dari internet! Ini akan sangat berguna saat kita bermain dengan IoT, dimana kebanyakan wireless, so we need the air as our wire. Tutorial ini menggunakan windows 10 (maafkan aku serena! Di kantor pakenya windows T.T, tutorial di linux next time kalau udah beli nodemcu sendiri yaa!) dan wifi module nya menggunakan nodeMCU, kali ini tanpa arduino ya karena nodeMcu udah ada mikrokontroller nya, jadi praktis banget.
tutorial ini bersumber dari link dibawah ini yang kemudian saya praktikan. Source .
Yang mau download versi PDF ada disini.
Langkah-langkahnya : 




1.Install python, versinya khusus yang 2.7, jangan salah download ya! Karena yang terbaru udah versi 3 an. Download di link ini
2.Pastikan saat install pilih “add to the path”
3.Setelah selesai, download library ArduinoOTA disini. Tetap simpan dalam zip.
4.Buka Arduino IDE, add .zip library.
5.Setelah berhasil diinstall, buka di IDE Arduino, file->example->ArduinoOTA->basicOTA
6.Ganti SSID dan password dengan jaringan yang tersedia. Ganti juga password OTA nya.
7.Upload nya ada beberapa yang perlu diatur, antara lain : board : pilih nodeMCU 9.0, flash : pilih 4MB, 3MB SPIFFS
8.Setelah upload selesai, reset nodeMCU, matikan powernya sebentar.
9.Koneksikan lagi NodeMCU dengan sumber daya, boleh dengan PC/powerbank.
10.Kali ini kita mulai OTA nya, dengan lihat pada port, apakah terdapat network port?? Kalau tidak ada, cek apakah NodeMCU dan PC kita dalam jaringan yang sama?
11.Jika ada, pilih port tersebut untuk upload.
12.Ubah program sesuai yang diinginkan kemudian Klik Upload!
13.Program akan meminta password board, ketikkan password OTA yang tadi telah kamu rubah
14.Tunggu sampai program selesai, lalu lihat program yang berubah!
15.OTA telah berhasil!


Berikut contoh program basicOTA yang saya modifikasi dengan menyalakan LED di pin 12 dan 13 dari nodeMCU

basicOTA.ino, uploading pertama dengan kabel/Comport :

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

const char* ssid = "AndroidAP";     //SSID dan pass dari jaringan mu!
const char* password = "madina12";
int led1 = 12;
int led2 = 13;

void setup() {
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);                  //Wifi sebagai station
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
ESP.restart();;                  //proses koneksi, jika gagal akan restart
  }
  // ArduinoOTA.setPort(8266);;             //jika membutuhkan port, aktifkan
  ArduinoOTA.setHostname("myesp8266"); //nama port yang akan muncul di network port, bisa ganti dengan apapun
  ArduinoOTA.setPassword((const char *)"aaaa");  //board password untuk uploading
  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");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
  digitalWrite(led1,HIGH);  //program LED
  digitalWrite(led2,HIGH);
  delay(1000); 


  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
  delay(1000);
}



Di program kedua yang di upload dengan OTA, saya hanya mengganti isi di void loop saja menjadi seperti ini:

void loop() {
  ArduinoOTA.handle();
  digitalWrite(led1,HIGH);  //program LED
  digitalWrite(led2,LOW);
  delay(1000);
  digitalWrite(led1,LOW);
  digitalWrite(led2,HIGH);
  delay(1000);
}
 



Di program kedua yang di upload dengan OTA, saya hanya mengganti isi di void loop saja menjadi seperti ini:

void loop() {
  ArduinoOTA.handle();
  digitalWrite(led1,HIGH);  //program LED
  digitalWrite(led2,LOW);
  delay(1000);
  digitalWrite(led1,LOW);
  digitalWrite(led2,HIGH);
  delay(1000);
}

 

Troubleshooting!
Saat upload, sering muncul 
10:56:16 [ERROR]: No response from device
Penganganan : 
1. Setelah di upload, di reset, cabut aja jumpernya.
2. Cek di koneksi, sudah terkoneksi atau belum. Sementara ujicoba saya menggunakan jaringan dari HP(tethering) dari sana dapat terlihat ada berapa device yang terkoneksi, kalau hanya satu berarti PC/nodeMCU ada yang belum terkoneksi, cek dulu yaa
3. Lalu lihat di port pada Arduino IDE, ada esp dan ip.
4.Cek flash yang digunakan, ternyata OTA butuh space, dia gak mau kalau menggunakan 512. Ganti ke 4MB 3MB SPIFFS.

Happy Trying!

0 komentar:

Posting Komentar

Total Tayangan Halaman

Search...