Налаштування Wi-Fi без перепрошивки: портал WiFiManager
Прибираємо пароль від Wi-Fi з коду: при першому запуску ESP32 піднімає власну точку доступу з веб-формою, де можна вибрати мережу й задати власні параметри.
Проблема
У більшості прикладів SSID і пароль зашиті прямо в скетч. Це незручно: змінився роутер — перепрошивай; віддав пристрій другу — перепрошивай. Бібліотека WiFiManager вирішує це так само, як «розумні» розетки з магазину:
- Якщо плата не знає мережі або не може до неї підключитися — вона створює точку доступу
ESP32-Setup. - Ви підключаєтеся до неї з телефона — автоматично відкривається сторінка налаштування (captive portal).
- Обираєте мережу зі списку, вводите пароль — і плата запам'ятовує його у флеш-пам'яті.
Цей підхід варто додавати в будь-який проєкт з цього сайту, який ви плануєте використовувати постійно.
Що знадобиться
- Будь-яка плата ESP32
- Бібліотека WiFiManager (автор tzapu) — встановіть через Library Manager
Код
Окрім Wi-Fi, портал збереже ще й власний параметр — адресу MQTT-сервера. Утримання кнопки BOOT 3 секунди під час старту скидає налаштування.
#include <WiFi.h>
#include <WiFiManager.h>
#include <Preferences.h>
const int RESET_PIN = 0; // кнопка BOOT
WiFiManager wm;
Preferences prefs;
char mqttHost[40] = "";
void setup() {
Serial.begin(115200);
pinMode(RESET_PIN, INPUT_PULLUP);
// Власні параметри зберігаємо в NVS (енергонезалежна пам'ять)
prefs.begin("config", false);
prefs.getString("mqtt", mqttHost, sizeof(mqttHost));
// BOOT утримується 3 с при старті → забути Wi-Fi
if (digitalRead(RESET_PIN) == LOW) {
delay(3000);
if (digitalRead(RESET_PIN) == LOW) {
Serial.println("Resetting Wi-Fi settings");
wm.resetSettings();
}
}
WiFiManagerParameter mqttParam("mqtt", "MQTT server", mqttHost, sizeof(mqttHost) - 1);
wm.addParameter(&mqttParam);
wm.setConfigPortalTimeout(180); // 3 хв на налаштування, потім перезавантаження
if (!wm.autoConnect("ESP32-Setup", "setup1234")) {
Serial.println("Portal timeout, restarting");
ESP.restart();
}
strlcpy(mqttHost, mqttParam.getValue(), sizeof(mqttHost));
prefs.putString("mqtt", mqttHost);
Serial.printf("Connected! IP: %s, MQTT: %s\n",
WiFi.localIP().toString().c_str(), mqttHost);
}
void loop() {
// ваш основний код
}
Як користуватися
- Прошийте плату й відкрийте Serial Monitor.
- На телефоні підключіться до мережі ESP32-Setup (пароль
setup1234). - Якщо сторінка не відкрилась сама — зайдіть на
http://192.168.4.1. - Configure WiFi → оберіть мережу, введіть пароль і адресу MQTT → Save.
- Плата підключиться до роутера. Наступні запуски відбуватимуться автоматично, без порталу.
Корисні налаштування
| Метод | Навіщо |
|---|---|
wm.setConnectTimeout(20) |
Скільки секунд чекати на підключення до збереженої мережі |
wm.setConfigPortalBlocking(false) + wm.process() у loop() |
Портал не блокує решту коду |
wm.setHostname("kitchen-sensor") |
Ім'я пристрою в роутері |
wm.startConfigPortal("ESP32-Setup") |
Відкрити портал вручну, наприклад за натисканням кнопки |
Поради
- Пароль точки доступу має бути мінімум 8 символів, інакше вона не запуститься.
- Якщо у вас кілька однакових пристроїв, додайте до назви точки доступу частину MAC-адреси, щоб їх розрізняти.
- WiFiManager підтримує лише мережі 2.4 ГГц — як і сам ESP32.