Подключаемся к Wi-Fi: network и station mode

Делаем главный шаг к умному дому — выводим плату в сеть.

Station mode (STA) — режим, в котором ESP32 подключается к существующей Wi-Fi-сети (роутеру) как обычный клиент, подобно телефону или ноутбуку.

Два режима Wi-Fi

ESP32 умеет работать в двух режимах: STA (подключиться к чужой сети) и AP (самому раздавать сеть, точка доступа). Для умного дома обычно нужен STA — плата идёт в ваш домашний роутер и через него в интернет.

Код подключения

import network
import time

def connect_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print("Подключаюсь к", ssid)
        wlan.connect(ssid, password)
        # ждём подключения
        for _ in range(20):
            if wlan.isconnected():
                break
            time.sleep(0.5)
    if wlan.isconnected():
        print("Подключено! IP:", wlan.ifconfig()[0])
    else:
        print("Не удалось подключиться")
    return wlan

wlan = connect_wifi("MyHomeWiFi", "secret123")

Что возвращает ifconfig

wlan.ifconfig() отдаёт кортеж из четырёх адресов: IP платы, маска сети, шлюз (роутер), DNS-сервер. Первый элемент — IP, по которому к плате можно обратиться из дома.

Ожидание подключения с таймаутом

Логику «ждать N попыток, потом сдаться» можно проверить на обычном Python:

# Симуляция: на какой попытке появилось соединение
def simulate(connected_at, max_tries=20):
    for attempt in range(1, max_tries + 1):
        connected = attempt >= connected_at
        if connected:
            return f"Подключено с попытки {attempt}"
    return "Таймаут: не подключились"

print(simulate(connected_at=6))
print(simulate(connected_at=99))

Вывод:

Подключено с попытки 6
Таймаут: не подключились

Как работает под капотом

Когда вы вызываете wlan.connect(), Wi-Fi-стек ESP32 (он крутится на отдельном ядре под FreeRTOS) ищет сеть с заданным именем, проходит аутентификацию по паролю и получает IP-адрес от роутера по протоколу DHCP. Всё это занимает 1–5 секунд, поэтому подключение асинхронно: connect() запускает процесс, а isconnected() сообщает, готово ли. Отсюда и цикл ожидания.

Частые ошибки

  • Не ждать подключения. Сразу после connect() сети ещё нет — нужен цикл с isconnected().
  • Хранить пароль прямо в коде на GitHub. Выносите учётные данные в отдельный файл (например, config.py), не публикуйте.
  • Сеть 5 ГГц. ESP32 (большинство моделей) работает только в диапазоне 2.4 ГГц — к сети 5 ГГц не подключится.

Итог

  • Station mode (STA) подключает ESP32 к домашнему роутеру как клиента.
  • Порядок: WLAN(STA_IF)active(True)connect() → ждать isconnected().
  • ifconfig()[0] возвращает IP-адрес платы.
  • ESP32 работает в диапазоне 2.4 ГГц; пароли выносите из кода.
Проверьте себя
1. Что делает ESP32 в режиме station (STA)?
AРаздаёт собственную Wi-Fi-сеть
BПодключается к существующей сети (роутеру) как клиент
CРаботает без сети
DСоздаёт Bluetooth-соединение
2. Почему после wlan.connect() нужен цикл ожидания с isconnected()?
AЭто требование Python
BПодключение асинхронно и занимает несколько секунд
CЧтобы сэкономить память
Disconnected всегда возвращает True
3. К какой сети большинство ESP32 НЕ сможет подключиться?
A2.4 ГГц с паролем
BОткрытой 2.4 ГГц
C5 ГГц
DГостевой 2.4 ГГц