Охранка для гаража упёрлась в сеть: датчик двери, реле на свет, плата — а интернета в гараже нет, и роутера тоже: ближайшая сеть ловит в лучшем случае с пятого этажа соседнего дома. Первой мыслью было купить дешёвый роутер и тянуть к нему питание, второй — вспомнить, что ESP32 сам умеет быть роутером. Режим SoftAP поднимает на плате собственную сеть: телефон подключается к ней напрямую, открывает страницу платы и жмёт кнопки — без единого внешнего устройства между вами и реле.
В этом уроке разберём три режима радиомодуля: STA — плата как клиент, SoftAP — плата как точка доступа, и их комбинацию, на которой строятся «порталы настройки» домашних устройств. Пройдём по аргументам WiFi.softAP(): пароль, канал, лимит клиентов, — и по адресу 192.168.4.1, который станет адресом вашего сервера. Отдельно — про ловушку с коротким паролем, которая молча делает сеть открытой. Симулятор в этом уроке честно оговорится: SoftAP он не эмулирует, поэтому там собрана модель журнала с теми же строками, что печатает реальная плата.
Три режима радиомодуля
STA (station) — режим из всех прошлых уроков: плата клиент, роутер начальник, адрес раздаётся по DHCP. SoftAP (soft access point) — плата сама поднимает сеть: она теперь начальник, раздаёт адреса своим клиентам и живёт на фиксированном адресе 192.168.4.1. Комбинация AP+STA включает оба сразу: плата остаётся в домашней сети и одновременно раздаёт свою. Именно на AP+STA строятся порталы настройки: новое устройство ещё не знает пароля от домашней сети, вы подключаетесь телефоном к его собственной сети, вводите SSID и пароль на странице платы, плата их запоминает и переключается в STA. Как держать такие настройки между перезапусками — я рассказывал в уроке про первые настройки в EEPROM: механика та же, только вместо этажа включения — пароль от WiFi.
Аргументы WiFi.softAP(): имя сети (до 32 байт, латиница — надёжнее всего), пароль от 8 до 63 символов, канал от 1 до 13 и лимит подключённых клиентов. По умолчанию — четыре клиента, потолок примерно десять; для страницы управления одной платой хватает и двух, но четыре оставляют запас на второй телефон и ноутбук. Канал обычно берут 1, 6 или 11 — они не пересекаются с соседями; если гараж стоит в частном секторе, думать о соседях почти не нужно, а в многоквартирном доме пересечения каналов дают потери, о которых легко забыть.
Сеть платы живёт без интернета — и это нужно принять заранее. Телефон, подключившись к GarageGate, начнёт жаловаться «нет доступа к сети» и через пару минут может сам перепрыгнуть на мобильный интернет: это не баг, а защита телефона. Для страницы управления это ничего не меняет — браузер по адресу 192.168.4.1 откроется, пока телефон держит связь с платой. Если же плате нужен и интернет, и собственная сеть — это ровно AP+STA из предыдущего абзаца. А экран жалобы телефона — хороший индикатор: предупреждение пропадает, как только страница платы реально открывается.
SoftAP: скетч и адрес сервера
#include <WiFi.h> const char* apSsid = "GarageGate";const char* apPass = "door777door"; // 8+ символов, иначе сеть станет открытой void setup() { Serial.begin(115200); pinMode(2, OUTPUT); WiFi.mode(WIFI_AP); // плата — только точка доступа WiFi.softAP(apSsid, apPass, 1, 4); // канал 1, до четырёх клиентов Serial.print("AP поднята: "); Serial.println(apSsid); Serial.print("IP сервера: "); Serial.println(WiFi.softAPIP()); // 192.168.4.1 по умолчанию Serial.print("MAC платы: "); Serial.println(WiFi.macAddress()); digitalWrite(2, HIGH); // светится — сеть в эфире} void loop() { // здесь будет веб-сервер: страница, кнопки, реле}WiFi.mode(WIFI_AP) переключает радиомодуль в режим точки доступа; WiFi.softAP() поднимает сеть — уже через секунду после вызова она появляется в списке сетей телефона. WiFi.softAPIP() печатает адрес сервера: по умолчанию 192.168.4.1, и запомните его — это «адрес сайта» вашей платы. Хотите другой диапазон, скажем 10.0.0.1, — вызовите перед softAP() функцию WiFi.softAPConfig(local_ip, gateway, subnet) с тремя IPAddress-объектами; я делаю так, когда на объекте несколько сетевых сервисов и адреса хочется разложить по подсетям, чтобы не путаться в логах.
Что дальше с этой сетью — вопрос одного шага. Телефон подключается к GarageGate, вводит пароль, открывает http://192.168.4.1 — и попадает на страницу, которую плата отдаёт сама. Как собрать эту страницу и повесить на неё кнопки реле — тема урока про веб-сервер на ESP32: он стартует в этой же сети без единой правки кода подключения. Связка SoftAP плюс веб-сервер закрывает целый класс задач «настроить и управлять там, где нет сети»: гараж, теплица, будка собаки, съёмная дача. Для более серьёзной архитектуры, где плата публикует показания в брокер, дорога ведёт в урок об устройстве протокола MQTT — но там уже нужен роутер или точка доступа в доме.
Имя сети можно скрыть — пятый аргумент softAP отвечает за видимость SSID в эфире. Я скрытую сеть для личных проектов не делаю: телефон к ней подключается капризно, а скрытость от злоумышленника — иллюзия, эфир всё равно слушают по служебным пакетам. Лучше видимый SSID без персональных данных — без имени семьи и адреса — и честный пароль, который легко ввести с экрана телефона в гараже при свете лампочки.
Про страницу на этой сети — одна оговорка наперёд. Веб-сервер из следующего урока отдаёт страницы по HTTP без шифрования: пароль от домашней сети, введённый на такой странице, летит по воздуху открытым текстом. Для гаража и дачи это приемлемый риск, для портала настройки в кафе или офисе — уже нет: рядом может сидеть кто-то с анализатором трафика. Правило простое: секреты вводите на собственной сети платы только там, где физически контролируете пространство вокруг.
Про расход энергии тоже честно. В режиме SoftAP радио работает как мастер сети и не засыпает ни на миллисекунду, поэтому от батареи точка доступа живёт заметно меньше, чем клиент той же сети. Моё правило с границей: если проект питается от розетки — SoftAP без раздумий; если от батарейки — сначала прикинуть бюджет: точка доступа, которая гаснет за ночь, ничего не охраняет.
Дальность тоже вкладывается в планирование. В открытой гаражной паре я устойчиво ловил сеть с улицы метров на тридцать; через бетонную стену — уже с пяток, и телефон сам перепрыгивал на мобильный интернет, а страница платы не открывалась. Если устройство должно управляться со двора через два этажа, SoftAP не вытянется — там уже нужен роутер с выносной антенной или хотя бы AP+STA и упор на домашнюю сеть.
| Режим | Кто кому роутер | Типичный адрес платы | Годится для |
|---|---|---|---|
| STA | Плата — клиент чужой сети | от DHCP, например 192.168.1.100 | Всё, что ходит в интернет |
| SoftAP | Плата раздаёт свою сеть | 192.168.4.1 (фиксированный) | Гараж, поле, настройка без роутера |
| AP+STA | И клиент, и точка одновременно | 192.168.1.x плюс 192.168.4.1 | Портал настройки сети на устройстве |
Модель работы точки доступа в симуляторе
- 1. Чем SoftAP отличается от STA?
- 2. Пароль точки доступа — abc, три символа. Что произойдёт?
- 3. Какой адрес у веб-сервера, поднятого на ESP32 в режиме SoftAP по умолчанию?
- 4. Сколько клиентов подключается к SoftAP по умолчанию?
- 5. Зачем режиму AP+STA репутация «портала настройки»?
- SoftAP превращает ESP32 в роутер: WiFi.softAP(ssid, pass, канал, лимит клиентов)
- Адрес сервера по умолчанию — 192.168.4.1; печатает WiFi.softAPIP(), меняет WiFi.softAPConfig()
- Пароль короче 8 символов молча делает сеть открытой — проверяйте длину до прошивки
- AP+STA — основа портала настройки: телефон передаёт плате credentials домашней сети
- Сеть платы живёт без интернета: веб-сервер в ней стартует так же, как и дома
Из трёх режимов у вас теперь на руках полный набор: STA из первого урока раздела, автомат восстановления из урока про реконнект и собственная сеть отсюда. Следующий логичный шаг — веб-сервер на ESP32: страница с кнопками, которая живёт на 192.168.4.1, собирается без единого изменения кода подключения из этого урока. Когда же плате понадобится не отдавать данные, а просить их у чужого сервера, открывайте урок про HTTP-запросы: там плата уже в роли клиента. А если захочется держать на плате ещё и настройки пользователя — SSID, пароль, пороги, — портал настройки из этого урока плюс энергонезависимая память дают устройство, которое переживает и перезапуск роутера, и переезд в другой дом. Моя гаражная охранка после всего этого собралась за один вечер и второй год открывается с телефона на 192.168.4.1 — а единственный ремонт был в механике двери, не в электронике.
Частые вопросы по теме урока
- Чем SoftAP отличается от STA?
- STA (station) — клиент чужой сети с адресом от DHCP. SoftAP — собственная сеть платы с фиксированным адресом 192.168.4.1. STA — плата как клиент чужой сети, SoftAP — плата сама раздаёт свою
- Пароль точки доступа — abc, три символа. Что произойдёт?
- Библиотека не ругается на короткий пароль — она молча поднимает сеть без шифрования, и все страницы управления доступны любому. Длину пароля проверяйте до прошивки. Сеть поднимется, но станет открытой: WPA2 требует от 8 символов
- Какой адрес у веб-сервера, поднятого на ESP32 в режиме SoftAP по умолчанию?
- По умолчанию SoftAP живёт на 192.168.4.1; его печатает WiFi.softAPIP(), а WiFi.softAPConfig() задаёт свой адрес — обе функции запомните, адрес в логе вы будете искать не раз. 192.168.4.1
- Сколько клиентов подключается к SoftAP по умолчанию?
- По умолчанию — четыре клиента, аргумент max_connection; потолок примерно десять, и он зависит от версии ядра. Для страницы управления одной платой хватает и двух — запас оставьте на ноутбук. Четыре
- Зачем режиму AP+STA репутация «портала настройки»?
- Новое устройство не знает пароля домашней сети. Через собственную сеть платы телефон вводит credentials на странице, плата сохраняет их и переключается в STA — так настраивают половину умных розеток в магазине. Плата сидит в домашней сети и одновременно раздаёт свою: телефон заходит на страницу и передаёт ей SSID и пароль домашней сети