فرض کنید با استفاده از NodeMcu و یا ESP8266 یک پروژه اینترنت اشیاء ساختهاید و آن را در نقاط مختلف کره زمین نصب کردهاید! همه چیز دارد به خوبی کار میکند تا اینکه ناگهان سرو کله یک باگ توی پروژتون پیدا میشه یا به هر دلیلی تصمیم میگیرید اون ها رو بروزرسانی (آپدیت) کنید. خوب چه باید کرد؟ یا باید خودتون برید همشونو جمع کنید و یا به مشتری یا نمایندتون یه فایل بدید و بگین برو آپدیتشون کن! که هر دو روش هم خیلی هزینه بر هست و هم دردسرهای خودش رو داره. توی این پست میخوام بهتون یاد بدم چجوری میتونید آنلاین و از طریق اینترنت، برنامه (فریمور) دستگاه ESP8266 رو مجدداً برنامه ریزی (پروگرام) کنید تا بروز رسانی بشه!
باما همراه باشید.
مختصری در مورد نحوه بروز رسانی
در اینترنت اشیاء و بسیاری از پروژههای دیگر، از NodeMcu یا ESP8266 استفاده شده.در مورد OTA قبلاً مطلبی در سایت منتشر شده که پیشنهاد میکنم اون رو هم حتماً ببینید. توی این روش، در واقع شما با از استفاده از OTA، کابل سیمی و فیزیکی رو حذف میکنید و به جای اون آنلاین و از طریق وای فای بردتون رو برنامه ریزی میکنید.
در این روش، اول باید از طریق کامپیوتر برد رو انتخاب کنید و فایل رو روی اون انتقال بدید. حالا اگه دستگاهتون داخل شبکه محلی نباشه، دسترسی بهش به این سادگی نیست. همین طور اگه شما تعداد زیادی از این بردها رو داشته باشید، پروگرام کردن دونه به دونه ی همشون خیلی زمان می گیره. توی روشی که امروز میخوام بهتون آموزش بدم، شما میتونید همزمان برنامه تعداد بسیار زیادی از برد هاتون رو از راه دور بروز رسانی کنید. حتی لازم نیست دونه دونه بهشون خبر بدید، چون خودشون از وجود برنامه جدید مطلع میشوند و خودشون رو بروز رسانی میکنند! (دیگه چی بهتر از این میخوای؟!)
نحوه کار به این صورت هست که ابتدا یک سرور برای نگه داری و مدیریت فایلهای برنامتون راه اندازی میکنید و آدرس سرور رو به برد هاتون میدید. بعد برد هاتون در فواصل زمانی مشخص (مثلاً روزی یه بار) یا در مواقع خاص (مثل هنگام روشن شدن دستگاه) سرور رو برای وجود بروز رسانی جدید چک میکنن. اگر نسخه (ورژن) جدیدتری برای بروز رسانی وجود داشت، اون رو دانلود و روی خودشون پروگرام میکنن!
مقاله های پیشنهادی:
مدیریت و اتصال همزمان به چند وای فای درESP8266
نصب ماژول ESP8266 و ESP32 در ویرایشگر آردینو
پروژه راهاندازی سنسور دمای DS18b20 با NodeMcu
در سه سوت به وای فای متصل شویم – ESP8266
دیگر پروژه های رایگان ESP8266ESP
مرحله اول – بدست آوردن فایل باینری پروژه
در این مثال ساده، ما میخواهیم برنامه چشمک زن را از طریق اینترنت بر روی برد ESP8266 بریزیم. برای این کار، ابتدا شما زیر را در آردوینو باز کنید:
void setup() { pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Note that LOW is the voltage level // but actually the LED is on; this is because // it is active low on the ESP-01) delay(1000); // Wait for a second digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off by making the voltage HIGH delay(2000); // Wait for two seconds (to demonstrate the active low LED) }
توجه داشته باشید که چراغ روی برد ESP8266، بهصورت Active Low میباشد. یعنی برای روشن شدن آن، باید صفر منطقی و برای خاموش شدن یک منطقی دریافت کند. (یعنی کاملاً برعکس و NOT ورودی)
توی محیط آردوینو به راحتی و از طریق منوی زیر میتونید پروژتون رو کامپایل کنید و فایل باینری اون رو بهدست بیارید:
Sketch -> Export Compiled Binary
توجه داشته باشید که حتماً پروژه خود را باید در محل مناسبی ذخیره کرده باشید. در این صورت در پوشه پروژه فایل bin. ذخیره خواهد شد.
مرحله دوم – آپلود فایل بر روی سرور
شما به یک سرور یا هاست آنلاین نیاز دارید که فایلهای بروز رسانی را درون آن نگه داری کنید. حتی میتوانید یک رزبری پای یا کامپیوتر خوردتان را به سرور تبدیل کنید. اما دقت داشته باشید که این سرور همیشه باید به اینترنت متصل باشد و همه جای دنیا بتوان به آن متصل شد. پس احتمالاً شما به یک آی پی ثابت یا یک دامنه هم نیاز خواهید داشت. توی این آموزش خیلی نمیخواهم وارد مباحث فنی سرور و… بشم، اما خلاصه اینکه اون فایل رو هر جایی که آپلود میکنید، بتونید با یک لینک مستقیم دانلودش کنید. نکته مهم اینه که حتماً باید آدرس فایل بروزرسانی ESP با http شروع بشه.
مرحله سوم – پروگرام کردن ESP
برای اینکه پروژه ESP8266 شما بتواند خود را آنلاین از طریق اینترنت بروز رسانی کند، مسلماً به دسترسی به اینترنت نیاز خواهد داشت. این دسترسی در ESP8266 از طریق اتصال به یک مودم وای فای میسر خواهد شد. بنابراین شما ابتدا باید نام وای فای و رمز عبور خود را در برنامه وارد کنید:
#ifndef APSSID #define APSSID "اسم وای فای شما" #define APPSK "رمز وای فای" #endif
همچنین لینک مستقیم فایل باینری را خط 83 برنامه زیر تغییر بدید:
/** httpUpdate.ino Created on: 27.11.2015 */ #include <Arduino.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #include <ESP8266httpUpdate.h> #define USE_SERIAL Serial #ifndef APSSID #define APSSID "اسم وای فای" #define APPSK "رمز وای فای" #endif ESP8266WiFiMulti WiFiMulti; void setup() { USE_SERIAL.begin(115200); // USE_SERIAL.setDebugOutput(true); USE_SERIAL.println(); USE_SERIAL.println(); USE_SERIAL.println(); for (uint8_t t = 4; t > 0; t--) { USE_SERIAL.printf("[SETUP] WAIT %d...\n", t); USE_SERIAL.flush(); delay(1000); } WiFi.mode(WIFI_STA); WiFiMulti.addAP(APSSID, APPSK); } void update_started() { USE_SERIAL.println("CALLBACK: HTTP update process started"); } void update_finished() { USE_SERIAL.println("CALLBACK: HTTP update process finished"); } void update_progress(int cur, int total) { USE_SERIAL.printf("CALLBACK: HTTP update process at %d of %d bytes...\n", cur, total); } void update_error(int err) { USE_SERIAL.printf("CALLBACK: HTTP update fatal error code %d\n", err); } void loop() { // wait for WiFi connection if ((WiFiMulti.run() == WL_CONNECTED)) { WiFiClient client; // The line below is optional. It can be used to blink the LED on the board during flashing // The LED will be on during download of one buffer of data from the network. The LED will // be off during writing that buffer to flash // On a good connection the LED should flash regularly. On a bad connection the LED will be // on much longer than it will be off. Other pins than LED_BUILTIN may be used. The second // value is used to put the LED on. If the LED is on with HIGH, that value should be passed ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW); // Add optional callback notifiers ESPhttpUpdate.onStart(update_started); ESPhttpUpdate.onEnd(update_finished); ESPhttpUpdate.onProgress(update_progress); ESPhttpUpdate.onError(update_error); t_httpUpdate_return ret = ESPhttpUpdate.update(client, "لینک مستقیم به فایل روی سرور"); // Or: //t_httpUpdate_return ret = ESPhttpUpdate.update(client, "server", 80, "file.bin"); switch (ret) { case HTTP_UPDATE_FAILED: USE_SERIAL.printf("HTTP_UPDATE_FAILD Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); break; case HTTP_UPDATE_NO_UPDATES: USE_SERIAL.println("HTTP_UPDATE_NO_UPDATES"); break; case HTTP_UPDATE_OK: USE_SERIAL.println("HTTP_UPDATE_OK"); break; } } }
برنامه بالا را بر روی برد خود آپلود کنید و از طریق پنجره سریال، مراحل اتصال به وای فای و بروز رسانی را دنبال کنید!
حال باید برد ESP8266 شما بهصورت آنلاین بروز رسانی شده و به حالت چشمک زن در آمده باشد!
این یک نمونه برنامه بود که شما از طریق آن توانستید فریمور بردتان را بروز رسانی کردید. اما در یک پروژه واقعی، باید نکات خیلی زیادی را در نظر داشته باشید. برای مثال در همین پروژه، بعد از اینکه بردتان بهصورت چشمک زن در آمد، دیگر نمیتوانید از طریق اینترنت آن را بروز کنید! پس در هنگام بروز رسانی بردها، به این نکته دقت داشته باشید که قابلیت آپدیت از طریق راه دور را به برنامه جدید نیز اضافه کرده باشید! همچنین ملاحظات دیگه ای که بسته به پروژتون باید رعایتشون کنید.
منبع : سیسوگ