در این مطلب به قابلیت 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 ماژول شما یکی است. آنرا انتخاب کنید. توجه کنید که وقتی برنامه را آپلود کنید آین گزینه فعال می شود.
خب حالا قسمتی از برنامه را تغییر دهید. مثلا متغیر interval را از 500 به 1000 تغییر دهید. حال برنامه را از طریق WiFi آپلود کنید. از شما پسوردی می خواهد. اگه نوجه کنید این پسورد را در خط 29 مشخص کردیم. اگر میخواهید بدون پسورد آپلود کنید، میتوانید این خط را پاک کنید. وقتی که برنامه آپلود شد میبینید که LED اینبار با سرعت کمتری چشمک میزند.
Serial Monitor OTA
متاسفانه در این حالت امکان مانیتور وجود ندارد.
خیلی سایت مفیدی است
ممنون از شما