آموزش پروگرام کردن ماژول ESP8266 به صورت بی‌سیم

پروگرام کردن ماژول ESP8266 به صورت بی‌سیم با استفاده از IDE آردوینو

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

پروگرام کردن ماژول ESP8266 به روش OTA به چه معنی است؟

OTA امکان پروگرام کردن ماژول ESP8266 یا آپدیت کردن آن را با استفاده از وای‌فای فراهم می‌کند، بدون نیاز به اینکه کاربر ESP8266 را با USB به کامپیوتر متصل کند.

قابلیت OTA در شرایطی که دسترسی فیزیکی به ماژول ESP وجود نداشته باشد بسیار کاربردی است. این قابلیت زمان صرف شده برای آپدیت کردن ماژول‌های ESP را هنگام انجام عملیات تعمیر و نگهداری کاهش می‌دهد.

ویژگی مهم OTA این است که یک دستگاه مرکزی می‌تواند برای چندین ESP که در یک شبکه یکسان هستند آپدیت ارسال کند.

تنها نقطه ضعف روش بی‌سیم این است که در هر برنامه‌­ای که آپلود می­کنید باید یک تکه کد برای OTA اضافه کنید، به این شکل می‌توانید در آپدیت بعدی هم از OTA استفاده کنید.

سه گام ساده برای استفاده از OTA برای پروگرام کردن ESP8266

  1. نصب پایتون سری 2.7: ابتدا پایتون سری 2.7 را روی کامپیوتر خود نصب کنید.
  2. آپلود کردن برنامه Basic OTA به صورت سریال: برنامه‌ای که شامل OTA است را به صورت سریال آپلود کنید. این مرحله برای اینکه بتوانید آپدیت‌های بعدی را به صورت بی‌سیم انجام دهید، ضروری است.
  3. آپلود برنامه جدید به صورت OTA: حال می‌توانید برنامه‌های جدید را توسط IDE آردوینو به صورت بی‌سیم روی ESP8266 آپلود کنید.

گام 1: نصب پایتون سری 2.7

برای استفاده از قابلیت OTA، نیاز است نسخه­‌ی 2.7 پایتون را روی سیستم خود نصب کنید. برای دانلود این نسخه می­توانید به سایت رسمی Python مراجعه کنید.

دانلود پایتون سری 2.7 از سایت رسمی پایتون

فایل نصب را بازکرده و مراحل نصب را دنبال کنید.

نصب فایل پایتون دانلود شده برای پروگرام ماژول ESP8266

در بخش Customize Python 2.7.x، مطمئن شوید گزینه آخر Add python.exe to Path فعال باشد.

مطمئن شدن از تیک خوردن Add python.exe to Path قبل از نصب پایتون

گام 2: آپلود OTA به صورت سریال

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

برای اینکه بتوانید آپدیت‌­ها یا آپلودهای بعدی را به صورت بی‌­سیم انجام دهید، آپدیت اولیه برنامه یک گام ضروری است.

افزونه ESP8266 برای IDE آردوینو، یک کتابخانه OTA و یک مثال به نام BasicOTA دارد. شما می‌توانید از مسیر File> Examples> ArduinoOTA> BasicOTA Hk آن را پیدا کنید.

اضافه کردن کتابخانه OTA از مسیر File> Examples> ArduinoOTA> BasicOTA Hk
برای پروگرام کردن ESP8266

با انجام مراحل بالا کد زیر برای شما باز می‌شود، اما قبل از اینکه برنامه را آپلود کنید، باید تغییراتی انجام دهید تا برنامه برای شما کار کند. شما باید دو متغیر زیر را بر اساس مشخصات شبکه خود تغییر دهید تا ماژول ESP8266 بتواند به شبکه موجود متصل شود.

const char* ssid = "..........";
const char* password = "..........";

پس از انجام این کار، برنامه را آپلود کنید.

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

const char* ssid = "..........";
const char* password = "..........";

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

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH)
      type = "sketch";
    else // U_SPIFFS
      type = "filesystem";

    // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
    Serial.println("Start updating " + type);
  });
  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();
}

حال سریال مانیتور را باز کنید و بادریت (Baud Rate) را روی 115200 قرار دهید سپس دکمه RST روی برد ESP8266 را فشار دهید. اگر همه چیز درست باشد، آدرس آی‌پی پویایی که از روتر شما دریافت شده را خواهید دید. آن را یادداشت کنید.

نمایش آی‌پی پویا پس از تنظیم کردن بادریت و ریست کردن ESP8266

گام 3: آپلود برنامه جدید به صورت OTA

حال بیایید یک برنامه جدید را به صورت بی‌سیم آپلود کنیم.

به خاطر داشته باشید در هر برنامه‌ای که آپلود می‌کنید باید کد OTA را اضافه کنید. در غیر این صورت قابلیت OTA را از دست خواهید داد و نمی‌توانید آپلودهای بعدی را بصورت بی‌سیم انجام دهید، پس توصیه ما این است که کد بالا را تغییر داده و برنامه خود را به آن اضافه کنید.

برای مثال، یک برنامه چشمک زن ساده به کد Basic OTA اضافه کرده‌ایم. فراموش نکنید، متغیرهای SSID و پسورد را مطابق مشخصات شبکه خود تغییر دهید.

تغییرات برنامه Basic OTA به رنگ آبی هایلایت شده‌است.

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

const char* ssid = "..........";
const char* password = "..........";

//variabls for blinking an LED with Millis
const int led = D0; // ESP8266 Pin to which onboard LED is connected
unsigned long previousMillis = 0;  // will store last time LED was updated
const long interval = 1000;  // interval at which to blink (milliseconds)
int ledState = LOW;  // ledState used to set the LED

void setup() {
pinMode(led, OUTPUT);

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

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH)
      type = "sketch";
    else // U_SPIFFS
      type = "filesystem";

    // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
    Serial.println("Start updating " + type);
  });
  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();

//loop to blink without delay
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
  // save the last time you blinked the LED
  previousMillis = currentMillis;
  // if the LED is off turn it on and vice-versa:
  ledState = not(ledState);
  // set the LED with the ledState of the variable:
  digitalWrite(led,  ledState);
  }

}

توجه: در برنامه بالا، برای چشمک زدن ال ای دی از تابع تأخیر delay() استفاده نکرده‌ایم چون ESP8266 هنگام اجرای این تابع، برنامه شما را متوقف می‌کند. اگر درخواست OTA بعدی، هنگامی تولید شود که آردوینو متوقف شده و منتظر اتمام تابع تأخیر است، برنامه شما این درخواست را از دست خواهد داد.

پس از اینکه برنامه را در IDE آردوینو کپی کردید، به مسیر Tools > Port بروید. باید چیزی شبیه esp8266-xxxxxx at your_esp_ip_address ببینید. اگر نمی‌توانید آن را پیدا کنید، شاید نیاز باشد IDE خود را باز و بسته کنید.

انتخاب نتوورک پورت و کلیک بر گزینه upload از مسیر Tools > Port

پورت را انتخاب کنید و سپس دکمه Upload را بزنید. پس از چند ثانیه، برنامه جدید آپلود خواهد شد و باید ببینید که ال ای دی روی برد چشمک می‌زند.

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

مقالات مشابه

۴ دیدگاه. Leave new

  • سلام ایا به صورت اینترنتی این آپلود صورت میگیرد؟ یا باید هردو به یک شبکه وایفای وصل شوند؟

    پاسخ
    • سلام و درود،
      انتقال اطلاعات روی شبکه محلی صورت می‌گیره، بنابراین هر دو باید به یک شبکه متصل بشند.

      پاسخ
  • سلام
    خواستم بدونم پروگرام کردن esp32 wroom هم به این صورت امکان پذیر هست؟

    پاسخ
    • سلام دوست عزیز
      بله، البته نیازه به جای افزونه esp8266، افزونه esp32 رو در برنامه آردوینو نصب داشته باشید و برد رو درست انتخاب کنید، به جای دکمه RST هم دکمه EN رو فشار بدید.

      پاسخ

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات