سلام خدمت همه شما مایکروالکامی ها. در آخرین مطلب از مطالب مربوط به سری آموزش های ماژول های ESP822 به معرفی mDNS و تنظیم آن در ماژول های ESP8266 پرداخته شد. در این مطلب به نحوه اختصاص آی پی (IP) استاتیک یا ثابت روی ماژول های ESP8266 و کاربرد آن پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتویند سایر مطالب من رو از این لینک مطالعه و بررسی کنید.
مقدمه ای از تنظیم IP استاتیک در ESP8266
در کاربرد هایی که از ماژول ESP8266 / ESP32 بعنوان یک کلاینت استفاده میشود و آن را به یک روتر مثلا مودم متصل میکنیم، روتر یا مودم یک IP تحت عنوان Local IP به آن اختصاص خواهد داد. در این حالت کاربر با اتصال وایفای موبایل، لپ تاپ و… به ماژول ESP8266 و وارد کردن IP لوکال اختصاص یافته میتواند با مودم تبادل دیتا کرد. اما در این حالت باید توجه کرد که با هر بار راه اندازی مودم و ماژول ESP8266 یک IP تنظیم خواهد شد.
در این حالت هر بار کاربر باید IP جدید را خوانده و مراحل بعدی و فرایند کلی سیستم کنترلری را طی کند. عملا این کار توصیه نمیشود. برای رفع این نقص در کاربرد های مشابه 2 راه پیش رو داریم. در این مطلب از روش دوم استفاده خواهد شد و با تنظیم یک IP استاتیک در ESP دیگر نگران تغییر IP در هر کانکت شدن نخواهیم بود.
- اول اختصاص یک IP ثابت به مک آدرس ماژول ESP8266 / ESP32 از داخل تنظیمات مودم.
- دوم اینکه با استفاده از چند خط کد از تغییر IP لوکال ماژول 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 خود مطلع خواهید شد. با انجام آموزش مطرح شده با کانکت کردن ماژول به هر مودم/روتر/هات اسپات، IP لوکال ماژول ثابت خواهد ماند.
نتیجه گیری
در این مطلب به نحوه تخصیص IP استاتیک یا ثابت به ماژول وایفای ESP8266 پرداخته شد که با این روش دیگر IP لوکال ماژول تغییر نخواهد کرد و نیاز به تغییر کد در هر پروژه نخواهیم داشت. امیدوارم از این آموزش کمال بهره را برده باشید. در صورت داشتن هرگونه نظر یا سوال درباره این مطلب یا تجربه مشابه اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو به اشتراک بگذارید تا سایر دوستان هم بتوانند استفاده کنند. همینطور میتونید این مطلب را توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.
سلام وقت بخیر آیا میتوان ماژول را با اینترنت موبایل و نقطه اتصال راه اندازی کرد؟
سلام، بله باید SSID و Password اش را بزنید مثل حالتی که به مودم کانکت میشید.
سلام و عرض خسته نباشید
نام ماژول esp8266 را هم می توانم تغییر دهم یا کلا بدون نام بمونه؟
سلام، متوجه نشدم. منظورتون رو دقیق تر بفرمایید.
ببخشید سوالمو اینطور میپرسم
میخواستم مک آدرس ماژول nodemcu با هسته esp8266 را تغییر دهم و مک آدرس اصلی ماژول نباشد.ضمنا پس از هر بار اتصال به مودم وایفای این مک آدرس جدید تغییر نکند.
با تشکر
سلام، میتونید 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() {
}
سلام مهندس کتابخانه ی async حتی example های خودش رو هم با ارور کومپایل میکنه مشکل کجا هست
ممنون
سلام، اول مطمئن بشید که بورد رو درست انتخاب کردید و اشتباها مثلا خود Arduino UNO نباشه.
سلام
تشکر از اموزش خوبتون
اگر ممکنه اموزشی برای دسترسی از اینترنت به esp8266 بگذارید . مثلا مشاهده وضعیت یک کلید از اینترنت
سلام، از اینکه مفید واقع شده مطلب خوشحالیم.
چشم در مطالب بعدی سعی خواهد شد به این موضوع هم پرداخته بشه.
این ارور رو به من میده میشه کمکم کنید
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.
یه کد دیگه هم روی بردم اپلود کردم مشکل از اردوینو نبود
ظاهرا کتابخانه و فایل های ESPAsyncWebServer رو شناسایی نکرده ممکنه اشتباه نصب شده که حتما بررسی کنید.
همینطور از انتخاب برد و مدل و COM اون در هنگام پروگرام اطمینان حاصل کنید.
برد بدرستی وارد حالت پروگرام شده باشه.
چه طور این رو دان کنیم هرکاری کردم نشد ESPAsyncWebServer
از لینکی که گفته شده باید استفاده کنید و از صفحه گیت هاب دانلود کنید. همینطور میتونید از لینک زیر هم برای دانلود مستقیم کتابخانه ESPAsyncWebServer استفاده کنید.
https://github.com/me-no-dev/ESPAsyncWebServer/archive/refs/heads/master.zip
خیلی ممنونم خیلی کمکم کردید
خواهش میکنم.
سلام مهندس خسته نباشید
من این کد بالا که گذاشتید رو وارد کردم اما خطا میده همه چیز رو هم یه بار چک کردم که درست باشه اما نشد . به نظرتون مشل از کجاست؟
#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 ثابت نمیده
ممنون میشم راهنماییم کنید.
سلام کد های درج شده در مطلب همگی تست شده و بعد منتشر میشه البته برای اطمینان بیشتر شما اروری که دریافت میکنید رو قرار بدید بررسی کنم.