Введение: почему мы хотим видеть самолеты прямо на своем столе?
Представьте: пятничный вечер, вы пьете кофе за рабочим столом, а краем глаза замечаете, как на крошечном цветном экранчике плавно смещается зеленая точка. Это летит утренний рейс из Москвы во Владивосток — прямо над вашей крышей, хотя в комнате даже не слышно гула турбин. В эпоху, когда за окном проносятся тысячи тонн металла, а мы заперты в рутине дедлайнов (которые горят ярче любого релиза в пятницу вечер), этот миниатюрный гаджет возвращает в будни ту самую детскую магию технологий.
Идея создания настольного авиарадара на базе популярного микроконтроллера ESP32 — это идеальный IoT-проект для тех выходных, когда хочется поработать паяльником и увидеть реальный результат, а не очередной бесконечный рефакторинг легаси. Он объединяет работу с беспроводными сетями, парсинг данных в реальном времени, вывод графики и базовую тригонометрию. Давайте разберем, как собрать компактный радар воздушного движения, отслеживающий самолеты в радиусе нескольких километров от вашего дома.
Но прежде чем мы начнем складывать компоненты на коленке, давайте перейдем к материальной базе нашего мини-локатора.
Архитектура проекта и выбор аппаратной платформы
Прежде чем писать код на C++ в Arduino IDE, определимся с «железом». Нам понадобится минимальный набор компонентов, доступный в любом радиомагазине или на AliExpress:
- Микроконтроллер ESP32 NodeMCU: Двухъядерный процессор (до 240 МГц), встроенный Wi-Fi модуль для запросов к API и достаточный объем RAM для сетевых буферов.
- Дисплей ILI9341 (TFT 2.4" или 2.8", 320x240 пикселей): Обеспечивает цветное и детальное отображение сетки радара и меток самолетов. Как альтернативу можно использовать круглый GC9A01 (1.28") для аутентичного вида.
- Соединительные провода и макетная плата (Breadboard) для прототипирования.
Схема подключения дисплея ILI9341 к ESP32 по протоколу SPI
Для подключения используем аппаратный SPI на ESP32. Стандартная распиновка выглядит следующим образом:
// Пины для подключения дисплея ILI9341 к ESP32
#define TFT_CS 15
#define TFT_RST 4
#define TFT_DC 2
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_MISO 19
#define TFT_BL 32 // Подсветка экрана
Когда провода займут свои места в пинах, перед нами встанет главный вопрос: откуда же брать координаты сотен летящих лайнеров без покупки дорогостоящих локаторов?
Откуда берутся данные? Магия ADS-B и открытые API
Ставить дома радиолокатор не нужно — современные коммерческие самолеты оснащены транспондерами системы ADS-B (Automatic Dependent Surveillance-Broadcast). Они открыто передают свои GPS-координаты, высоту, скорость и позывные на частоте 1090 МГц.
Существуют агрегаторы вроде Flightradar24 или ADSBexchange, которые собирают эти данные через сеть наземных приемников. Мы можем отправлять HTTP-запросы к открытым эндпоинтам или использовать локальный приемник (например, RTL-SDR флешку дома), но для простого настольного гаджета проще всего задействовать публичные API с фильтрацией по географическим координатам (bounding box).
Теперь, когда поток данных из виртуального неба поступает к нам по воздуху (и главное — работает стабильнее, чем «у меня на машине»), пора заставить ESP32 обрабатывать его и выводить на экран.
Пишем код: получаем данные и рисуем радар
Проект условно делится на три задачи: подключение к Wi-Fi, периодический GET-запрос к API с парсингом JSON и отрисовка объектов на экране.
1. Настройка сетевого соединения
Используем стандартную библиотеку WiFi.h для ESP32:
#include <WiFi.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
void setupWiFi() {
delay(10);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
}