راه اندازی ESP8266 و تنظیم آی پی (IP) استاتیک و ثابت

تنظیم آی پی IP استاتیک (ثابت) روی ماژول ESP8266 Assign Static IP on ESP8266
نوشته شده توسط

سلام خدمت همه شما مایکروالکامی ها. در آخرین مطلب از مطالب مربوط به سری آموزش های ماژول های ESP822 به معرفی mDNS و تنظیم آن در ماژول های ESP8266 پرداخته شد. در این مطلب به نحوه اختصاص آی پی (IP) استاتیک یا ثابت روی ماژول های ESP8266 و کاربرد آن پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتویند سایر مطالب من رو از این لینک مطالعه و بررسی کنید.


مقدمه ای از تنظیم IP استاتیک در ESP8266

در کاربرد هایی که از ماژول ESP8266 / ESP32 بعنوان یک کلاینت استفاده می‌شود و آن را به یک روتر مثلا مودم متصل می‌کنیم، روتر یا مودم یک IP تحت عنوان Local IP به آن اختصاص خواهد داد. در این حالت کاربر با اتصال وایفای موبایل، لپ تاپ و… به ماژول ESP8266 و وارد کردن IP لوکال اختصاص یافته می‌تواند با مودم تبادل دیتا کرد. اما در این حالت باید توجه کرد که با هر بار راه اندازی مودم و ماژول ESP8266 یک IP تنظیم خواهد شد.

در این حالت هر بار کاربر باید IP جدید را خوانده و مراحل بعدی و فرایند کلی سیستم کنترلری را طی کند. عملا این کار توصیه نمی‌شود. برای رفع این نقص در کاربرد های مشابه 2 راه پیش رو داریم. در این مطلب از روش دوم استفاده خواهد شد و با تنظیم یک IP استاتیک در ESP دیگر نگران تغییر IP در هر کانکت شدن نخواهیم بود.

  • اول اختصاص یک IP ثابت به مک آدرس ماژول ESP8266 / ESP32 از داخل تنظیمات مودم. 
  • دوم اینکه با استفاده از چند خط کد از تغییر I‌P لوکال ماژول ESP8266 جلوگیری به عمل آوریم. 

قطعات مورد نیاز


تنظیم IP استاتیک (ثابت) روی ماژول ESP8266

کد های زیر را در Arduino IDE وارد کرده و آن را برروی ماژول ESP8266 خود آپلود نمایید. برای انجام پروگرام کردن ESP8266 نیز می‌توایند از این مطلب که قبلا در سایت آموزش داده شده است استفاده نمایید. در کد های زیر با استفاده از کتابخانه “ESPAsyncWebServer.h” یک لوکال سرور ایجاد کردیم که با وارد کردن IP متنی را مشاهده می‌کنیم.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ESPAsyncWebServer.h>

const char* ssid     = "SSID"; //نام مودم
const char* password = "Password"; //رمز مودم

AsyncWebServer server(80);  //نمظیم پورت 80 برای لوکال سرور

IPAddress local_IP(192, 168, 1, 184); //در اینجا IP ثابت مورد نظر خود را برای ماژول وارد کنید
IPAddress gateway(192, 168, 1, 1); //IP مودم یا روتر خود را وارد کنید که اکثر مودم ها برابر مقدار روبه رو است
IPAddress subnet(255, 255, 0, 0); //تنظیم Subnet MAsk مطابق روتر

void setup(void)
{
  Serial.begin(115200);
  if (!WiFi.config(local_IP, gateway, subnet)) //بررسی وضعیت کانفیگ کردن تنظیمات آی پی 
  {
    Serial.println("Failed to Configure"); //نمایش خطا درصورت عدم موفقیت آمیز بودن تنظیم آی پی استاتیک
  }
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password); //اتصال ماژول به مودم
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  // نمایش IP اختصاص یافته و شروع راه اندازی لوکال وب سرور
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

//ایجاد یک صفحه ساده و اول لوکال سرور و نمایش متن دلخواه
  server.on("/", [](AsyncWebServerRequest * request)
  {
    String message = "Hey people, in this tutorial at < Blog.microele.com > you will learn how to assign Static IP on ESP8266 module. So, Let's Get Started...";
    request->send(200, "text/plain", message); //نمایش پیام بالا 
  });

  server.begin();  //شروع به کار وب سرور
}


void loop(void)
{
}

قبل از وارد کردن کد های بالا، دقت کتید که توضیحات کامند شده در کد بالا را وارد نکنید.


مشاهده نتیجه

پس از آپلود کد های بالا روی ماژول ESP8266 و کانکت شدن آن به یک روتر/مودم وایفای، هر دستگاه متصل به این مودم با وارد کردن IP استاتیک (ثابت) اختصاص داده شده به ESP8266 در مرورگر خود، صفحه زیر را مشاهده خواهد کرد. (از من بپذیرید دیگه یکم متن مورد نمایش زیادی خارجی شد  😆 ).

ایجاد لوکال وب سرور روی ماژول ESP8266 با آی پی استاتیک
ایجاد لوکال وب سرور روی ماژول ESP8266 با آی پی استاتیک

بعد از آپلود کد اگر سریال مانیتور را باز نمایید صفحه ای مشابه زیر خواهید دید که از روند کاری ESP8266 خود مطلع خواهید شد. با انجام آموزش مطرح شده با کانکت کردن ماژول به هر مودم/روتر/هات اسپات، IP لوکال ماژول ثابت خواهد ماند.

تنظیم IP استاتیک (ثابت) روی ماژول ESP8266
تنظیم IP استاتیک (ثابت) روی ماژول ESP8266

نتیجه گیری

در این مطلب به نحوه تخصیص IP استاتیک یا ثابت به ماژول وایفای ESP8266 پرداخته شد که با این روش دیگر IP لوکال ماژول تغییر نخواهد کرد و نیاز به تغییر کد در هر پروژه نخواهیم داشت. امیدوارم از این آموزش کمال بهره را برده باشید. در صورت داشتن هرگونه نظر یا سوال درباره این مطلب یا تجربه مشابه اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو به اشتراک بگذارید تا سایر دوستان هم بتوانند استفاده کنند. همینطور میتونید این مطلب را توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.

۱۹ دیدگاه برای “راه اندازی ESP8266 و تنظیم آی پی (IP) استاتیک و ثابت

  1. سلام و عرض خسته نباشید
    نام ماژول esp8266 را هم می توانم تغییر دهم یا کلا بدون نام بمونه؟

      1. ببخشید سوالمو اینطور میپرسم
        میخواستم مک آدرس ماژول nodemcu با هسته esp8266 را تغییر دهم و مک آدرس اصلی ماژول نباشد.ضمنا پس از هر بار اتصال به مودم وایفای این مک آدرس جدید تغییر نکند.
        با تشکر

        1. سلام، میتونید MAC آدرس رو تغییر بدید. کد زیر رو بررسی کنید.

          #include

          void setup() {
          // Set the new MAC address
          uint8_t newMac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE};
          WiFi.macAddress(newMac);

          // Your setup code here
          Serial.begin(115200);
          }

          void loop() {

          }

  2. سلام مهندس کتابخانه ی async حتی example های خودش رو هم با ارور کومپایل میکنه مشکل کجا هست
    ممنون

  3. سلام
    تشکر از اموزش خوبتون
    اگر ممکنه اموزشی برای دسترسی از اینترنت به esp8266 بگذارید . مثلا مشاهده وضعیت یک کلید از اینترنت

  4. این ارور رو به من میده میشه کمکم کنید

    Arduino: 1.8.19 (Windows 10), Board: “NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200”

    In file included from C:\Users\amirreza\Desktop\nnn\nnn.ino:3:

    C:\Users\amirreza\Documents\Arduino\libraries\ESPAsyncWebServer-master\src/ESPAsyncWebServer.h:36:10: fatal error: ESPAsyncTCP.h: No such file or directory

    36 | #include

    | ^~~~~~~~~~~~~~~

    compilation terminated.

    exit status 1

    Error compiling for board NodeMCU 0.9 (ESP-12 Module).

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    یه کد دیگه هم روی بردم اپلود کردم مشکل از اردوینو نبود

    1. ظاهرا کتابخانه و فایل های ESPAsyncWebServer رو شناسایی نکرده ممکنه اشتباه نصب شده که حتما بررسی کنید.
      همینطور از انتخاب برد و مدل و COM اون در هنگام پروگرام اطمینان حاصل کنید.
      برد بدرستی وارد حالت پروگرام شده باشه.

  5. سلام مهندس خسته نباشید
    من این کد بالا که گذاشتید رو وارد کردم اما خطا میده همه چیز رو هم یه بار چک کردم که درست باشه اما نشد . به نظرتون مشل از کجاست؟
    #include
    #include
    #include

    /* Set these to your desired credentials. */
    const char *ssid = “ya ali”; //Enter your WIFI ssid
    const char *password = “0371896711.mmaj.9838.”; //Enter your WIFI password

    ESP8266WebServer server(80);

    void handleRoot() {
    server.send(200, “text/html”, “OnOff”);
    }
    void handleSave() {
    if (server.arg(“pass”) != “”) {
    Serial.println(server.arg(“pass”));
    }
    }
    void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    delay(3000);
    Serial.begin(115200);
    Serial.println();
    Serial.print(“Configuring access point…”);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(“.”);
    }
    Serial.println(“”);
    Serial.println(“WiFi connected”);
    Serial.println(“IP address: “);
    Serial.println(WiFi.localIP());
    server.on ( “/”, handleRoot );
    server.on (“/save”, handleSave);
    server.begin();
    Serial.println ( “HTTP server started” );
    server.on(“/LED_BUILTIN_on”, []() {
    digitalWrite(LED_BUILTIN, 1);
    Serial.println(“on”);
    handleRoot();
    });
    server.on(“/LED_BUILTIN_off”, []() {
    digitalWrite(LED_BUILTIN, 0);
    Serial.println(“off”);
    handleRoot();
    });
    }
    void loop() {
    server.handleClient();
    }
    من این کد رو وارد میکنم درسته ولی خب ip ثابت نمیده
    ممنون میشم راهنماییم کنید.

    1. سلام کد های درج شده در مطلب همگی تست شده و بعد منتشر میشه البته برای اطمینان بیشتر شما اروری که دریافت میکنید رو قرار بدید بررسی کنم.

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

نشانی ایمیل شما منتشر نخواهد شد.