Создаем Wi-Fi сканер на ESP32 с удобным веб-интерфейсом.

Время чтения: 15 минут | Польза: Высокая – создайте профессиональный инструмент для анализа Wi-Fi сетей


Эта статья предоставит вам полный код и подробные инструкции по созданию Wi-Fi сканера на ESP32 с удобным HTML интерфейсом. Вы сможете сканировать доступные сети, видеть их названия и уровень сигнала в реальном времени через веб-браузер.

Основные возможности проекта:

  • ✅ Автоматическое сканирование Wi-Fi сетей
  • ✅ Отображение SSID (названий сетей) и RSSI (уровня сигнала)
  • ✅ Цветовая индикация качества сигнала
  • ✅ Веб-интерфейс с автоматическим обновлением
  • ✅ Отображение каналов и типа шифрования
  • ✅ Работа в режиме точки доступа (Access Point)

Эта статья предоставит вам полный код и подробные инструкции по созданию Wi-Fi сканера на ESP32 с удобным HTML интерфейсом.


Необходимые компоненты.

  1. Плата ESP32 (например, ESP32 DevKitC)
  2. USB-кабель для подключения к ПК
  3. Arduino IDE с поддержкой ESP32
  4. Любое устройство с браузером для доступа к интерфейсу

Полный код проекта.

#include <WiFi.h>
#include <WebServer.h>
WebServer server(80);
// Глобальные переменные
const int scanInterval = 5000; // Интервал сканирования в миллисекундах (5 секунд)
unsigned long lastScanTime = 0;
// Настройки точки доступа
const char* apSSID = "ESP32_WiFi_Scanner";
const char* apPassword = "12345678";
// Функция для генерации HTML контента
String getHTMLContent() {
  String html = "<!DOCTYPE html>";
  html += "<html><head>";
  html += "<meta charset='UTF-8'>";
  html += "<meta http-equiv='refresh' content='5'>"; // Автоматическое обновление каждые 5 секунд
  html += "<title>ESP32 Wi-Fi Scanner</title>";
  html += "<style>";
  html += "body { font-family: Arial, sans-serif; margin: 20px; background-color: #f5f5f5; }";
  html += "h1 { color: #2c3e50; text-align: center; margin-bottom: 30px; }";
  html += "table { border-collapse: collapse; width: 100%; max-width: 800px; margin: 0 auto; }";
  html += "th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }";
  html += "th { background-color: #3498db; color: white; font-weight: bold; }";
  html += "tr:nth-child(even) { background-color: #f9f9f9; }";
  html += "tr:hover { background-color: #e8f4f8; }";
  html += ".strong { color: #27ae60; font-weight: bold; }";
  html += ".medium { color: #f39c12; font-weight: bold; }";
  html += ".weak { color: #e74c3c; font-weight: bold; }";
  html += ".info { text-align: center; color: #7f8c8d; margin-bottom: 20px; }";
  html += ".ap-info { background-color: #e8f4f8; padding: 15px; border-radius: 5px; margin-bottom: 20px; }";
  html += "</style>";
  html += "</head><body>";
  html += "<h1> ESP32 Wi-Fi Scanner</h1>";
  html += "<div class='ap-info'>";
  html += "<p><strong>Точка доступа:</strong> " + String(apSSID) + "</p>";
  html += "<p><strong>Пароль:</strong> " + String(apPassword) + "</p>";
  html += "<p><strong>IP адрес ESP32:</strong> 192.168.4.1</p>";
  html += "</div>";
  html += "<p class='info'>Последнее обновление: " + String(millis()/1000) + " сек назад</p>";
  html += "<table><tr><th>SSID</th><th>Сила сигнала (dBm)</th><th>Качество</th><th>Канал</th><th>Защита</th></tr>";
  return html;
}
void setup() {
  Serial.begin(115200);
  // Настройка точки доступа
  WiFi.softAP(apSSID, apPassword);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);
  // Запуск веб-сервера
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP сервер запущен");
  Serial.println("Подключитесь к точке доступа: " + String(apSSID));
  Serial.println("IP адрес: 192.168.4.1");
}
void loop() {
  unsigned long currentTime = millis();
  // Проверка времени для нового сканирования
  if (currentTime - lastScanTime > scanInterval) {
    lastScanTime = currentTime;
    WiFi.scanNetworks(true); // Асинхронное сканирование
  }
  server.handleClient(); // Обработка HTTP запросов
}
void handleRoot() {
  String html = getHTMLContent();
  int n = WiFi.scanComplete();
  if (n == -2) {
    // Сканирование в процессе
    html += "<tr><td colspan='5' style='text-align: center; font-style: italic;'>Сканирование в процессе...</td></tr>";
  } else if (n == -1) {
    // Ошибка сканирования
    html += "<tr><td colspan='5' style='text-align: center; color: #e74c3c;'>Ошибка сканирования!</td></tr>";
    WiFi.scanNetworks(true); // Повторное сканирование
  } else {
    // Вывод найденных сетей
    for (int i = 0; i < n; i++) {
      // Определение качества сигнала
      String rssiClass = "weak";
      String qualityText = "Слабый";
      if (WiFi.RSSI(i) > -60) {
        rssiClass = "strong";
        qualityText = "Отличный";
      } else if (WiFi.RSSI(i) > -75) {
        rssiClass = "medium";
        qualityText = "Хороший";
      }
      // Определение типа защиты
      String securityType = "Открытая";
      int encryptionType = WiFi.encryptionType(i);
      if (encryptionType == WIFI_AUTH_WPA2_PSK || encryptionType == WIFI_AUTH_WPA_WPA2_PSK) {
        securityType = "WPA2";
      } else if (encryptionType == WIFI_AUTH_WPA_PSK) {
        securityType = "WPA";
      } else if (encryptionType == WIFI_AUTH_WEP) {
        securityType = "WEP";
      } else if (encryptionType == WIFI_AUTH_OPEN) {
        securityType = "Открытая";
      }
      html += "<tr>";
      html += "<td>" + WiFi.SSID(i) + "</td>";
      html += "<td class='" + rssiClass + "'>" + String(WiFi.RSSI(i)) + "</td>";
      html += "<td class='" + rssiClass + "'>" + qualityText + "</td>";
      html += "<td>" + String(WiFi.channel(i)) + "</td>";
      html += "<td>" + securityType + "</td>";
      html += "</tr>";
    }
    // Очистка данных и запуск нового сканирования
    WiFi.scanDelete();
    WiFi.scanNetworks(true);
  }
  html += "</table></body></html>";
  server.send(200, "text/html", html);
}

Подробное описание кода (режим точки доступа).

1. Подключение библиотек.

#include <WiFi.h>      // Основная библиотека для работы с Wi-Fi на ESP32
#include <WebServer.h> // Библиотека для создания веб-сервера

2. Глобальные переменные и настройки точки доступа.

WebServer server(80);          // Веб-сервер на порту 80 (стандартный HTTP порт)
const int scanInterval = 5000; // Интервал сканирования 5 секунд
unsigned long lastScanTime = 0; // Хранит время последнего сканирования
// Настройки точки доступа
const char* apSSID = "ESP32_WiFi_Scanner";    // Имя точки доступа
const char* apPassword = "12345678";          // Пароль точки доступа

3. Функция setup() - настройка точки доступа.

void setup() {
  Serial.begin(115200);
  // Настройка точки доступа
  WiFi.softAP(apSSID, apPassword);  // Создаем точку доступа
  IPAddress IP = WiFi.softAPIP();   // Получаем IP адрес точки доступа
  Serial.print("AP IP address: ");
  Serial.println(IP);               // Выводим IP в монитор порта
  // Запуск веб-сервера
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP сервер запущен");
  Serial.println("Подключитесь к точке доступа: " + String(apSSID));
  Serial.println("IP адрес: 192.168.4.1");
}

Ключевые моменты:

  • WiFi.softAP() создает точку доступа вместо подключения к роутеру
  • WiFi.softAPIP() возвращает IP адрес точки доступа (всегда 192.168.4.1)
  • Нет подключения к внешней Wi-Fi сети

Инструкция по подключению и настройке (режим точки доступа).

Шаг 1: Установка Arduino IDE и ESP32 (если еще не установлен).

  1. Скачайте Arduino IDE с официального сайта: arduino.cc
  2. Добавьте поддержку ESP32:
    • Откройте Файл > Предпочтения
    • В поле "Дополнительные URLs для менеджера плагинов" добавьте:
      https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    • Перейдите в Скетч > Подключить библиотеку > Менеджер библиотек
    • Найдите "esp32" и установите.

Шаг 2: Подключение ESP32.

  1. Подключите ESP32 к компьютеру через USB-кабель.
  2. В Arduino IDE выберите:
    • Плата: ESP32 Arduino > ESP32 Dev Module
    • Порт: выберите соответствующий COM порт.

Шаг 3: Загрузка кода.

  1. Скопируйте полный код выше.
  2. Вставьте его в Arduino IDE.
  3. Нажмите кнопку "Загрузить" (стрелка вправу).
  4. Дождитесь завершения загрузки.

Шаг 4: Получение IP адреса (исправленная инструкция).

В режиме точки доступа:

  1. Откройте монитор порта (кнопка Ctrl+Shift+M или Инструменты > Монитор порта)
  2. Установите скорость: 115200.
  3. В выводе вы увидите сообщения:
    AP IP address: 192.168.4.1
    HTTP сервер запущен
    Подключитесь к точке доступа: ESP32_WiFi_Scanner
    IP адрес: 192.168.4.1
    
  4. IP адрес ESP32 всегда будет: 192.168.4.1 (это стандарт для точки доступа ESP32)

IP адрес ESP32 всегда будет: 192.168.4.1 (это стандарт для точки доступа ESP32)


Как использовать интерфейс (режим точки доступа).

  1. Подключитесь к точке доступа ESP32 с вашего смартфона, планшета или компьютера:
    • Имя сети: ESP32_WiFi_Scanner
    • Пароль: 12345678
  2. Откройте веб-браузер на устройстве, подключенном к точке доступа ESP32.
  3. Введите адрес: http://192.168.4.1
  4. Наблюдайте за обновляющейся таблицей с Wi-Fi сетями, которые ESP32 сканирует.

Важно: Интерфейс доступен только с устройств, подключенных к точке доступа ESP32!

Как использовать интерфейс (режим точки доступа).

Введите адрес: http://192.168.4.1


Дополнительные настройки.

Изменение имени и пароля точки доступа.

Измените эти значения в начале кода:

const char* apSSID = "MyWiFiScanner";    // Новое имя точки доступа
const char* apPassword = "mysecurepass"; // Новый пароль (минимум 8 символов)

Изменение интервала сканирования.

Измените значение в начале кода:

const int scanInterval = 10000; // 10 секунд

Фильтрация по минимальному уровню сигнала.

Добавьте в функцию handleRoot() перед выводом сетей:

int minRSSI = -80; // Минимальный уровень сигнала для отображения
for (int i = 0; i < n; i++) {
  if (WiFi.RSSI(i) > minRSSI) {
    // Код вывода для этой сети
  }
}

Убедитесь, что устройство подключено к точке доступа ESP32, а не к другому Wi-Fi.

Частые проблемы и решения.

Проблема 1: Не могу подключиться к точке доступа.

Решение:

  • Убедитесь, что пароль введен правильно (минимум 8 символов).
  • Проверьте, что ESP32 загружен и работает.
  • Попробуйте перезагрузить ESP32.

Проблема 2: Нет доступа к интерфейсу.

Решение:

  • Убедитесь, что устройство подключено к точке доступа ESP32, а не к другому Wi-Fi.
  • Проверьте, что вводите правильный IP: http://192.168.4.1
  • Попробуйте обновить страницу (Ctrl+F5).

Проблема 3: Сканирование не работает.

Решение:

  • Убедитесь, что ESP32 загружен правильно.
  • Проверьте код на ошибки в Arduino IDE.
  • Увеличьте интервал сканирования.

Убедитесь, что устройство подключено к точке доступа ESP32, а не к другому Wi-Fi.


Польза и применение.

Преимущества режима точки доступа:

  • Не требует подключения к существующей Wi-Fi сети.
  • Работает с любыми устройствами (смартфоны, планшеты, ноутбуки).
  • Полная автономность - ESP32 создает собственную сеть.
  • Сканирует все доступные Wi-Fi сети в радиусе действия.

Применение:

  • Анализ покрытия Wi-Fi в квартире.
  • Аудит корпоративных сетей.
  • Диагностика проблем с подключением.
  • Мониторинг качества сигнала в разных точках.

Вы создали полноценный Wi-Fi сканер на ESP32, работающий в режиме точки доступа. Этот инструмент не требует подключения к внешней Wi-Fi сети и создает собственную сеть для доступа к веб-интерфейсу.

Заключение.

Вы создали полноценный Wi-Fi сканер на ESP32, работающий в режиме точки доступа. Этот инструмент не требует подключения к внешней Wi-Fi сети и создает собственную сеть для доступа к веб-интерфейсу.

Ключевые особенности режима точки доступа:

  • ✅ Автономная работа без внешнего роутера.
  • ✅ Статический IP адрес (192.168.4.1).
  • ✅ Доступ с любого устройства через Wi-Fi.
  • ✅ Полный контроль над сетевыми настройками.

Следующие шаги:

  1. Экспериментируйте с разными именами и паролями точки доступа.
  2. Добавляйте новые функции по вашему усмотрению.
  3. Создавайте продвинутые версии для конкретных задач.

Дополнительные материалы:

Теперь у вас есть мощный инструмент для анализа Wi-Fi сетей, работающий в полностью автономном режиме!


Понравилась статья Создаем Wi-Fi сканер на ESP32 с удобным веб-интерфейсом? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на VK Видео, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Комментарии

Ваше Имя*


Разработка проектов
EasyHMI
Умный Дом