جدیترین مقالات

ESP32 Basic Over The Air (OTA) برنامه نویسی در Arduino IDE

یکی از بهترین ویژگی های ESP32 این است که سیستم عامل آن را می توان به صورت بی سیم به روز کرد. این نوع برنامه نویسی “Over-The-Air” (OTA) نامیده می شود.

برنامه نویسی OTA در ESP32 چیست؟

برنامه نویسی OTA به شما امکان می دهد بدون نیاز به اتصال ESP32 از طریق USB به رایانه، یک برنامه جدید را از طریق Wi-Fi در ESP32 آپدیت یا آپلود کنید.

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

یکی از مزیت های کلیدی OTA این است که یک مکان مرکزی می تواند به روز رسانی را به چندین ESP در یک شبکه ارسال کند.

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

راه های پیاده سازی OTA در ESP32

دو راه برای پیاده سازی عملکرد OTA در ESP32 وجود دارد.

  • OTA اولیه – به روز رسانی ها با استفاده از Arduino IDE ارائه می شوند.
  • Web Updater OTA – به روز رسانی ها از طریق یک مرورگر وب ارائه می شوند.

هر کدام مزایای خاص خود را دارند، بنابراین می توانید از هر کدام که برای پروژه خود بهترین کار را دارد استفاده کنید.

این آموزش شما را در فرآیند پیاده سازی Basic OTA راهنمایی می کند. اگر می خواهید در مورد به روز رسانی وب OTA بیشتر بدانید، لطفاً از این آموزش دیدن کنید.

3 مرحله ساده برای استفاده از OTA پایه با ESP32

  1. نصب سری Python 2.7.x: اولین قدم این است که سری Python 2.7.x را بر روی رایانه خود نصب کنید.
  2. Uploading Basic Firmware OTA Serial: طرحی حاوی سیستم عامل OTA را به صورت سریال آپلود کنید. این یک مرحله ضروری برای انجام به‌روزرسانی‌های بعدی از طریق هوا است.
  3. آپلود طرح جدید از طریق هوا: اکنون می توانید طرح های جدید را از طریق آردوینو IDE از طریق هوا در ESP32 آپلود کنید.

مرحله 1: سری Python 2.7.x را نصب کنید

برای استفاده از قابلیت OTA، ابتدا باید Python 2.7.x را نصب کنید، اگر قبلاً روی دستگاه شما نصب نشده است. Python 2.7.x را برای ویندوز (نصب کننده MSI) از وب سایت رسمی Python دانلود کنید .

Download Python 2.7.x Series 1 1

نصب کننده را راه اندازی کنید و از طریق جادوگر نصب ادامه دهید.

Install Python 2.7.x Series On PC 1 1

مطمئن شوید که گزینه “Add python.exe to Path” در بخش Customize Python 2.7.X فعال باشد.

Enable Add Python.exe to Path While Python Installation 1 1

مرحله 2: سیستم عامل اصلی OTA را به صورت سریال آپلود کنید

از آنجایی که تصویر کارخانه ESP32 فاقد قابلیت OTA Upgrade است، ابتدا باید سیستم عامل OTA را از طریق رابط سریال بر روی ESP32 بارگذاری کنید.

برای انجام به‌روزرسانی‌های بعدی، ابتدا باید سفت‌افزار را به‌روزرسانی کنید.

افزونه ESP32 برای Arduino IDE شامل یک کتابخانه OTA و همچنین یک نمونه BasicOTA است. به سادگی به File > Examples > ArduinoOTA > BasicOTA بروید .

Open ESP32 BasicOTA Sketch In Arduino IDE 1 1

قبل از شروع آپلود طرح، باید دو متغیر زیر را با اعتبار شبکه خود تغییر دهید تا ESP32 بتواند به شبکه موجود متصل شود.

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

وقتی کارتان تمام شد، ادامه دهید و طرح را آپلود کنید.

#include <WiFi.h>
#include <ESPmDNS.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 3232
  // ArduinoOTA.setPort(3232);

  // Hostname defaults to esp3232-[MAC]
  // ArduinoOTA.setHostname("myesp32");

  // 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);
    })
    .onEnd([]() {
      Serial.println("\nEnd");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .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();
}

اکنون، مانیتور سریال را با نرخ باود 115200 باز کنید و دکمه EN را در ESP32 فشار دهید. اگر همه چیز خوب است، باید آدرس IP پویا اختصاص داده شده توسط روتر خود را ببینید. آن را یادداشت کنید.

Note Down IP Address Allotted to ESP32 2 2

مرحله 3: طرح جدید را در هوا آپلود کنید

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

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

به عنوان مثال، یک طرح ساده Blink را در کد Basic OTA قرار می دهیم. به یاد داشته باشید که متغیرهای SSID و رمز عبور را با اعتبار شبکه خود تغییر دهید.

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

#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

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

//variabls for blinking an LED with Millis
const int led = 2; // ESP32 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 3232
  // ArduinoOTA.setPort(3232);

  // Hostname defaults to esp3232-[MAC]
  // ArduinoOTA.setHostname("myesp32");

  // 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);
    })
    .onEnd([]() {
      Serial.println("\nEnd");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .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()عملکرد برای چشمک زدن LED استفاده نکرده ایم. این به این دلیل است که delay()تابع برنامه را متوقف می کند. اگر درخواست OTA بعدی ایجاد شود در حالی که ESP32 در انتظار delay()تکمیل شدن است، برنامه شما آن درخواست را از دست خواهد داد.

پس از کپی کردن طرح بالا در آردوینو IDE خود، به گزینه Tools > Port بروید . به دنبال چیزی مانند: esp32-xxxxxx در your_esp_ip_address بگردید . اگر نمی توانید مکان آن را پیدا کنید، ممکن است لازم باشد IDE خود را مجددا راه اندازی کنید.

Select OTA Port in Arduino IDE 1 1

پورت را انتخاب کنید و دکمه آپلود را فشار دهید. طرح جدید در عرض چند ثانیه آپلود خواهد شد. LED روی برد باید شروع به چشمک زدن کند.

ESP32 Onboard LED Blinking 1 1

ترجمه از https://lastminuteengineers.com/esp32-ota-updates-arduino-ide/

WhatsApp
Email
LinkedIn

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

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