Каталог товаров
Клиенту
Тема сайта:
+38 (066) 305-77-25
Наш адрес
Харьков, времено - только доставка Новой Почтой, УкрПочтой, МистЕкспрес, ROZETKA Delivery
Телефоны:
Время работы
  • Пн-Пт: с 9 до 18
  • Сб.: с 10 до 17
  • Вс: с 11 до 16
E-mail
Мы в соцсетях
Перейти в контакты
0 0
Каталог
Главная
Закладки
0
Сравнить
0
Контакты

Давай измерим "его"!

Чи була корисною ця стаття?
Давай измерим "его"!

Введение: Драма одного датчика

Идея для этого мега-полезного (без сарказма!) проекта зародилась, как и все гениальные идеи, с лёгкой ноткой отчаяния. Представьте себе: частный дом, свежий воздух, пение птичек... и я, бегаю по двору, как ошпаренный, с датчиком температуры в одной руке и телефоном в другой. Миссия: найти идеальное место, где бы этот маленький умник не только показывал температуру, но и стабильно ловил Wi-Fi.

Телефон бодро рапортовал: "Шеф, тут три деления, всё чётко!". Я, наивно поверив, монтирую ESP... и тишина. Ни одного коннекта. Оказалось, что мой телефон – тот ещё оптимист (или просто хотел меня подбодрить), а вот ESP – суровый реалист. Антенны у них, как оказалось, совсем разные, как вкусы на музыку у родителей и детей. Поэтому и решил: искать место для ESP нужно... самой ESP! 😁 Кто лучше знает, что ей нужно, как не она сама?

Поиск сигнала Wi-Fi Поиск идеального сигнала Wi-Fi

Теперь немного скучной, но важной теории. Уровень сигнала Wi-Fi измеряется в dBm (децибел-милливатт). Это такая хитрая штука, где числа обычно отрицательные, и чем ближе к нулю, тем сигнал круче (например, -30 dBm – это просто космос, а -90 dBm – ну, вы поняли, почти "абонент не абонент"). Чтобы не ломать голову над этими мистическими цифрами и не гуглить каждый раз "dBm to human language converter", я решил перевести всё в понятные проценты. 100% – ты бог Wi-Fi, сигнал как скала! 0% – пора вызывать шамана или переезжать поближе к роутеру.

Что нам понадобится для этого Wi-Fi сафари:

  • Мозг операции, ESP8266 (или ESP32, если есть): Этот маленький герой будет нашим главным разведчиком. Модель типа NodeMCU или Wemos D1 Mini – то, что доктор прописал.
  • Глаза проекта, OLED дисплей 0,96" I2C: Чтобы не бегать с ноутбуком, а видеть всё своими глазами здесь и сейчас. Маленький, но удаленький!
  • Волшебная кнопка (любая тактовая): Для запуска сканирования "на бис", когда мы уже думаем, что нашли ТО САМОЕ место, но хочется проверить ещё раз. Или просто нравится нажимать кнопки.
  • Провода DuPont (мама-папа, мама-мама): Наши верные помощники в соединении всего этого добра.
  • Breadboard (макетная плата, опционально): Если не хотите сразу паять, а любите экспериментировать.
  • Источник питания: USB-кабель от компьютера на время прошивки и тестирования, или Power Bank для полевых испытаний.
Компоненты для Wi-Fi сканера Все необходимые компоненты для проекта

Схема подключения: "Соедини меня, если сможешь"

Тут всё просто, как двери (если знать, где ручка):

OLED дисплей:

  • SDA → пин D2 на ESP8266 (это GPIO4)
  • SCL → пин D1 на ESP8266 (это GPIO5)
  • VCC → 3.3V на ESP8266
  • GND → GND на ESP8266

Кнопка:

  • Один контакт кнопки → пин D5 на ESP8266 (GPIO14)
  • Другой контакт кнопки → GND на ESP8266
Схема подключения Схема подключения компонентов

Маленький совет: перед подключением всегда сверяйтесь с распиновкой именно вашей платы ESP8266, потому что китайские друзья любят сюрпризы!

Скетч: Магия кода, оживляющая железо

Сам код мы здесь разбирать по косточкам не будем (хотя там ничего сверхсложного). Главное, что он делает:

  1. При старте или нажатии кнопки ESP начинает активно "принюхиваться" к эфиру, ища все доступные Wi-Fi сети.
  2. Найденные сети она аккуратно сортирует: самые мощные – наверх списка, самые слабые – скромно жмутся внизу.
  3. На дисплей выводится имя сети (SSID) и тот самый, переведённый в проценты, уровень сигнала. Всё чётко и понятно!

Бонус для шпионов:

Наш сканер находит даже скрытые сети (те, что не транслируют своё имя) и помечает их как HIDDEN. Теперь вы знаете, сколько тайных агентов живёт по соседству! Можно делать шпионские штучки... ну, или просто удовлетворить своё любопытство. 😉

#include 
#include 
#include 
#include 

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define BTN_SCAN D5
#define MAX_DISPLAY_NETWORKS 5
#define MAX_NETWORKS 50

int totalNetworks = 0;
String networks[MAX_NETWORKS];
int rssiValues[MAX_NETWORKS];

void setup() {
  Serial.begin(115200);
  
  Wire.begin(D2, D1);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED error!");
    while(1);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  
  pinMode(BTN_SCAN, INPUT_PULLUP);

  display.setCursor(0, 0);
  display.println("Starting in 3 sec...");
  display.display();
  delay(3000);
  scanNetworks();
}

void loop() {
  if (digitalRead(BTN_SCAN) == LOW) {
    delay(200);
    scanNetworks();
    while(digitalRead(BTN_SCAN) == LOW); // Ждём отпускания
  }
}

int rssiToPercent(int rssi) {
  if (rssi >= -30) return 100;
  if (rssi <= -100) return 0;
  return 2 * (rssi + 100);
}

// Функция для сортировки сетей по уровню сигнала
void sortNetworksByRSSI(String networkList[], int rssiList[], int size) {
  for (int i = 0; i < size - 1; i++) {
    for (int j = 0; j < size - i - 1; j++) {
      if (rssiList[j] < rssiList[j + 1]) {
        // Меняем местами RSSI
        int tempRssi = rssiList[j];
        rssiList[j] = rssiList[j + 1];
        rssiList[j + 1] = tempRssi;
        
        // Меняем местами соответствующие строки сетей
        String tempNetwork = networkList[j];
        networkList[j] = networkList[j + 1];
        networkList[j + 1] = tempNetwork;
      }
    }
  }
}

void scanNetworks() {
  display.clearDisplay();
  display.setCursor(0, 0);
  display.println("Scan...");
  display.display();

  int n = WiFi.scanNetworks(false, true);
  totalNetworks = min(n, MAX_NETWORKS);

  if (n == 0) {
    networks[0] = "No net!";
    rssiValues[0] = 0;
    totalNetworks = 1;
  } else {
    for (int i = 0; i < totalNetworks; i++) {
      String ssid = (WiFi.SSID(i).length() == 0 ? "[HIDDEN]" : WiFi.SSID(i));
      rssiValues[i] = WiFi.RSSI(i);
      int percent = rssiToPercent(rssiValues[i]);
      networks[i] = ssid + " " + String(percent) + "%";
    }
    
    // Сортируем сети по уровню сигнала
    sortNetworksByRSSI(networks, rssiValues, totalNetworks);
  }
  
  displayResults();
}

void displayResults() {
  display.clearDisplay();
  display.setCursor(0, 0);
  
  for (int i = 0; i < min(totalNetworks, MAX_DISPLAY_NETWORKS); i++) {
    display.print(String(i+1) + ". ");
    display.println(networks[i]);
  }
  
  display.display();
}
Полный скетч для Wi-Fi сканера

Запускаем нашу Wi-Fi разведку!

Убедитесь, что все необходимые библиотеки для вашего OLED-дисплея (обычно это что-то вроде Adafruit_SSD1306 и Adafruit_GFX, а также стандартная ESP8266WiFi) установлены в вашем Arduino IDE. Загружаем скетч в ESP.

И вот оно! На дисплее сначала появится короткий текст типа "Scanning Wi-Fi...", а затем – список сетей с их силой.

OLED Display:
Сеть Соседа_Сверху 75%
МОЯ_РОДНАЯ_СЕТЬ 68%
Кафе "Ромашка" 50%
HIDDEN 45%
Guest_Free_WiFi 30%

Используйте код с осторожностью.

Теперь берём наше устройство и идём на "тихую охоту". Нажатие кнопки запускает повторное сканирование – очень удобно, когда переместился на пару сантиметров и хочешь увидеть, стало ли лучше (или, не дай Бог, хуже). По самому высокому значению сигнала для вашей сети можно будет чётко определить, "увидит" ли ESP ваш роутер в этом месте, или стоит поискать другое.

Тестирование Wi-Fi сканера Тестирование устройства в реальных условиях

Почему это круто?

Точность

Измерение самой ESP даёт реальную картину.

Мобильность

С Power Bank'ом можно обойти хоть весь огород.

Наглядность

Проценты гораздо понятнее, чем dBm, для быстрой оценки.

Простота

Собрал, прошил, пользуешься.

Фактор "Я это сделал!"

Бесценный.

Желаю и вам крепкого сигнала сети, надёжного коннекта и удачных DIY-проектов! Пусть ваши ESP всегда будут онлайн!

Вместе с myproject.com.ua

Автор Ardu_miha

© 2025 Мой Проект. Автор: Ardu_miha. Использование материалов разрешено только с ссылкой на источник.

Рекомендуемые товары
Похожие статьи
Операция "Неприступный Шкаф"
Операция "Неприступный Шкаф"
Блог, Инструкции Подключения и Обзоры, Интересное и Полезное
06 апреля
Мой АмперМетр
Мой АмперМетр
Блог, Инструкции Подключения и Обзоры
14 апреля
Serial Monitor to .txt
Serial Monitor to .txt
Блог, Инструкции Подключения и Обзоры
15 апреля
Безопасная пайка
Безопасная пайка
Блог, Интересное и Полезное
21 апреля