Введение: почему мы хотим видеть самолеты прямо на своем столе?

Представьте: пятничный вечер, вы пьете кофе за рабочим столом, а краем глаза замечаете, как на крошечном цветном экранчике плавно смещается зеленая точка. Это летит утренний рейс из Москвы во Владивосток — прямо над вашей крышей, хотя в комнате даже не слышно гула турбин. В эпоху, когда за окном проносятся тысячи тонн металла, а мы заперты в рутине дедлайнов (которые горят ярче любого релиза в пятницу вечер), этот миниатюрный гаджет возвращает в будни ту самую детскую магию технологий.

Идея создания настольного авиарадара на базе популярного микроконтроллера 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!");
}