понедельник, 7 сентября 2015 г.

Запускаем сервер широкополосного радиосканера RTL-SDR на Raspberry Pi

Недавно появилась в хозяйстве крайне интересная вещь как широкополосный радиоприемник/сканер из свистка для приема цифрового телевидения DVB-T на чипах RTL2832U и R820T2.
В этом кратком мануале я расскажу как запустить сервер rtl_tcp чтобы удаленно слушать эфир.


Несколько слов о RTL-SDR приемнике:
RTL-SDR — это целое семейство дешевых ТВ-тюнеров, способных выполнять функцию SDR-приемника. У этих игрушек разные названия и бренды, но объединяет их одно — все они построены на чипсете RTL2832. Это микросхема, содержащая два 8-битных АЦП с частотой дискретизации до 3,2 МГц (однако выше 2,8 МГц могут быть потери данных), и интерфейс USB для связи с компьютером. Эта микросхема на входе принимает I- и Q-потоки, которые должны быть получены другой микросхемой.
R820T и E4000 — это две наиболее удобные для SDR микросхемы, реализующие радиочастотную часть SDR: усилитель антенны, перестраиваемый фильтр и квадратурный демодулятор с синтезатором частоты. Разница между ними следующая: E4000 работает в диапазоне ~52–2200 МГц и имеет немного большую чувствительность на частотах менее 160 МГц. Из-за того что производитель E4000 обанкротился и микросхема снята с производства, остающиеся тюнеры покупать все труднее, и цены на них растут.
R820T работает в диапазоне 24–1766 МГц, однако диапазон перестройки внутренних фильтров сильно затрудняет работу R820T выше 1200 МГц (что делает невозможным, например, прием GPS). На данный момент тюнеры на этой микросхеме легко купить, и стоят они около 10–11 долларов.
Копипаста отсюда 

Сейчас производитель Rafael Micro уже давно выпускает новую версию чипа R820T - R820T2. В сети уже есть результаты сравнения R820T и R820T2, в которых последний чип лучше старого.







Плата свистка на чипе R820T с установленным диодом (защита от статики)
R820T2

Тут написано и тут чем лучше R820T2

И так, приступим.
  • sudo apt-get update
  • sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev libusb-1.0 python-numpy git
  • cd ~
  • git clone git://git.osmocom.org/rtl-sdr.git
  • cd rtl-sdr
  • mkdir build
  • cd build
  • cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
  • make
  • sudo make install
  • sudo ldconfig
Проверим что свисток работает
  • rtl_test 
Вывод будет примерно таким
  • pi@raspberrypi:~$ rtl_test
    Found 1 device(s):
      0:  Realtek, RTL2832U, SN: 00001302

    Using device 0: Generic RTL2832U
    Found Rafael Micro R820T tuner
    Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
    [R82XX] PLL not locked!
    Sampling at 2048000 S/s.

    Info: This tool will continuously read from the device, and report if
    samples get lost. If you observe no further output, everything is fine.

    Reading samples in async mode...
    lost at least 68 bytes
Далее, чтобы корректно работал rtl_tcp (при переподключении rtl_tcp намертво зависал или выключался) нужно установить более свежую версию libusb.
Для этого редактируем список источников
  • sudo nano /etc/apt/sources.list
Добавляем строку, сохраняем и выходим из nano
  • deb http://archive.raspbian.org/raspbian jessie main
Обновляем информацию о пакетах
  • sudo apt-get update
Устанавливаем свежую версию libusb
  • sudo apt-get install libusb-1.0
Редактируем список источников до первоначального состояния
  • sudo nano /etc/apt/sources.list
Заккоментируем добавленную строку, сохраним и перезагрузим малину.
  • #deb http://archive.raspbian.org/raspbian jessie main 
  • sudo reboot
Теперь чтобы транслировать в сеть достаточно запустить rtl_tcp и указать IP Raspberry Pi и вручную указать порт (по умолчанию это 1234)
  • rtl_tcp -a 192.168.1.129 -p 1234
Теперь в программе SDR Touch или SDR# или GQRX указываем IP и порт
  • 192.168.1.129:1234
Результат:
Теперь при переподключении к Raspberry Pi - rtl_tcp не будет сам выключаться или зависать.

Raspberry Pi Model B+ и RTL2832U+R820T2
Загрузка процессора при максимальной полосе в 2.4МГц на Raspberry Pi Model B+ и частотой процессора 700МГц (без разгона) подключено с помощью мобильного приложения SDR Touch

23 комментария:

  1. Инструкция супер, спасибо!

    ОтветитьУдалить
  2. Запустил на Raspberry Pi 2. Работает супер. Спасибо!!!

    ОтветитьУдалить
  3. Вот бы еще инструкцию, как сделать, чтобы при подаче питания на малину rtl_tcp автоматом запускался.

    ОтветитьУдалить
    Ответы
    1. Добавить строку запуска в крон или в автозапуск.

      Удалить
  4. А не затруднит вас написать более подробно для чайников, как добавить в автозапуск?

    ОтветитьУдалить
  5. Алексей, спасибо. Присматриваюсь к этому проекту, но я- полный чайник и иду малыми шагами. А будет это работать с wheezy и на фото не видно какой монитор используете?

    ОтветитьУдалить
  6. У меня на малине wheezy. На скриншоте изображен SDR Touch (программа для ОС Android), на Linux есть неплохая программа GQRX, для Windows это SDR# (SDR Sharp)
    Тут малина выступает в качестве сервера, это для того, чтобы не тянуть радио кабель (он намного дороже обычной витой пары)

    ОтветитьУдалить
  7. Спасибо. Не понял насчет радиокабеля- он же только от антенны? Или от аудиовыхода малины? Я понимаю, что по TCP- на любой комп и дальше на любую прогу по звуку, а как можно выход просто на встроенный аудио сделать для обычных наушников или колонок? Меня интересует просто приемник на базе малины. Есть сама малина, тач-скрин 3.5 дюйма Тонтек и Донгл.

    ОтветитьУдалить
    Ответы
    1. Радиокабель - для соединения антенны и свистка. Например вы живете на 1-м этаже, дом 9 этажей. Тянуть с крыши кабель RG-58(50Ом) очень дорого, протянуть витую пару и кинуть малинку на крыше - значительно дешевле.
      Я малину в качестве приемника для прослушивания не использую. Только как сервер.

      Удалить
    2. Спасибо. Понял. Будем искать дальше. :)

      Удалить
  8. Здравствуйте, а эта программа работает только как сервер? Нельзя выводить звук напрямую с малины, видеть водопад и управлять приемником в целом?
    Может быть есть какая-то программа для этих целей, и мануал по установке для чайника!?

    ОтветитьУдалить
    Ответы
    1. https://github.com/LomTuby/rtl-sdr

      Удалить
  9. а я ваще ничё не магу . интересно - видно , но ! молодцы . аткуда только чё берут в голову

    ОтветитьУдалить
  10. А как сделать чтобы сервер поддерживал девайс airspy usb?

    ОтветитьУдалить
    Ответы
    1. Присоединяюсь к вопросу - очень актуально.

      Удалить
    2. У меня нет Airspy чтобы проверить))

      Удалить
  11. Спасибо хорошая инструкция!

    ОтветитьУдалить
  12. а можно ли сконфигурировать Raspberry Pi 3 с двумя свистками.
    1 используется для снятия данных ADS-B
    2 хочу использовать для SDR.
    Если да, то подскажите как правильно сконфигурировать чтобы "конфликта небыло"

    ОтветитьУдалить
    Ответы
    1. Делается легко. Нужно читать мануал от rtl-sdr. Подсказка
      rtl_tcp -a 127.0.0.1 -p 1234 -d 1 &
      rtl_tcp -a 127.0.0.1 -p 1235 -d 0 &
      -d это девайс

      Удалить
    2. Анонимный31 июля 2017 г., 8:40

      Тоже интересно. Есть ли более подробная информация? Кто-нибудь воплотил уже?

      Удалить
  13. Настроил по Вашей инструкции , sdrsharp-ом подключаюсь ни каких ошибок не выскакивает , но и сигнала нет даже шумов нету, просто ровный одноцветный водопад. В чем может быть проблема, донгл рабочий через USB работает нормально

    ОтветитьУдалить
  14. Не устанавливется libusb-1.0. Пишет, что установлена более новая версия. При подключении сеть малины виснет.
    Что можно сделать?

    ОтветитьУдалить
  15. Подскажите где взять иcходники модернизированного драйвера USB jakub 07.02.2017 for direct sampling tcp support для использования со свистком RTL SRD V3 ! ?
    При котором появляется дополнительный параметр -i direct sampling

    ОтветитьУдалить