Чипы ESP32 давно используют для всего подряд — от простых IoT-устройств до проектов с ИИ, звуком и компьютерным зрением. Но по-настоящему любопытна прошивка ESP-SDR: она превращает ESP32 в нативное программно-определяемое радио (SDR) без какого-либо дополнительного оборудования.

Эта открытая прошивка обходит жёстко заданные модемы Wi-Fi и Bluetooth у ESP32 и подключается напрямую к внутреннему тракту АЦП, снимая сырые I/Q-отсчёты основной полосы. Затем она отправляет их на компьютер по USB или UART, где сигнал можно обработать и показать в виде радиоспектра или «водопада» — так поддерживаемые чипы превращаются в дешёвые SDR-приёмники.

Плата ESP32 рядом с экраном спектра и водопада сигнала

Самый знаменитый SDR — это RTL-SDR, тюнер цифрового ТВ, в котором когда-то нашли недокументированную возможность. Логично было предположить, что подобная «фишка» спрятана и в других радиочипах, — и в случае ESP32 так и оказалось. Причём обнаружили её независимо в двух местах: команда проекта Espargos и пользователь Reddit под ником h0m3us3r. Режим работает только на приём и только на чипах ESP32 с более ранней архитектурой Tensilica и новее — маломощные Bluetooth-чипы и лишённый радио P4 не подойдут.

Чип ESP32 как программно-определяемое радио

Ключевые возможности и поддерживаемое железо:

реклама кормит Уточку 🦆
  • Поддерживаемые чипы — ESP32, ESP32-C3, ESP32-C5 (двухдиапазонный 2,4/5 ГГц), ESP32-C6, ESP32-C61, ESP32-S2, ESP32-S3 и предварительный ESP32-S31.
  • Диапазон настройки — номинально 2,4 ГГц ISM (2,2–2,7 ГГц на части чипов) и 5 ГГц (4,8–6,0 ГГц на ESP32-C5); C61 настраивается до 2,7 ГГц и ловит сигналы LTE Band 7 и 5G NR Band n7.
  • Частота дискретизации и полоса — до 80 MSa/s при полосе примерно 13–54 МГц в зависимости от чипа.
  • FFT на чипе — прошивка поддерживает преобразование Фурье прямо на кристалле и передаёт компактные данные спектра вместо сырых I/Q-отсчётов.

По словам разработчиков, инженеры Espressif, судя по всему, оставили отладочный тракт I/Q-дискретизации в кремнии для заводского тестирования пластин. С помощью больших языковых моделей команда провела реверс-инжиниринг функции adctrig в библиотеке Espressif librftest и разобралась, как настраивать специальные отладочные регистры.

Прошивка ESP-SDR обходит Wi-Fi-модемПрошивка ESP-SDR обходит Wi-Fi-модем

реклама кормит Уточку 🦆

После активации ESP32 пишет сырые I/Q-отсчёты прямо во внутреннюю SRAM, а прошивка через кольцевой буфер перегоняет их на компьютер по USB или UART. Чтобы увидеть пойманные сигналы, нужен ESP-WebSDR — браузерный инструмент, который подключается к ESP32 по USB и показывает спектр и водопад в реальном времени. Через него же можно прошить сам ESP-SDR прямо из поддерживаемого браузера вроде Chrome или Edge.

Браузерный интерфейс ESP-WebSDR со спектром и водопадом

ESP32 быстр и способен захватывать данные со скоростью до 80 MSa/s — это около 2,56 Гбит/с, — но главная проблема в том, чтобы вытащить весь этот поток с чипа. USB и UART такую скорость не тянут, поэтому ESP-WebSDR делает короткие I/Q-снимки и из них строит спектр и водопад, из-за чего может пропускать сигналы, пришедшие между «окнами» захвата. Для непрерывной передачи команда готовит SoapyESPSDR для ESP32-S31: он сможет стримить I/Q-данные по гигабитному Ethernet на скорости 8–16 MSa/s в программы вроде GNU Radio и Gqrx.

реклама кормит Уточку 🦆

Прежние радио- и SDR-проекты на ESP32 всё равно опирались на внешний приёмник или на уже обработанные данные Wi-Fi. ESP-SDR же использует встроенное радио самого ESP32, так что никакого отдельного SDR-оборудования не требуется. Это делает базовый анализ спектра возможным на плате ESP32, которая может стоить меньше $5.

Разработчики Флориан Эйхнер и Золтан Доци из проекта ESPARGOS наткнулись на эту возможность, работая над ESPARGOS One — связкой из восьми антенн для Wi-Fi-зондирования. С ESP-SDR она может работать и как восьмиканальный SDR, обнаруживая и локализуя сигналы вроде Bluetooth LE и Zigbee в диапазоне 2,4 ГГц.

И ESP-SDR, и ESP-WebSDR — открытые проекты под лицензией GPL-3.0: исходный код лежит на GitHub, а браузерное демо можно попробовать с совместимой отладочной платой ESP32. В репозитории ESP-WebSDR авторы оставили отдельную пометку об использовании ИИ:

Часть этого кода сгенерирована ИИ. Мы вложили немало ручного труда в pyespargos и прошивку для наших массивов ESPARGOS One, но у нас нет времени вручную просматривать весь исходный код ESP-WebSDR.