مقدمه
تقریبا میتوان گفت که همه ما با گوشیهای هوشمند ازجمله سامسونگ و اپل و… کار کردهایم اگر دقتکنید گاهیاز اوقات شرکت سازنده یک Notification با مضمون Software Update را برای ارسال کرده است که اگر روی آن کلیک کنید شما را به بخش تنظیمات هدایت میکند و درنهایت از شما جهت آپدیت دستگاه اجازه میخواهد که اگر این اجازه داده شود سیستم بهطور خودکار ورژن جدید اندروید را برای گوشیهای سامسونگ و ورژن جدید IOS را برای گوشیهای اپل و بقیه سیستمعاملها را برای گوشی خاص خود آن سیستم عامل، نصب میکند. حال سوالاتی که ممکناست برای علاقهمندان در این حوزه پیش بیاید به احتمال قریب به یقین شامل موارد زیر هستند:
- OTA چیست؟
- پروتکل ارتباطی چیست؟
- آیا بودن اینترنت ضروری است؟
- آیا میتوان از این تکنولوژی در سیستمهای الکترونیکی خود استفاده کنیم؟ اگر میتوان به چه صورتی باید این کار را انجام دهیم؟
… در این مقاله میخواهیم به این سوالات پاسخدهیم و درنهایت یک مثال کاملا عملی را با NodeMcu برای درک بهتر مبحث پیادهسازی کنیم.
OTA چیست؟
OTA مخفف Over-The-Air است. تمام عمليات بيسيمي که در شبکه بدوناستفاده از کابل انجامشود را OTA میگويند. اگر اين امکان براي بروزرساني نرمافزار پايهاي گوشي استفادهشود، (FOTA (Firmware Over-The-Air نيز خوانده ميشود.
حال اگر بخواهیم برای یک سیستم الکترونیکی OTA را تعریفکنیم میگوییم آپلود کردن کد بدوناستفاده از سیم و یا کابل را OTA میگوییم حال سوالی که ممکناست پیش بیاید این است که، کاربرد این تکنولوژی چیست؟ اجازهدهید آن را با شرح یک مثال توضیحدهیم فرضکنید دستگاهی تحت عنوان ردیاب خودرو درست کردهاید و این دستگاه هم بین هزاران نفر پخش شده است و طبق دستور کارفرما باید فریمور دستگاهها را به ورژن جدید آپدیت کنید خب در اینجا راهحل چیست؟ در اینجا پاسخ افراد به دو دسته تقسیم میشود. دسته اول: امکان ندارد چون محصولات دست مشتری است. دسته دوم: این کار امکانپذیر است راهحلی که بیان میکنند استفادهاز OTA است که بهراحتی میتوانند این کار را انجامدهند. خب تا اینجا تقریبا میتوان گفت که با مفهوم کلی OTA آشنا شدیم.
پروتکل ارتباطی چیست؟
پروتکلی که در این سری از ارتباطات استفاده میشود پروتکل سریال است که بهصورت یک پکتهای دیتایی که تعیین میکنیم و درنهایت توسط IP موردنظر دیتا را ارسال میکنیم و درصورتیکه دیتا موردنظر بهدرستی ارسالشود و هیچ مشکلی در روند ارسال وجود نداشته باشد سیستم نیز به شما اصطلاحا ACK ارسال میکند به این معنی که دیتا بهدرستی تحویلداده شدهاست.
آیا بودن اینترنت ضروری است؟
بله درحالحاضر این تکنولوژی با وجود اینترنت کار میکند البته اگر هدف پوشش سراسری باشد اما اگر هدف پیادهسازی سیستم در یک مجموعه خاص باشد میتوان از حالت شبکه محلی هم استفادهکرد و همینطور که گفتیم در این حالت شما محدودیت دارید که البته بسته به نوع پروژه باید شبکه محلی یا سراسری آنرا مشخص کرد.
آیا میتوان از این تکنولوژی در سیستمهای الکترونیکی خود استفادهکنیم؟ اگر میتوان به چه صورتی باید این کار را انجام دهیم؟
بله این کار کاملا شدنی است و میخواهیم در ادامه به راهاندازی این سیستم با NodeMcu بپردازیم.
راهاندازی OTA با NodeMcue
خب پساز اینکه یک آشنایی نسبی با این تکنولوژی پیدا کردیم نیاز است که برای درک بهتر آن را راهاندازی کنیم. برای راهاندازی این سیستم نیاز است که ابتدا مراحل زیر را انجام دهیم.
- تهیه NodeMcu
- نصب Arduino IDE
- نصب کتابخانه NodeMcu
- برنامه نویسی NodeMcu در محیط آردوینو
نصب کتابخانه NodeMcu
برای نصب کتابخانه NodeMcu ابتدا عبارت ” nodemcu arduino library ” را سرچ میکنیم و اولین لینکی که وجود دارد را باز میکنیم که مربوط به سایت Github میباشد.
سپس وارد سایت میشویم دقت کنید که از این صفحه چیزی را که نیاز داریم شامل آدرس زیر است که این آدرس را باید کپی کنیم و درنهایت وارد محیط IDE خود شویم و طبق تصاویر زیر عمل میکنیم:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
حال باید بهصورت شکلزیر عملکنیم.
خب حالا نوبت به چککردن این موضوع رسیده است که آیا کتابخانههایی که مدنظرما بودهاست نصب شدهاند یا خیر؟
بله همانطوریکه مشاهد کردید کتابخانههایی که مدنظرما بودهاست نصب شدهاند. خب حالا نوبت به بخش برنامهنویسی ماژول رسیده است.
برنامهنویسی NodeMcu در محیط آردوینو
برای این کار ابتدا باید به شکل زیر عمل کنیم.
پساز اینکه طبق تصاویر بالا کارهایی که گفته شد را انجامدادید نوبت به آپلود کد زیر میرسد.
#include <ESP8266WiFi.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> // Replace with your network credentials const char* ssid = "YOUR_SSID"; اسم وای فای خود را بنویسید const char* password = "YOUR_PASSWORD"; پسورد وای فای خود را وارد کنید. تا سیستم بتواند به IP محلی متصل شود 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((const char *)"123"); 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(); }
اما نکتهای که است به احتمال زیاد درهنگام آپلود کد روی NodeMcu با خطایی تحتعنوان اینکه کتابخانهها تعریف نشدهاند برخورد کنید که هیچ جای نگرانی نیست و بهراحتی بااستفادهاز روندی که کتابخانه OTA را نصبکردیم برای بقیه کتابخانهها هم همین روند را انجامدهید بهطورمثال اگر کتابخانه esp8266 را روی سیستم خود نصب نکرده بودید فقط کافیاست که اسم آنرا در قسمتی که نام OTA را سرچ کردیم قراردهیم تا و درنهایت کتابخانه موردنظر را نصبکنیم. و همین روند را برای بقیه کتابخانهها میتوانید پیش بگیرید. خب پساز اینکه موفقشدید برنامه را درون NodeMcu موردنظر آپلود کنید باید در سریال مانیتور خود یک IP محلی مشاهده کنید مطابق تصویری که در ادامه قرار میدهیم.
اگر به این مرحله رسیدیم یعنی اینکه تا الان ما یک IP محلی را برای دستگاه خود اختصاص دادیم و از این به بعد برای اینکه بتوانیم با این دیوایس صحبتکنیم نیاز است که فقط با این IP اتصال برقرار کنیم تا این قسمت کار ما تمامشدهاست. حال میخواهیم برنامه چشمک زن را روی دیوایس مربوطه آپلود کنیم البته بدون سیم و درنهایت ببینیم که آیا دیوایس موردنظر کار میکند یا خیر؟ نظر شما چیست؟ برای این کار ابتدا NodeMcu خود را به یک پاور مجزای دیگر متصل میکنیم و درنهایت کد چشمک زن زیر را در IDE آردوینو مینویسیم و سپس برای آپلود کد بهصورت تصویر زیر عمل میکنیم.
#include <ESP8266WiFi.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> // Replace with your network credentials const char* ssid = "YOUR_SSID"; وارد کردن اسم وای فای const char* password = "YOUR_PASSWORD"; وارد کردن رمز عبور const int ESP_BUILTIN_LED = 2; 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((const char *)"123"); 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()); pinMode(ESP_BUILTIN_LED, OUTPUT); } void loop() { ArduinoOTA.handle(); digitalWrite(ESP_BUILTIN_LED, LOW); delay(1000); digitalWrite(ESP_BUILTIN_LED, HIGH); delay(1000); }
برای آپلودکردن کد هم باید بهصورتزیر عملکنیم.
دقتکنید که حتما آیپی موردنظر باید حتما و حتما یکی باشند درصورتیکه یکی نباشند این عمل بهدرستی صورت نخواهد گرفت و درنهایت برنامه آپلود نخواهد شد. اگر مراحلی را که گفتیم بهدرستی انجامدادهباشید الان برد NodeMcu شما باید چراغ تست آن بهصورت چشمک زن عملکند. خب خستهنباشید شما موفقشدید که بهراحتی اولین پروژه OTA خود را انجامدهید فقط این نکته را هم بگوییم که با کمی خلاقیت در پروژههای بسیار زیادی میتوانید از این تکنولوژی استفادهکنید یا بهعبارتدیگر پروژهها همگی دارند سمت و سوی OTA محور میگیرند که توصیه میکنیم این مبحث را بهطورجدی دنبال و سعی کنید که آنرا در پروژههای خود حتی چشمک زدن یک LED ساده بهکار گیرید.
امیدوارم که این آموزش هم برای شما مخاطبین عزیز مفید واقعشدهباشد.
منبع: سیسوگ