بررسی قدرت سیگنال WiFi و مقدار RSSI با برد ESP32

در این آموزش، یاد میگیرید چگونه قدرت سیگنال WiFi یک شبکه مشخص را با ESP32 پیدا کنید. همچنین بررسی میکنیم که چگونه مقدار RSSI (Received Signal Strength Indicator) را دریافت کرده و از آن برای سنجش قدرت سیگنال WiFi استفاده کنیم.
قبل از شروع این آموزش، باید ESP32 Arduino Core را در Arduino IDE نصب کرده باشید تا بتوانید پروژههای ESP32 را در Arduino IDE کامپایل و اجرا کنید. اگر هنوز این کار را انجام ندادهاید، آموزش زیر را دنبال کنید.
بررسی سیگنال وای فای ESP32
برای بررسی قدرت سیگنال WiFi یک شبکه مشخص با ESP32، از کتابخانه WiFi.h استفاده میکنیم که به صورت پیشفرض در Arduino core وجود دارد و تنها کافی است آن را include کنیم.
یک مثال آماده برای اسکن شبکههای WiFi در ESP32 وجود دارد که میتواند برای دریافت قدرت سیگنال هر شبکه WiFi نزدیک نیز استفاده شود. مسیر آن:
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) {
// Print SSID and RSSI for each network found
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 Scanner قدرت سیگنال هر شبکه 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));
این مقدار قدرت سیگنال هر شبکه اطراف را که هنگام اسکن پیدا شده نشان میدهد.
و این نتیجه اجرای کد ESP32 WiFi Scanner روی برد من است.

و میتوانم تأیید کنم که روتر WiFi خانه من قویترین سیگنال را دارد، زیرا در اتاق کناری قرار دارد. روتر دیگرم که یک طبقه بالاتر است، سیگنال ضعیفتری دارد که قابل انتظار است. بنابراین این بخش را جمعبندی میکنیم و به موضوع بعدی یعنی تلاش برای اتصال به یک شبکه WiFi موجود با ESP32 میرویم.
مقدار RSSI در وای فای
مقدار RSSI توسط ESP32 بررسی میشود تا قدرت اتصال WiFi بین ESP32 و شبکه مشخصی که قصد اتصال به آن دارید (مثل روتر خانه یا هر اکسسپوینت دیگر) تعیین شود. این موضوع زمانی مفید است که مشکل اتصال دارید یا اتصال به صورت پراکنده قطع میشود.
سپس میتوانید مقدار RSSI شبکه موردنظر را بررسی کنید و判断 کنید که آیا باید قدرت سیگنال WiFi تنظیم شود یا تنها کافی است برد ESP32 را کمی به اکسسپوینت نزدیکتر کنید.
بهطور کلی هرچه مقدار RSSI کمتر باشد، سیگنال ضعیفتر است و بالعکس. بازه مقدار RSSI بین 0 تا -120 dBm است. مقدار 0 dBm بهندرت قابل دستیابی است و نشاندهنده یک اتصال فوقالعاده قوی است. مقادیر پایینتر از -90 تا -120 dBm کاملا غیرقابل استفاده هستند.
مقدار RSSI و تناسب با سیگنال وای فای
RSSI یک معیار تخمینی برای قدرت سیگنال WiFi یک شبکه مشخص (روتر یا اکسسپوینت) است. مقدار بازگشتی به صورت -x dBm است که هرچه عدد به صفر نزدیکتر باشد، اتصال قویتر است. جدول زیر نحوه ارزیابی مقدار RSSI را نشان میدهد:
| محدوده RSSI | مقدار سیگنال وای فای | |
| RSSI > -30 dBm | Amazing | |
| RSSI < – 55 dBm | Very good signal | |
| RSSI < – 67 dBm | Fairly Good | |
| RSSI < – 70 dBm | Okay | |
| RSSI < – 80 dBm | Not good | |
| RSSI < – 90 dBm | Extremely weak signal (unusable) | |
در ادامه فهرست کامل قطعاتی را مشاهده میکنید که برای انجام تمام آزمایشهای عملی این مقاله و مجموعه آموزشهای ESP32 در سایت DeepBlueMbedded نیاز دارید. توجه کنید که این لینکها افیلیت هستند و خرید شما بدون هزینه اضافی کمیسیون کوچکی برای ما ایجاد میکند که از کار ما حمایت خواهد کرد.
جمع بندی
برای جمع بندی این آموزش، باید اشاره کنیم که قدرت سیگنال WiFi در ESP32 به فاصله بین برد ESP32 و اکسسپوینتی که قصد اتصال به آن دارید بستگی دارد. هر مانعی بین ESP32 و AP باعث کاهش قدرت سیگنال WiFi میشود، مخصوصا اگر مانع شامل مواد رسانا باشد که امواج RF را تضعیف کرده و در نهایت مقدار RSSI را کاهش میدهد.
اگر تازه شروع به یادگیری WiFi در ESP32 کردهاید، توصیه می شود آموزش زیر را دنبال کرده و آن را در مرورگر خود ذخیره کنید. این راهنما مخصوصا برای مبتدیانی نوشته شده که میخواهند موضوع گسترده WiFi در ESP32 را درک کرده و یک نقشه راه روشن برای یادگیری سیستماتیک آن داشته باشند.
وقتی کار با WiFi در ESP32 را شروع میکنید، تعداد زیاد موضوعات و کتابخانههای مختلف مثل HTTP، TCP/IP، UDP، WebServers، AsyncWebServers، WebSocket، MQTT، ESP-NOW و غیره ممکن است باعث سردرگمی شود.








