Восстановление настройки Wi-Fi через AP и приёмочные испытания

Сценарий настройки Wi-Fi готов к продуктовой поставке, когда пользователь восстанавливается после неверных реквизитов, отсутствия маршрутизатора, прерванной настройки и отключения питания без перепрошивки. Проектируйте настройку как ограниченный по времени автомат состояний с видимым результатом, защитой реквизитов и предусмотренным возвратом к настройке. Успешная HTTP-отправка устройству — лишь один этап.

Статья рассматривает точку доступа устройства для настройки с последующим подключением к маршрутизатору заказчика. Подход применим к Linux и MCU; API зависят от драйвера и SDK. Все временные значения и проверки являются предлагаемыми проектными условиями, а не измеренными характеристиками.

Определите успех до разработки экрана

Разделите четыре этапа: телефон передал кандидатную конфигурацию; устройство прошло ассоциацию и аутентификацию; получило пригодную IP-конфигурацию; достигло требуемого прикладного сервиса. Для локального контроллера последним условием может быть обнаружение в LAN. Для облачного продукта — аутентифицированная регистрация или проверочный обмен. Зафиксируйте, какой этап разрешает окончательно сохранить настройки.

Отказ облака не доказывает неверный пароль Wi-Fi. Если Wi-Fi и DHCP работают, но сервер недоступен, сохраняйте отдельное состояние «сеть настроена, сервис недоступен». Допустимость завершения установки в этом состоянии определяет политика продукта; не заставляйте пользователя снова и снова вводить пароль.

Укажите диапазоны маршрутизатора, режимы защиты, кодировку и длину SSID, работу со скрытыми сетями и требования корпоративных сетей. Повторы не позволят модулю только 2,4 ГГц подключиться к сети только 5 ГГц. WPA-Enterprise, внешние captive portal и управляемые корпоративные сети требуют явно заявленной поддержки либо исключения.

Шесть состояний настройки Wi-Fi с кандидатной конфигурацией, проверкой сети, атомарной фиксацией и возвратом при отказе.
Рисунок 1. Восстановление входит в автомат настройки с явно определённой границей успеха и фиксации. Схема на английском.

Сделайте изменение настроек транзакционным

Храните последнюю проверенную конфигурацию отдельно от испытываемой кандидатной. Каждая попытка получает ID. Повторная передача того же ID должна возвращать состояние той же попытки, а не запускать параллельные подключения. Новая попытка должна контролируемо отменять или заменять прежнюю.

Если платформа позволяет, проверяйте новые реквизиты без немедленной замены сохранённой рабочей конфигурации. После согласованного успеха атомарно фиксируйте запись с версией. Храните данные контроля целостности и версию схемы, определите загрузку при отключении питания во время фиксации. Шифрование хранимых данных требует подходящего хранения ключей и не заменяет аутентифицированную настройку.

Некоторые менеджеры SDK сохраняют реквизиты до окончания собственной проверки приложения. Например, ESP-IDF 5.2.6 описывает проверку сохранённых данных и поведение при отказе/перезапуске в руководстве по настройке Wi-Fi. Это ограничение интеграции конкретной версии. Проверьте API сброса и повторной настройки выбранного менеджера и постройте вокруг них модель продукта; наличие реквизитов не равно успешной установке.

Сохраните намеренный вход в восстановление

Определите, что снова открывает настройку: аутентифицированная команда, последовательность физической кнопки или инструмент монтажника. Укажите длительность удержания, индикацию LED и последствия случайного короткого нажатия. Сетевой сброс обычно должен сохранять калибровку, идентичность устройства и независимые параметры приложения. Заводской сброс — отдельное действие с ясной индикацией.

Пример политики: десятиминутное окно настройки, настраиваемый предел одной попытки подключения, затем повтор или восстановление прежних параметров. Числа следует выбирать по поддерживаемым маршрутизаторам и процессу установки. Не оставляйте неограниченную сеть настройки открытой постоянно только из-за первой неудачи.

При автоматическом завершении телефон должен однозначно узнать результат. Возможны опрос статуса пока устройство доступно, подтверждение успеха перед переключением, LED или повторное обнаружение в целевой сети. Сам разрыв TCP не отличает успех от сбоя.

Учитывайте потерю связи с телефоном

Телефоны могут предпочитать мобильный Интернет, покидать Wi-Fi без Интернета или показывать ограниченный браузер captive portal. Проверяйте поддерживаемые Android/iOS с мобильными данными и без них. Предоставьте документированный локальный URL или приложение, работающее без автоматического обнаружения портала. Страница, необходимая офлайн, не должна зависеть от интернет-скриптов и шрифтов.

Совместная работа AP и STA ограничена конкретным радио. Для ESP32 документация указывает общий рабочий канал с приоритетом станции; подключение к маршрутизатору на другом канале может затронуть настройку. Сверьтесь с руководством Wi-Fi-драйвера, затем проверьте реальные версии SDK и модуля. Чипсетам Linux также нужны поддерживаемые драйвером комбинации интерфейсов; отдельные демонстрации AP и STA не подтверждают их одновременную работу.

Сделайте статусный endpoint устойчивым к переподключениям. Храните последний результат независимо от HTTP-соединения и возвращайте ID попытки, этап и безопасный код причины. Старая вкладка браузера не должна перезаписывать более новую успешную попытку.

Защитите передачу реквизитов и диагностику

Используйте индивидуальный секрет ввода устройства в эксплуатацию или другой подходящий аутентифицированный механизм. Открытый AP и неаутентифицированная форма пароля раскрывают чувствительный путь настройки. Совместно оценивайте защиту транспорта и проверку идентичности устройства; случайный самоподписанный сертификат без схемы доверия и обнаружения может лишь приучить монтажников игнорировать предупреждения.

Не копируйте примеры журналирования, печатающие пароль Wi-Fi. Записывайте этап, прошедшее время, причину отключения SDK, число повторов, версию прошивки и обезличенный сетевой идентификатор. Ограничьте экспорт диагностики и удаляйте временные кандидатные реквизиты после использования. Ограничьте попытки и одновременные сеансы, определите право управления при настройке двумя телефонами.

Разным причинам соответствуют разные действия. Отказ аутентификации требует проверки реквизитов или режима защиты. Отсутствие AP — диапазона, расстояния, скрытого SSID или политики поиска. Тайм-аут DHCP указывает на службу адресации или LAN. Ошибки TLS и регистрации относятся к приложению и могут затрагивать часы, сертификаты или правила учётной записи.

Докажите восстановление приёмочной матрицей

Проверка Ожидаемое восстановление Сохраняемые доказательства
Неверный, затем исправленный пароль Новая попытка без перепрошивки и удаления идентичности ID попыток, причина и итоговое состояние
Маршрутизатор исчезает при подключении Ограниченный тайм-аут; восстановимы старые рабочие настройки или вход настройки Хронология этапов и счётчики повторов/ресурсов
Ассоциация успешна, DHCP заблокирован Ошибка адреса отдельно от аутентификации Wi-Fi-события и захват DHCP
Сеть работает, облачный сервис недоступен Определён отказ сервиса; рабочие параметры Wi-Fi сохранены по политике Статусы IP, DNS и приложения без секретов
Питание отключается при приёме, проверке и фиксации Загрузка со старой/новой действительной конфигурацией либо в предусмотренное восстановление Журнал загрузки, версия записи, контроль целостности
Телефон покидает AP, подключается второй Право управления попыткой сохранено; последний результат доступен Клиентский статус и конкурентные запросы
Истечение окна и физический сетевой сброс Закрытие в срок; разрешённое повторное открытие без потери калибровки Радиосканирование, кнопка/LED и сравнение настроек

Повторяйте отказы вокруг переходов состояний, а не только в произвольные моменты. Включите смену канала, слабый сигнал и одновременную радио-/прикладную нагрузку. Считайте успешные восстановления относительно всех попыток, фиксируйте каждый отказ и время до работоспособного состояния. Одного среднего недостаточно: немногие бесконечно зависшие попытки могут определять стоимость поддержки.

Предоставьте компактный диагностический контракт

Следующий документ статуса — пример прикладного контракта, а не API SDK. Словарь этапов и причин следует версионировать вместе с мобильным приложением:

{
  "schema": 1,
  "attempt_id": "setup-0042",
  "phase": "waiting_for_ip",
  "result": "pending",
  "elapsed_ms": 12400,
  "reason": null,
  "can_retry": false
}

Используйте монотонное время для сроков, чтобы коррекция часов неожиданно не продлевала и не сокращала повтор. Watchdog должен обнаруживать застрявший обработчик, но не перезагружать исправное устройство лишь из-за отсутствия внешнего маршрутизатора. Отслеживайте память и сокеты при многократных неудачах, выявляя утечки, невидимые при однократной демонстрации.

Согласуйте полный комплект ввода в эксплуатацию

Услуга подключения устройств Obeita помогает определить интеграцию устройства, телефона и маршрутизатора. Завершённый проект шлюза ESP32 Wi-Fi и Bluetooth описывает работы AP/STA; отдельная роль Mesh не доказывает, что этот сценарий уже реализован или квалифицирован.

Предоставьте версии модуля и SDK, список телефонов, поддерживаемые маршрутизаторы и защиту, текущие журналы отказов и требуемый путь монтажника. Поставка должна включать определения состояний, видимые ошибки, обращение с реквизитами, семантику сброса и воспроизводимые испытания отказов наряду с экраном успешной настройки.

Похожие записи