Каталог товарів
Клієнту
Тема сайту:
+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 <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#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%

Use code with caution.

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

Тестування Wi-Fi сканера Тестування пристрою в реальних умовах

Чому це круто?

Точність

Вимірювання самою ESP дає реальну картину.

Мобільність

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

Наочність

Відсотки набагато зрозуміліші за dBm для швидкої оцінки.

Простота

Зібрав, прошив, користуєшся.

Фактор "Я це зробив!"

Безцінний.

Бажаю і вам міцного сигналу мережі, надійного коннекту та вдалих DIY-проектів! Нехай ваші ESP завжди будуть онлайн!

Разом з myproject.com.uа

Автор Ardu_miha

© 2025 Мій Проект. Автор: Ardu_miha. Використання матеріалів дозволено лише з посиланням на джерело.

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