ESP8266 - OTA

آموزش کار با ESP8266 – OTA

در این مطلب به قابلیت OTA در ماژول ESP8266 خواهیم پرداخت. OTA یا Over The Air Updates که میشه گفت، آپدیت کردن برنامه‌ای که داخل ESP8266 قرار داده‌ایم، بدون اتصال سخت افزاری آن به کامپیوتر. در این روش برنامه‌ی ما از طریق خود وایفای آپدیت می شود. با بکار بردن OTA کار کردن با ESP8266 کمی جذاب‌تر می‌شود.

آپلود کردن نرم افزار و آپدیت آن از طریق پورت سریال، وقتی که به پینهای ESP8266 دسترسی داریم، خیلی هم خوبه. ولی وقتی پروژه‌ی ما تمام شده. و ما آنرا داخل جعبه و یا محفظه‌اش قرار داده‌ایم، مشکل است. فرض کنید بخواهید باگی را بر طرف کنید.

برای این کار از آپدیت کردن برنامه از طریق OTA استفاده می‌کنیم. تنها بدیه این کار این است که کتابخانه و کدهای مربوط به آنرا باید اول همه‌ی برنامه‌های خود اضافه کنیم. و همچنین به حافظه‌ای دو برابر از حجم برنامه‌ی خود احتیاج داریم. چون نمی‌تواند وقتی برنامه قبلی دارد اجرا می‌شود،روی آن برنامه‌ی جدید ذخیره کند.

نمونه کدی از OTA

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);     // Create an instance of the ESP8266WiFiMulti class, called 'wifiMulti'

const char* ssid = "SSID";
const char* password = "PASSWORD";
const byte led = 2;
void setup() {
  Serial.begin(115200);         // Start the Serial communication to send messages to the computer
  delay(10);
  Serial.println('\n');

  //Constant IP for Local WiFi
  IPAddress ipWiFi(192, 168, 1, 22);
  IPAddress gatewayWiFi(192, 168, 1, 249);
  IPAddress subnetWiFi(255, 255, 255, 0);

  WiFi.config(ipWiFi, gatewayWiFi, subnetWiFi);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  
    }
  Serial.println(F("Local WiFi Connected"));
  
  ArduinoOTA.setHostname("ESP8266");
  ArduinoOTA.setPassword("esp8266");

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

  pinMode(led, OUTPUT);
  digitalWrite(led, 1);
}

unsigned long previousTime = millis();

const unsigned long interval = 500;

void loop() {
  ArduinoOTA.handle();
  unsigned long diff = millis() - previousTime;
  if(diff > interval) {
    digitalWrite(led, !digitalRead(led));  // Change the state of the LED
    previousTime += diff;
  }
}

کافیه اسم مودم و رمز آنرا داخل برنامه قرار دهید و آنرا آپلود کنید. بعد از آن برنامه را ریستارت کنید. البته در بعضی مواقع نیازی نیست. حالا به این قسمت از منو رفته Tools>Port . حالا شما گزینه‌ی جدیدی خواهید دید که با IP ماژول شما یکی است. آنرا انتخاب کنید. توجه کنید که وقتی برنامه را آپلود کنید آین گزینه فعال می شود.

ESP8266 – OTA

خب حالا قسمتی از برنامه را تغییر دهید. مثلا متغیر interval را از 500 به 1000 تغییر دهید. حال برنامه را از طریق WiFi آپلود کنید. از شما پسوردی می خواهد. اگه نوجه کنید این پسورد را در خط 29 مشخص کردیم. اگر می‌خواهید بدون پسورد آپلود کنید، می‌توانید این خط را پاک کنید. وقتی که برنامه آپلود شد می‌بینید که LED اینبار با سرعت کمتری چشمک می‌زند.

Serial Monitor OTA

متاسفانه در این حالت امکان مانیتور وجود ندارد.

دیدگاه ها :

من بات نیستم

  1. reza nasiri گفت:

    خیلی سایت مفیدی است

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *