
راهاندازی ESP32 در حالت Access Point؛ ساخت شبکه Wi-Fi بدون مودم و روتر
تصور کنید میخواهید با تلفن همراه خود یک دستگاه الکترونیکی را کنترل کنید؛ مثلاً دمای یک سنسور را مشاهده کنید، وضعیت خروجیهای یک برد را تغییر دهید یا تنظیمات یک سیستم کنترلی را انجام دهید. برای این کار لزوماً به مودم، روتر یا حتی اتصال اینترنت نیاز ندارید.
۱. حالت Access Point در ESP32 چیست؟
در شبکههای بیسیم معمولاً دستگاههایی مانند مودم یا روتر، شبکه Wi-Fi را ایجاد میکنند و سایر دستگاهها به آن متصل میشوند.
اما ESP32 نیز میتواند همین نقش را بر عهده بگیرد. در این حالت، میکروکنترلر یک شبکه Wi-Fi مستقل ایجاد میکند و گوشی موبایل، لپتاپ یا سایر تجهیزات بیسیم میتوانند به آن متصل شوند. به این روش Soft Access Point یا SoftAP گفته میشود. برای مثال، فرض کنید یک ESP32 در اختیار داریم و میخواهیم شبکهای با مشخصات زیر بسازیم:
- نام شبکه: ECA_ESP32
- رمز عبور: 12345678
- آدرس IP: 192.168.4.1
پس از راهاندازی، شبکه موردنظر در فهرست شبکههای Wi-Fi گوشی نمایش داده میشود. با وارد کردن رمز عبور میتوانیم به آن متصل شویم. نکته مهم این است که در این ساختار، ESP32 خودش نقطه دسترسی است و برای ایجاد شبکه نیازی به مودم یا روتر خارجی ندارد.
۲. تفاوت حالت Access Point و Station در ESP32
ماژول ESP32 از چند حالت کاری برای ارتباط Wi-Fi پشتیبانی میکند که دو حالت AP و STA از مهمترین آنها هستند.
حالت Station یا STA
در این حالت، ESP32 مانند یک گوشی موبایل یا لپتاپ به یک شبکه Wi-Fi موجود متصل میشود. برای مثال، اگر بخواهیم اطلاعات یک سنسور را به یک سرور اینترنتی ارسال کنیم، معمولاً ESP32 را در حالت STA قرار میدهیم تا به مودم متصل شود.
حالت Access Point یا AP
در این حالت، ESP32 خودش شبکه Wi-Fi ایجاد میکند و دستگاههای دیگر به آن متصل میشوند. برای مثال، میتوانیم با گوشی موبایل به شبکه ایجادشده توسط ESP32 متصل شویم و از طریق مرورگر، وضعیت یک مدار الکترونیکی را مشاهده کنیم.
حالت AP+STA
ESP32 میتواند بهصورت همزمان در حالت Access Point و Station نیز فعالیت کند. در این شرایط، میکروکنترلر از یک طرف به مودم متصل میشود و از طرف دیگر شبکه Wi-Fi مستقلی برای اتصال دستگاههای دیگر ایجاد میکند.
این قابلیت در طراحی تجهیزات IoT کاربرد زیادی دارد؛ زیرا میتوان از آن برای ارتباط با اینترنت و فراهم کردن دسترسی محلی به دستگاه استفاده کرد.
۳. سختافزار و نرمافزار موردنیاز
برای اجرای این پروژه به تجهیزات پیچیدهای نیاز نداریم.
قطعات موردنیاز
- یک برد توسعه ESP32 مانند ESP32 DevKit
- کابل USB برای اتصال برد به کامپیوتر
- گوشی موبایل یا لپتاپ برای آزمایش اتصال Wi-Fi
نرمافزار موردنیاز
- Arduino IDE
- پکیج بردهای ESP32 برای Arduino IDE
- کتابخانه WiFi که همراه با پکیج Arduino-ESP32 ارائه میشود.
در این آموزش از Arduino IDE و هسته برنامهنویسی Arduino-ESP32 استفاده میکنیم. بنابراین نیازی به نصب کتابخانه WiFi بهصورت جداگانه نیست.
۴. ساخت اولین شبکه Wi-Fi با ESP32
ابتدا برد ESP32 را به کامپیوتر متصل کنید و یک پروژه جدید در Arduino IDE ایجاد کنید. کد زیر یک شبکه Wi-Fi با نام و رمز عبور مشخص ایجاد میکند.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <WiFi.h> const char* ssid = "ECA_ESP32"; const char* password = "12345678"; void setup() { Serial.begin(115200); WiFi.mode(WIFI_AP); bool result = WiFi.softAP(ssid, password); if (result) { Serial.println("Access Point Started!"); Serial.print("SSID: "); Serial.println(ssid); Serial.print("IP Address: "); Serial.println(WiFi.softAPIP()); } else { Serial.println("Access Point Failed!"); } } void loop() { } |
پس از انتخاب برد و پورت مناسب، برنامه را روی ESP32 آپلود کنید. سپس Serial Monitor را با سرعت 115200 باز کنید. در صورت موفقیت، خروجی مشابه زیر مشاهده میشود:
|
1 2 3 |
Access Point Started! SSID: ECA_ESP32 IP Address: 192.168.4.1 |
اکنون اگر وارد تنظیمات Wi-Fi گوشی موبایل شوید، شبکهای با نام ECA_ESP32 مشاهده خواهید کرد. با انتخاب این شبکه و وارد کردن رمز عبور 12345678، گوشی به ESP32 متصل میشود. به همین سادگی، یک شبکه Wi-Fi مستقل ایجاد کردهایم.
۵. بررسی توابع مهم در برنامه
برای درک بهتر عملکرد برنامه، بهتر است با چند تابع اصلی کتابخانه WiFi آشنا شویم.
تابع WiFi.mode()
این تابع حالت کاری رابط Wi-Fi را مشخص میکند. در برنامه از دستور زیر استفاده کردیم:
|
1 |
WiFi.mode(WIFI_AP); |
با این دستور، ESP32 در حالت Access Point قرار میگیرد.
حالتهای پرکاربرد عبارتاند از:
- WIFI_AP: ایجاد شبکه Wi-Fi توسط ESP32
- WIFI_STA: اتصال ESP32 به یک شبکه Wi-Fi
- WIFI_AP_STA: فعالیت همزمان در حالت AP و STA
تابع WiFi.softAP()
مهمترین تابع این پروژه است و برای ایجاد شبکه Wi-Fi استفاده میشود.
|
1 |
WiFi.softAP(ssid, password); |
این تابع علاوه بر نام و رمز عبور، پارامترهای دیگری نیز دارد:
|
1 |
WiFi.softAP(ssid, password, channel, hidden, max_connection); |
معنی پارامترها:
- ssid: نام شبکه Wi-Fi
- password: رمز عبور شبکه
- channel: کانال ارتباطی Wi-Fi
- hidden: مخفی بودن یا نبودن نام شبکه
- max_connection: حداکثر تعداد دستگاههای متصل به شبکه
در نسخه فعلی Arduino-ESP32 مقدار پیشفرض تعداد اتصالات همزمان در این تابع 4 دستگاه است. مقدار بازگشتی تابع از نوع Boolean است؛ مقدار true نشاندهنده موفقیت راهاندازی و false نشاندهنده شکست آن است.
تابع WiFi.softAPIP()
برای دریافت آدرس IP مربوط به رابط Access Point استفاده میشود.
|
1 |
Serial.println(WiFi.softAPIP()); |
تابع WiFi.softAPgetStationNum()
این تابع تعداد دستگاههایی را که در حال حاضر به شبکه ایجادشده متصل هستند، برمیگرداند.
|
1 |
Serial.println(WiFi.softAPgetStationNum()); |
این قابلیت زمانی مفید است که بخواهیم تعداد کاربران متصل به یک دستگاه کنترلی را بررسی کنیم.
۶. تنظیم آدرس IP ثابت برای شبکه ESP32
در بسیاری از پروژهها، استفاده از آدرس IP مشخص برای ESP32 اهمیت دارد. برای مثال، اگر قرار باشد کاربران همیشه از طریق یک آدرس مشخص وارد پنل تنظیمات دستگاه شوند، بهتر است IP شبکه را بهصورت صریح تعیین کنیم. برای این کار از تابع WiFi.softAPConfig() استفاده میشود.
نمونه کد:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <WiFi.h> const char* ssid = "ECA_ESP32"; const char* password = "12345678"; IPAddress local_IP(192, 168, 10, 1); IPAddress gateway(192, 168, 10, 1); IPAddress subnet(255, 255, 255, 0); void setup() { Serial.begin(115200); WiFi.mode(WIFI_AP); if (!WiFi.softAPConfig(local_IP, gateway, subnet)) { Serial.println("IP Configuration Failed!"); return; } if (WiFi.softAP(ssid, password)) { Serial.println("Access Point Started!"); Serial.println(WiFi.softAPIP()); } } void loop() { } |
در این برنامه، آدرس IP مربوط به ESP32 برابر 192.168.10.1 تنظیم شده است. پارامترهای تابع به این صورت هستند:
- local_IP: آدرس IP خود ESP32
- gateway: آدرس Gateway شبکه
- subnet: ماسک شبکه
در این مثال، چون ESP32 نقطه دسترسی اصلی شبکه است، آدرس Gateway را نیز برابر با IP خودش قرار دادهایم. پس از اتصال گوشی به شبکه، میتوانیم با وارد کردن آدرس زیر در مرورگر به ESP32 مراجعه کنیم:
|
1 |
http://192.168.10.1 |
البته برای نمایش صفحه وب، باید روی ESP32 یک وبسرور نیز اجرا کنیم.
۷. ساخت وبسرور داخلی و کنترل ESP32 با گوشی موبایل
یکی از کاربردهای جذاب حالت Access Point این است که میتوانیم یک وبسرور روی ESP32 اجرا کنیم. در این حالت، گوشی موبایل به شبکه ESP32 متصل میشود و با باز کردن مرورگر میتواند یک صفحه وب را که مستقیماً توسط میکروکنترلر ارائه میشود، مشاهده کند. برای این کار از کتابخانه WebServer استفاده میکنیم.
در مثال زیر، یک صفحه وب ساده ایجاد میکنیم که دو دکمه برای روشن و خاموش کردن LED دارد.
اتصالات سختافزاری
یک LED را با مقاومت محدودکننده جریان مناسب به GPIO 2 متصل کنید. در صورتی که برد شما LED داخلی متصل به این پایه ندارد، میتوانید از LED خارجی استفاده کنید.
کد کامل پروژه
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
#include <WiFi.h> #include <WebServer.h> const char* ssid = "ECA_ESP32"; const char* password = "12345678"; #define LED_PIN 2 WebServer server(80); void handleRoot() { String html = R"rawliteral( <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ESP32 Control Panel</title> </head> <body style="text-align:center;font-family:Arial"> <h2>ESP32 Control Panel</h2> <p>LED Control</p> <a href="/on"> <button style="padding:15px">LED ON</button> </a> <a href="/off"> <button style="padding:15px">LED OFF</button> </a> </body> </html> )rawliteral"; server.send(200, "text/html", html); } void handleLEDOn() { digitalWrite(LED_PIN, HIGH); server.sendHeader("Location", "/"); server.send(303); } void handleLEDOff() { digitalWrite(LED_PIN, LOW); server.sendHeader("Location", "/"); server.send(303); } void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); WiFi.mode(WIFI_AP); if (!WiFi.softAP(ssid, password)) { Serial.println("AP Failed!"); return; } Serial.print("AP IP: "); Serial.println(WiFi.softAPIP()); server.on("/", handleRoot); server.on("/on", handleLEDOn); server.on("/off", handleLEDOff); server.begin(); Serial.println("Web Server Started!"); } void loop() { server.handleClient(); } |
نحوه اجرای پروژه
پس از آپلود برنامه روی ESP32، مراحل زیر را انجام دهید:
- وارد تنظیمات Wi-Fi گوشی شوید.
- شبکه ECA_ESP32 را انتخاب کنید.
- رمز عبور 12345678 را وارد کنید.
- مرورگر گوشی را باز کنید.
- آدرس زیر را وارد کنید:
|
1 |
http://192.168.4.1 |
۸. کاربردهای عملی حالت Access Point در پروژههای الکترونیکی
قابلیت Access Point میتواند در بسیاری از پروژههای کاربردی مورد استفاده قرار بگیرد.
۱. پنل تنظیمات تجهیزات الکترونیکی
میتوانیم ESP32 را بهگونهای برنامهریزی کنیم که پس از روشن شدن، یک شبکه Wi-Fi ایجاد کند. کاربر با اتصال گوشی به این شبکه وارد صفحه تنظیمات دستگاه شود و پارامترهایی مانند زمان، دما، سرعت یا سایر تنظیمات را تغییر دهد.
۲. کنترل رله و تجهیزات برقی
با ایجاد یک صفحه وب روی ESP32 میتوانیم رلهها، خروجیهای دیجیتال و سایر بخشهای یک سیستم کنترلی را از طریق گوشی مدیریت کنیم.
۳. دریافت اطلاعات سنسورها
ESP32 میتواند اطلاعات سنسورهایی مانند دما، رطوبت، فشار یا ولتاژ را جمعآوری کند و از طریق یک صفحه وب در اختیار کاربر قرار دهد.
۴. پیکربندی اولیه تجهیزات IoT
یکی از مشکلات تجهیزات هوشمند این است که هنگام اولین راهاندازی، هنوز اطلاعات شبکه Wi-Fi کاربر را در اختیار ندارند. با استفاده از حالت AP میتوانیم یک شبکه موقت ایجاد کنیم تا کاربر به آن متصل شود و اطلاعات شبکه اصلی را وارد دستگاه کند.
پس از ذخیره تنظیمات، ESP32 میتواند به شبکه اصلی متصل شود.
۹. مشکلات رایج در راهاندازی Access Point
هنگام اجرای پروژه ممکن است با چند مشکل متداول روبهرو شوید.
شبکه Wi-Fi در گوشی نمایش داده نمیشود
موارد زیر را بررسی کنید:
- آیا برنامه بهدرستی روی ESP32 آپلود شده است؟
- آیا تابع WiFi.softAP() با موفقیت اجرا شده است؟
- آیا منبع تغذیه برد مناسب است؟
- آیا برد مورد استفاده از قابلیت Wi-Fi پشتیبانی میکند؟
همچنین بهتر است برای آزمایش اولیه، از یک نام شبکه ساده و بدون کاراکترهای خاص استفاده کنید.
گوشی به شبکه متصل نمیشود
رمز عبور را بررسی کنید. برای شبکههای WPA2-Personal، رمز عبور معمولاً باید حداقل 8 نویسه داشته باشد. همچنین تعداد دستگاههای متصل را بررسی کنید؛ ممکن است ظرفیت تعریفشده برای اتصال کاربران تکمیل شده باشد.
صفحه وب باز نمیشود
در این شرایط ابتدا مطمئن شوید گوشی واقعاً به شبکه ESP32 متصل است. سپس آدرس IP صحیح را بررسی کنید و مطمئن شوید وبسرور با دستور server.begin() راهاندازی شده است. در برنامه نیز باید تابع server.handleClient() بهصورت مستمر در loop اجرا شود.
اتصال برقرار است اما اینترنت وجود ندارد
این موضوع لزوماً نشانه خرابی برنامه نیست. در حالت AP، ESP32 یک شبکه محلی ایجاد میکند؛ اما بهصورت خودکار اینترنت در اختیار کاربران قرار نمیدهد. اگر هدف دسترسی کاربران به اینترنت باشد، باید ارتباط اینترنتی و مسیریابی مناسب نیز پیادهسازی شود.
۱۰. نکات مهم و محدودیتهای امنیتی
در طراحی یک محصول واقعی، تنها راهاندازی شبکه کافی نیست و باید به محدودیتها و مسائل امنیتی نیز توجه کنیم.
- از رمز عبور مناسب استفاده کنید و شبکه را بدون رمز در اختیار همه قرار ندهید.
- نام شبکه و رمز عبور را در صورت نیاز از طریق تنظیمات قابل تغییر کنید.
- تعداد کاربران همزمان را متناسب با کاربرد دستگاه تعیین کنید.
- از ارسال اطلاعات حساس بهصورت رمزنگارینشده در صفحات HTTP خودداری کنید.
- برای فرمانهای کنترلی مهم، احراز هویت و اعتبارسنجی درخواستها را در نظر بگیرید.
- به یاد داشته باشید که تعداد اتصالات قابل پشتیبانی و عملکرد واقعی شبکه به مدل تراشه، نسخه نرمافزار، حافظه و شرایط محیطی وابسته است.
همچنین آدرس IP، کانال و تعداد اتصالات را نباید برای تمام مدلهای خانواده ESP32 بدون بررسی مستندات همان تراشه یکسان فرض کرد.
جمعبندی
حالت Access Point یکی از قابلیتهای کاربردی ESP32 است که امکان ایجاد یک شبکه Wi-Fi مستقل را بدون نیاز به مودم یا روتر فراهم میکند.
با استفاده از تابع WiFi.softAP() میتوانیم شبکه را ایجاد کنیم، با WiFi.softAPIP() آدرس آن را دریافت کنیم و با کمک کتابخانه WebServer یک رابط کاربری تحت وب روی میکروکنترلر بسازیم.
این قابلیت برای ساخت پنلهای تنظیمات، کنترل تجهیزات الکترونیکی، مانیتورینگ سنسورها و راهاندازی اولیه محصولات IoT بسیار مفید است.
اگر قصد دارید یک دستگاه الکترونیکی طراحی کنید که کاربر بتواند مستقیماً با گوشی موبایل و بدون نصب اپلیکیشن اختصاصی با آن ارتباط برقرار کند، حالت Access Point در ESP32 یکی از گزینههای مناسب برای شروع است.
منابع فنی
- مستندات رسمی Arduino-ESP32 Wi-Fi API:
https://docs.espressif.com/projects/arduino-esp32/en/latest/api/wifi.html - مستندات رسمی ESP-IDF Wi-Fi:
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_wifi.html - مثال رسمی Wi-Fi Access Point در Arduino-ESP32:
https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi/examples/WiFiAccessPoint



