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

Теперь немного скучной, но важной теории. Уровень сигнала 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 для полевых испытаний.

Схема подключения: "Соедини меня, если сможешь"
Тут всё просто, как двери (если знать, где ручка):
OLED дисплей:
- SDA → пин D2 на ESP8266 (это GPIO4)
- SCL → пин D1 на ESP8266 (это GPIO5)
- VCC → 3.3V на ESP8266
- GND → GND на ESP8266
Кнопка:
- Один контакт кнопки → пин D5 на ESP8266 (GPIO14)
- Другой контакт кнопки → GND на ESP8266

Маленький совет: перед подключением всегда сверяйтесь с распиновкой именно вашей платы ESP8266, потому что китайские друзья любят сюрпризы!
Скетч: Магия кода, оживляющая железо
Сам код мы здесь разбирать по косточкам не будем (хотя там ничего сверхсложного). Главное, что он делает:
- При старте или нажатии кнопки ESP начинает активно "принюхиваться" к эфиру, ища все доступные Wi-Fi сети.
- Найденные сети она аккуратно сортирует: самые мощные – наверх списка, самые слабые – скромно жмутся внизу.
- На дисплей выводится имя сети (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 разведку!
Убедитесь, что все необходимые библиотеки для вашего OLED-дисплея (обычно это что-то вроде Adafruit_SSD1306 и Adafruit_GFX, а также стандартная ESP8266WiFi) установлены в вашем Arduino IDE. Загружаем скетч в ESP.
И вот оно! На дисплее сначала появится короткий текст типа "Scanning Wi-Fi...", а затем – список сетей с их силой.
Используйте код с осторожностью.
Теперь берём наше устройство и идём на "тихую охоту". Нажатие кнопки запускает повторное сканирование – очень удобно, когда переместился на пару сантиметров и хочешь увидеть, стало ли лучше (или, не дай Бог, хуже). По самому высокому значению сигнала для вашей сети можно будет чётко определить, "увидит" ли ESP ваш роутер в этом месте, или стоит поискать другое.

Почему это круто?
Желаю и вам крепкого сигнала сети, надёжного коннекта и удачных DIY-проектов! Пусть ваши ESP всегда будут онлайн!
© 2025 Мой Проект. Автор: Ardu_miha. Использование материалов разрешено только с ссылкой на источник.
Написать комментарий