RisalDash RisalDash

Проект · Wi-Fi · Site survey

Карта того, где ваш Wi-Fi есть на самом деле

«В углу плохой Wi-Fi» — это ощущение; −82 dBm в точке 41.3110, 69.2401 — это факт. Пронесите ESP32 по объекту — он сообщает живой RSSI линка, на котором реально сидит, кладёт замер на карту, ставит оценку Excellent/OK/WEAK и пишет каждую мёртвую зону с координатами — site survey, за которым следишь с телефона, за несколько долларов.

ПроектWi-FiRSSISurveyESP32
Проект Wi-Fi site survey на ESP32: RSSI по GPS-координатам с живым дашбордом

Замер — RSSI линка, который вам важен

WiFi.RSSI() возвращает силу соединения, которым плата реально пользуется — именно это и должен мерить survey, а не скан всех сетей в эфире. Простое отображение превращает dBm в интуитивные проценты, а трёхступенчатая оценка ведёт бейдж и журнал слабых зон:

// The real measurement: this board's link to the AP, right where it stands.
long r = WiFi.RSSI();
if (r != 0 && r > -127) rssi = r;

// Map dBm to an intuitive 0-100 % (−50 dBm and better = 100, −100 dBm = 0).
quality = rssi >= -50 ? 100 : (rssi <= -100 ? 0 : 2.0f * (rssi + 100));

// Grade it, and log weak zones WITH their position:
int g = rssi > -60 ? 0 : (rssi > -75 ? 1 : 2);
if (g == 2 && grade != 2)
  evlog->print("WEAK " + String((int)rssi) + " dBm @ " + String(lat, 4) + "," + String(lon, 4));
RSSIОценкаЧто это на практике
−30…−60 dBmExcellentполная скорость, видеозвонки где угодно
−60…−75 dBmOKсёрфинг и IoT в порядке
−75…−90 dBmWEAKобрывы, ретраи — двигать AP или ставить узел

Место — маркер на каждый замер

Число без места — половина survey. На улице NEO-6M привязывает каждый замер; map-виджет рисует движущийся маркер вживую. В помещении GPS не поможет — просто смотрите RSSI и тренд, идя из комнаты в комнату; журнал слабых зон всё равно фиксирует каждый провал:

dash.layout("Survey", RICON_WIFI);
dash.map("Position", &lat, &lon);              // where this reading was taken
dash.stat("RSSI", &rssi, "dBm");
dash.gauge("Quality", &quality, 0, 100, "%").variant("bar");
dash.badge("Signal", &grade).labels("Excellent", "OK", "WEAK");
dash.chart("RSSI trend", &rssi, "dBm");        // the survey trace
evlog = &dash.log("Weak zones", 5);
dash.begin(WIFI_SSID, WIFI_PASS);              // STA — we measure THIS link

Пример из библиотеки (examples/04_Templates/WifiSurvey) честен в том, что реально: RSSI живой на любой плате с первого включения; GPS — это RisalFakeGPS, проигрывающий пеший маршрут, так что весь survey работает на столе. Для реального уличного картирования подайте lat/lon из TinyGPS++ — подключение и разбор NMEA есть в сборке GPS-трекера.

Тактика обхода

Идите медленно — RSSI усреднён и запаздывает на секунду-две. Мерьте на высоте стола, не у пола. Пройдите петлю дважды и верьте худшему проходу (люди и двери двигаются). А когда найдёте мёртвый угол — лечится обычно позицией AP, а не мощностью: сначала переставить, потом расширять. Что физически значат dBm — антенны, стены, 2.4 vs 5 ГГц — в гайде по беспроводным протоколам.

RSSI живой с первого включения — GPS может оставаться фейковым, пока не выйдете на улицу.