Wi‑Fi пеленгатор на телефоне: ESP32‑S3 + WebUSB
Wi‑Fi пеленгатор FPV Club позволяет собирать измерения RSSI при повороте вокруг точки наблюдения и оценивать направление на выбранную Wi‑Fi точку. Интерфейс работает в браузере телефона, а эфир сканирует отдельный ESP32‑S3, подключённый по USB‑C.
Статус: web‑модель v0.2.0 опубликована как beta. Логика интерфейса и защищённый runtime развёрнуты; окончательный аппаратный smoke‑test конкретной ESP32‑S3 с телефоном ещё должен быть выполнен перед отметкой READY.
Зачем нужен ESP32‑S3
Обычная веб‑страница не получает список окружающих Wi‑Fi сетей, BSSID и RSSI из системного Wi‑Fi Android. Поэтому сканирование вынесено во внешний USB‑модуль. ESP32‑S3 выполняет Wi‑Fi scan, а браузер получает результаты через WebUSB.
Архитектура выглядит так: Wi‑Fi эфир → ESP32‑S3 → WebUSB → браузер телефона → измерения RSSI + угол → расчёт пеленга.
Что понадобится
- ESP32‑S3 с доступным native USB / USB‑OTG портом;
- Android‑телефон с USB‑C и поддержкой USB host/OTG;
- USB‑C кабель или OTG‑переходник, поддерживающий передачу данных;
- совместимый Chromium‑браузер с WebUSB;
- прошивка FPV Club Wi‑Fi Scanner для ESP32‑S3.
Как работает прошивка
ESP32‑S3 работает в режиме Wi‑Fi Station и выполняет активный обзор доступных сетей. Для найденной точки передаются SSID, BSSID, RSSI и канал. После выбора BSSID браузер может перевести модуль в режим наблюдения и получать последовательность измерений RSSI.
Обмен идёт по WebUSB vendor‑интерфейсу в UTF‑8 JSON Lines. Базовые команды: hello, scan, watch и stop. Во время наблюдения устройство возвращает события sample; если выбранный BSSID не найден в очередном проходе, возвращается sample_miss.
Как прошить ESP32‑S3
- Установите Arduino IDE и актуальный пакет
arduino-esp32. - Выберите вашу ESP32‑S3.
- Для USB выберите режим USB‑OTG / TinyUSB device mode. Не использовать аппаратный CDC/JTAG как основной transport для этой прошивки.
- Откройте скетч
esp32s3_webusb_scanner.ino, соберите и загрузите его в плату. - После перезапуска модуль регистрируется как WebUSB‑устройство и указывает landing URL страницы FPV Club.
Точный пункт меню USB Mode может называться по‑разному у разных плат ESP32‑S3. В финальной инструкции он будет уточнён после проверки конкретной платы.
Как подключить к телефону
- Подключите ESP32‑S3 к телефону через USB‑C/OTG кабель с передачей данных.
- Откройте Wi‑Fi пеленгатор.
- Нажмите «Подключить сканер».
- В системном окне браузера выберите ESP32‑S3 и разрешите доступ к USB‑устройству.
- Запустите поиск сетей.
- Выберите нужный BSSID.
- Запустите сбор измерений.
Если WebUSB недоступен в текущем браузере или устройство не определяется, интерфейс должен показать состояние несовместимости вместо неработающей основной кнопки.
Как выполнить измерение
Для одного прохода ESP32‑S3 следует поворачивать вместе с телефоном вокруг вертикальной оси. Угол может поступать от датчика ориентации телефона; если доступ к ориентации недоступен или нестабилен, угол задаётся вручную.
- Выберите одну конкретную точку по BSSID, а не только по SSID.
- Начните проход и медленно выполните полный поворот примерно на 360°.
- Старайтесь держать устройство на одной высоте и не менять хват в середине прохода.
- Накопите измерения по разным углам.
- После завершения оцените итоговый bearing и показатель качества.
Что показывает диаграмма
Алгоритм группирует измерения по углу, сглаживает круговой профиль RSSI и ищет широкий максимум сигнала. Отдельно учитывается сектор ослабления с противоположной стороны, который может возникать из‑за экранирования телом или конструкцией. Итоговое направление строится по согласованию максимума сигнала и противоположности тени.
Интерфейс также показывает покрытие углов, контраст RSSI, шум измерений и согласованность оценок. Высокий итоговый score означает не «точность в градусах», а то, что текущий набор измерений лучше удовлетворяет внутренним критериям качества.
Почему один проход может ошибаться
RSSI сильно зависит не только от направления на передатчик. Ошибки дают отражения от стен и металла, многолучёвость, движение людей, изменение ориентации антенны, автоматическая регулировка радио‑тракта и неполное покрытие круга. Поэтому один максимум RSSI нельзя считать доказанным азимутом.
Для практического поиска полезнее повторить проход из другой точки. Если оценки из двух‑трёх позиций сходятся в один сектор, доверие к направлению выше.
Что уже готово
- web‑интерфейс пеленгатора v0.2.0;
- защищённый runtime на fpv-club.ru;
- WebUSB‑режим подключения ESP32‑S3;
- сканирование сетей и выбор BSSID;
- режим непрерывного наблюдения выбранного BSSID;
- полярный профиль RSSI и расчёт итогового направления;
- CSV/demo режим для проверки алгоритма без оборудования.
Что ещё нужно проверить
Перед финальным статусом READY требуется аппаратный тест конкретной платы ESP32‑S3 с Android‑телефоном: USB enumeration, выдача WebUSB permission, полный scan, выбор BSSID, получение серии sample, ориентация/ручной угол и полный проход 360°. До этой проверки инструкция остаётся beta и не заявляет подтверждённую точность пеленга.
Следующий шаг
Прошить ESP32‑S3, подключить её к телефону и провести два повторных прохода по заранее известной точке доступа. После этого можно зафиксировать совместимые настройки платы и откалибровать угловое смещение для конкретной механической ориентации сканера.
