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.

Открыть Wi‑Fi пеленгатор

Зачем нужен 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

  1. Установите Arduino IDE и актуальный пакет arduino-esp32.
  2. Выберите вашу ESP32‑S3.
  3. Для USB выберите режим USB‑OTG / TinyUSB device mode. Не использовать аппаратный CDC/JTAG как основной transport для этой прошивки.
  4. Откройте скетч esp32s3_webusb_scanner.ino, соберите и загрузите его в плату.
  5. После перезапуска модуль регистрируется как WebUSB‑устройство и указывает landing URL страницы FPV Club.

Точный пункт меню USB Mode может называться по‑разному у разных плат ESP32‑S3. В финальной инструкции он будет уточнён после проверки конкретной платы.

Как подключить к телефону

  1. Подключите ESP32‑S3 к телефону через USB‑C/OTG кабель с передачей данных.
  2. Откройте Wi‑Fi пеленгатор.
  3. Нажмите «Подключить сканер».
  4. В системном окне браузера выберите ESP32‑S3 и разрешите доступ к USB‑устройству.
  5. Запустите поиск сетей.
  6. Выберите нужный BSSID.
  7. Запустите сбор измерений.

Если WebUSB недоступен в текущем браузере или устройство не определяется, интерфейс должен показать состояние несовместимости вместо неработающей основной кнопки.

Как выполнить измерение

Для одного прохода ESP32‑S3 следует поворачивать вместе с телефоном вокруг вертикальной оси. Угол может поступать от датчика ориентации телефона; если доступ к ориентации недоступен или нестабилен, угол задаётся вручную.

  1. Выберите одну конкретную точку по BSSID, а не только по SSID.
  2. Начните проход и медленно выполните полный поворот примерно на 360°.
  3. Старайтесь держать устройство на одной высоте и не менять хват в середине прохода.
  4. Накопите измерения по разным углам.
  5. После завершения оцените итоговый 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, подключить её к телефону и провести два повторных прохода по заранее известной точке доступа. После этого можно зафиксировать совместимые настройки платы и откалибровать угловое смещение для конкретной механической ориентации сканера.

Прокрутить вверх
На связи