SDR-приёмник на RTL2832… в кармане!

Наверное, уже нет любителя, который не попробовал «на зуб» SDR-приёмник на RTL2832. А самые пытливые даже попытались внедрить эту поделку в маленькие домашние роутеры, но… почти у всех ничего не получилось: почти всем роутерам не хватает производительности, разве-что Raspberry последних моделей показывает какие-то результаты 🙁 Изюминка кроется в том, что стандартный исходный код библиотек rtlsdr с osmocom.org, мягко говоря, написан «левой ногой» и поэтому бОльшую часть времени занимается ерундой, вместо того, чтобы обсчитывать данные, приходящие с SDR.

rtlsdr_rcv01

Но это поправимо, и ниже будет рассказано, как сделать приёмник с звуковым выходом(!) на RTL2832 из практически любого домашнего WiFi роутера, причём для примера был взят самый маленький и дешёвый TL-WR703N 🙂

Идея приёмника проста, как колумбово яйцо: для того, чтобы поймать эфирный сигнал, к роутеру надо подключить rtl-девайс («свисток»); процессор роутера обработает принятый сигнал, а для того, чтобы услышать результат работы, к роутеру надо подсоединить звуковую карту, работающую по USB. Всё просто ! 🙂

rtlsdr_rcv02

Поскольку в роутере TL-WR703N всего один USB-порт, была взята звуковая карта со встроенным USB-хабом: в один из её портов включен «свисток», а другой — свободен. Если выводить звуковой сигнал не планируется, то «свисток» можно вставить прямо в гнездо роутера. Во многих домашних роутерах установлено 2 гнезда USB: в одно гнездо вставляем «свисток», в другое — звуковую карту, т.е. в этом случае хаб не нужен. Кстати, в этой поделке замечательно работает самая дешёвая звуковая карта 3D SOUND (чип CM108).

rtlsdr_3dsnd

Вот и всё, всю электрическую часть сделали — с точки зрения «проводов», приёмник готов. Теперь надо откомпилировать прошивку и залить её в роутер.

Те, кто используют TL-WR703N, могут здесь скачать уже откомпилированный образ для прошивки роутера. Процедура подключения терминала и прошивки TL-WR703N подробно описана по ссылке https://wiki.openwrt.org/toh/tp-link/tl-wr703n. Остальным придётся собрать прошивку самостоятельно.

Прошивка приёмника собирается в специальном билдруте OpenWrt, который надо скачать здесь: исходный билдрут был скачан с сайта openwrt.org и безжалостно изменён с целью добиться работоспособности RTL2832 на процессорах с малой производительностью. «Втискивание» итогового кода в объём флэша роутера оказалось весьма непростым и увлекательным занятием 🙂 Требования к системе и т.п. для компилирования OpenWrt смотрим на сайте openwrt.org, начиная с раздела https://wiki.openwrt.org/doc/start и никому не дурим голову глупыми вопросами. Изменённый билдрут можно скачать здесь. В скачанном архиве в каталоге dl уже лежит правильный форк rtlsdr, совместимый с оригинальной библиотекой с сайта osmocom.org; удалять его не надо — без него ничего не получится.

В скачанном билдруте все настройки установлены для компиляции образа под роутер TL-WR703N и установлены 2 пользовательских пакета: rtlsdr и упрощённая версия dump1090 (для визуализации полёта самолётиков). Если захотелось что-то поменять (модель роутера, пакеты программ, добавить IPv6 и т.п.) — заходим в конфигуратор командой make menuconfig и меняем 🙂 Сборку проекта производим командой make. В любом случае, сборка проекта требует наличия некоторых специальных знаний, которые пользователь САМОСТОЯТЕЛЬНО извлекает из просторов Интернета, а не топает ногами, вопя кг/ам 🙂

Изменение настроек

Итак, будем считать, что роутер успешно прошит. Сразу после первого старта, по умолчанию, прошивка устанавливает адрес роутера равным 192.168.0.55 (интерфейс eth0/br-lan), встроенный WiFi выключен, включен dump1090. Т.е. если в роутер воткнут «свисток» с подключенной антенной, то сразу можно посмотреть, на летающие «над головой» самолётики аля flightradar24.com: для этого в браузере набираем адрес роутера 192.168.0.55; разумеется, роутер должен быть подключен к сети через LAN.

Предположим, что захотелось изменить адрес роутера на другой: что делать? Все настройки роутера хранятся в каталоге /etc/config, содержимое файлов интуитивно понятно:

dropbear - настройки SSH клиента,
dump1090 - настройки dump1090,
network - настройки сетевых интерфейсов,
system - имя роутера и настройки часового пояса,
wireless - настройки WiFi.

Изменить настройки можно с помощью терминальной программы PuTTY по COM-порту или через SSH соединение (в роутере установлен текстовый редактор vi), или с помощью программы WinSCP по протоколу SCP. Логин — root, пароль — не требуется. Использование WinSCP наиболее удобно для новичка, «бывалым» обычно без разницы, как добираться до файлов конфигурации. Сетевой адрес роутера при необходимости изменяется в файле network.

В роутере установлены 2 пакета программ: rtl (rtl_fm, rtl_tcp, rtl_adsb) и dump1090. Если используется dump1090, то следует дезактивировать rtl, и наоборот, чтобы ненужный софт не занимал RTL2832.

dump1090

Активация программы производится изменением настроек в файле /etc/config/dump1090. За активацию отвечает строка «option disabled» (для дезактивации следует установить в 1). Крайне желательно установить коэффициент коррекции кварцевого генератора «option ppm«, остальные настройке можно не изменять.

rtlsdr_dump1090_01

Если требуется разрешить работу dump1090, то в файле /etc/config/dump1090 следует установить «option disabled ‘0’, закомментировать вызов rtl_xx в файле /etc/rc.local (см.ниже) и перезагрузить рутер командой reboot.

rtlsdr_dump1090_di

rtl

Для работы с софтом из пакета rtl следует дезактивировать автозапуск dump1090 в файле /etc/config/dump1090 и остановить dump1090 командой /etc/init.d/dump1090 stop. Теперь, когда интерфейс RTL2832 свободен, можно вызывать любую программу из пакета rtl: rtl_fm, rtl_tcp, rtl-adsb.

Предположим, нам захотелось посмотреть, какие ADS-B пакеты от самолётов есть в эфире. Набираем в терминале команду rtl_adsb -V и смотрим, что творится в эфире.

rtlsdr_adsb

Для использования RTL2832 в качестве SDR-приёмника, к которому можно подключаться по сети с помощью программ SdrSharp или sdr-console, следует набрать команду rtl_tcp.

rtlsdr_sharp

Если подключение производится с помощью SdrSharp, в программе следует выбрать устройство RTL-TCP, а в настройках указать адрес роутера (192.168.0.55). Если есть желание, чтобы роутер навсегда стал RTL-TCP устройством, то записываем в файл /etc/rc.local строку:

# параметр корректировки ppm -P 15 можно опустить
rtl_tcp -P 15 &

rtlsdr_tcpdef

Роутер прекрасно работает на максимальной частоте сэмплирования, что видно по скриншоту. Особенно удобно подключаться к такому «свистку» по WiFi. Как это работает и зачем это надо?

rtlsdr_tcpwifi

Всё очень просто. Включаем «свисток» в роутер и выносим конструкцию на крышу: этому устройству надо только подать питание и дистанционный приёмник готов 🙂 Сидя дома, подключаемся к SDR по WiFi, крутим частоту настройки и слушаем эфир, хотя к приёмнику не идёт никаких проводов 🙂 Вобщем, это удобно, дёшево и круто 🙂

Если есть желание сделать из роутера автономный приёмник, то к роутеру помимо «свистка» необходимо подключить звуковую USB-карту. Для того, чтобы принять широковещательную FM станцию на частоте 91.2МГц, следует набрать команду

rtl_fm -p 69 -f 91.2M -M fm -s 220500 -A fast -r 11025 - | aplay -r 11025 -f S16

Услышать вызывной канал диапазона 2m можно по команде

rtl_fm -p 69 -f 145.5M -M fm -s 44100 -r 11025 -l 64 - | aplay -r 11025 -f S16

Также можно принимать AM и SSB станции. Приём любительской портативки запечатлён на видео.

Если к рутеру вместо терминала подсоединить Arduino с цветным тач-дисплеем и управляющей программой, то получим красивый и дешёвый широкополосный приёмник с цветным сенсорным экранчиком.

rtlsdr_arduino