ساخت وای فای Wifi اسکنر با برد ESP32

در این آموزش، نحوه پیادهسازی یک اسکنر WiFi با ESP32 در Arduino IDE را یاد میگیرید. مثال ESP32 WiFi Scan اولین قدم شما برای بررسی قابلیتهای WiFi در ESP32 است، زیرا تمام شبکههای WiFi در دسترس اطراف را نمایش میدهد و اطمینان میدهد که WiFi در ESP32 بهدرستی کار میکند.
پیش از شروع این آموزش، باید ESP32 Arduino Core را در Arduino IDE نصب کرده باشید تا بتوانید پروژههای ESP32 را در Arduino IDE کامپایل و اجرا کنید. اگر هنوز این کار را انجام ندادهاید، مقاله آموزش جامع برنامه نویسی برد ESP32 با آردوینو را مطالعه کنید.
کد مثال وای فای اسکنر
برای اسکن شبکههای WiFi موجود در اطراف ESP32، میتوانید از نمونه WiFiScan در Arduino IDE استفاده کنید. مسیر File > Examples > WiFi > WiFiScan را باز کنید.
در ادامه، کد کامل این مثال آورده شده است:
#include "WiFi.h"
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop()
{
Serial.println("Scan start");
int n = WiFi.scanNetworks();
Serial.println("Scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
Serial.println("Nr | SSID | RSSI | CH | Encryption");
for (int i = 0; i < n; ++i) {
Serial.printf("%2d",i + 1);
Serial.print(" | ");
Serial.printf("%-32.32s", WiFi.SSID(i).c_str());
Serial.print(" | ");
Serial.printf("%4d", WiFi.RSSI(i));
Serial.print(" | ");
Serial.printf("%2d", WiFi.channel(i));
Serial.print(" | ");
switch (WiFi.encryptionType(i))
{
case WIFI_AUTH_OPEN:
Serial.print("open");
break;
case WIFI_AUTH_WEP:
Serial.print("WEP");
break;
case WIFI_AUTH_WPA_PSK:
Serial.print("WPA");
break;
case WIFI_AUTH_WPA2_PSK:
Serial.print("WPA2");
break;
case WIFI_AUTH_WPA_WPA2_PSK:
Serial.print("WPA+WPA2");
break;
case WIFI_AUTH_WPA2_ENTERPRISE:
Serial.print("WPA2-EAP");
break;
case WIFI_AUTH_WPA3_PSK:
Serial.print("WPA3");
break;
case WIFI_AUTH_WPA2_WPA3_PSK:
Serial.print("WPA2+WPA3");
break;
case WIFI_AUTH_WAPI_PSK:
Serial.print("WAPI");
break;
default:
Serial.print("unknown");
}
Serial.println();
delay(10);
}
}
Serial.println("");
WiFi.scanDelete();
delay(5000);
}
این مثال زمانی بسیار مفید است که قصد دارید به یک شبکه نزدیک متصل شوید اما اتصال موفق نمیشود. این اسکنر WiFi قدرت سیگنال هر شبکه داخل محدوده ESP32 را نمایش میدهد. پارامتر RSSI همان مقداری است که در صورت نیاز به بررسی قدرت سیگنال شبکههای اطراف باید به آن توجه کنید.
تابع WiFi.scanNetworks() منطق اصلی اسکن WiFi را اجرا میکند و تعداد شبکههای پیدا شده را برمیگرداند.
int n = WiFi.scanNetworks();
در این مرحله، تعداد شبکههای اطراف شما مشخص است و میتوانید به هر یک از پارامترهای زیر برای هر شبکه دسترسی داشته باشید:
- SSID
- RSSI
- Channel
- EncryptionType
برای دریافت و چاپ SSID هر شبکه پیدا شده، از تابع WiFi.SSID(i) استفاده کنید و اندیس شبکه را به آن بدهید.
Serial.print(WiFi.SSID(i));
برای دریافت و چاپ مقدار RSSI (شاخص قدرت سیگنال دریافتشده)، از تابع WiFi.RSSI(i) طبق نمونه زیر استفاده کنید.
Serial.print(WiFi.RSSI(i));
این مقدار قدرت تقریبی سیگنال هر شبکه اطراف را که در فرایند اسکن پیدا شده است، نشان میدهد.
برای دریافت و چاپ شماره کانال WiFi مربوط به هر شبکه یافتهشده، از تابع WiFi.channel(i) استفاده کنید و شناسه شبکه را در آن قرار دهید.
Serial.print(WiFi.channel(i));
در نهایت، برای دریافت و چاپ نوع رمزگذاری شبکههای WiFi، از تابع WiFi.encryptionType(i) استفاده کنید.
int WiFi_EncType = WiFi.encryptionType(i);
if(WiFi_EncType == xyz)
{
Serial.println("EncType = xyz")
}
گزینههای ممکن برای نوع رمزگذاری شبکه WiFi به شکل زیر هستند:
- WIFI_AUTH_OPEN
- WIFI_AUTH_WEP
- WIFI_AUTH_WPA_PSK
- WIFI_AUTH_WPA2_PSK
- WIFI_AUTH_WPA_WPA2_PSK
- WIFI_AUTH_WPA2_ENTERPRISE
- WIFI_AUTH_WPA3_PSK
- WIFI_AUTH_WPA2_WPA3_PSK
- WIFI_AUTH_WAPI_PSK
و این نتیجه اجرای کد ESP32 WiFi Scanner روی برد من است.

میتوانم بهوضوح تأیید کنم که روتر WiFi خانه من قویترین سیگنال را دارد زیرا در اتاق کناری قرار دارد، و بعد از آن روتر دیگر که در طبقهای دیگر قرار گرفته است و سیگنال آن کمی ضعیفتر است که کاملا قابلانتظار است. بنابراین میتوانیم این بخش را جمعبندی کرده و به مرحله بعد برویم که تلاش برای اتصال به یک شبکه WiFi موجود با ESP32 است.
دلایل احتمالی عمل نکردن کد اسکن Wifi
گاهی اوقات اسکن WiFi به درستی کار نمیکند و دلیل آن این است که برد شما در هنگام روشنشدن مقدار زیادی جریان مصرف میکند که اگر از یک منبع تغذیه مناسب استفاده نکنید، میتواند مشکلساز شود. بنابراین میتوان گفت که دلایل احتمالی بروز این مشکل یکی یا ترکیبی از موارد زیر است:
- کابل USB بیکیفیت
- استفاده از کابل USB بلند
- استفاده از کابل افزایش طول USB
- منبع تغذیه جریان کافی ارائه نمیدهد
- پورت USB توان لازم را برای جریان موردنیاز تأمین نمیکند
سعی کنید منبع تغذیه دیگری امتحان کنید یا اگر امکانپذیر است، از ورودی خارجی 3.3v یا 5v استفاده کنید، مخصوصا اگر برد با توان دریافتی از پورت USB اجرا نمیشود. من نیز قبلا با چنین مشکلی مواجه شده بودم و دلیل آن کابل افزایش طول USB بود که نمیتوانست جریان موردنیاز ESP32 را تأمین کند.
یکی از بهترین نشانههای وجود مشکل در منبع تغذیه یا کابل، وقوع brownout reset است. مانیتور سریال را بررسی کنید و پیامهایی که ESP32 ارسال میکند را ببینید. هر زمان که برد شما با رویداد brownout reset مواجه شود، این پیام را از طریق پورت سریال گزارش میدهد.
جمع بندی
برای جمعبندی این آموزش، باید توجه داشته باشید که اپلیکیشن ESP32 WiFi Scanner تنها اولین قدم شما برای کار با WiFi در ESP32 است تا شبکههای اطراف را پیدا کنید و مطمئن شوید کتابخانه WiFi و سختافزار به درستی کار میکنند. قدم بعدی تلاش برای اتصال به یک شبکه WiFi موجود است که آن را در آموزش بعدی یاد میگیرید.
اگر تازه شروع به یادگیری WiFi در ESP32 کردهاید، قویا پیشنهاد میکنم آموزش زیر را دنبال کنید و آن را در مرورگر خود ذخیره کنید. این آموزش مخصوصا برای مبتدیان تهیه شده تا همه چیز را درباره این موضوع گسترده یاد بگیرند و یک مسیر روشن و سیستماتیک برای ادامه یادگیری داشته باشند.
وقتی برای اولین بار WiFi را در ESP32 شروع میکنید، ممکن است بهدلیل تعداد زیاد موضوعات و کتابخانهها (مانند HTTP، TCP/IP، UDP، WebServers، AsyncWebServers، WebSocket، MQTT، ESP-NOW و غیره) بهسرعت احساس سردرگمی کنید. این حجم از کتابخانهها، حالتها، توپولوژیها و پروتکلها باعث میشود شروع کار سختتر از چیزی شود که باید باشد. منطقیترین سؤال این است که از کجا باید شروع کنم؟ آموزش زیر بهترین پاسخ است!








