среда, 7 сентября 2016 г.

Запускаем RTL-SDR сервер OpenWebRX/RTL_TCP на ODROID-C1+



Уже есть статья про запуск на Raspberry Pi. Но из-за особенностей RPi пришлось от неё отказаться в пользу более продвинутого железа у ODROID-C1+

Устанавливаем Ubuntu Minimal на карту, карту вставляем в С1+, Подключаем RTL-SDR свисток, антенну, патч-корд и подаём питание.


Подключаемся по SSH.
  • ssh root@192.168.1.167
Пароль по умолчанию - odroid

Пытаемся обновить систему
  • apt-get update&&apt-get upgrade&&apt-get dist-upgrade
Если будет ошибка
  • E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
    E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Ждем, насколько я понял, при первом запуске Ubuntu Minimal расширяет системный раздел на всю карту. Активность видно по быстро мигающем синему светодиоду, как только он начнет медленно мигать - приступаем к обновлению
  • apt-get update&&apt-get upgrade&&apt-get dist-upgrade
Для своего удобства, я использовал подключение по WiFi. Настроить его было немного сложнее чем на обычной Ubuntu или Raspbian

Устанавливаем необходимые программы
  • apt-get install git libusb-1.0-0-dev cmake nano wireless-tools wpasupplicant usbutils speedtest-cli
Проверяем что свисток видит система
  • iwconfig
Да-да, тут почему-то WiFi свисток не wlan0 а wlx000f60038ce5

Значит все ок. Приступаем к настройке подключения к сети WiFi

Сканируем видимые сети
  • iwlist scan
Для подключения нам нужен ключ psk
  • wpa_passphrase ВАШSSIDWiFiСети ВашПароль
Пример: wpa_passphrase MyWiFi 1234admin

Сразу нам предоставят psk ключ для подключения к сети
  • network={
  • ssid="ВАШSSIDWiFiСети"
  • #psk="ВашПароль"
  • psk=fe727aa8b64ac9b23423423gsxfgbcvbbbc6c52e7522fw4w709a
  • }
Где-нибудь сохраняем его

Редактируем interfaces
  • nano /etc/network/interfaces
Приводим его к такому виду, так можно будет использовать подключение по Ethernet и WiFi, но только что-то одно
  • # interfaces(5) file used by ifup(8) and ifdown(8)
  • # Include files from /etc/network/interfaces.d:
  • auto wlx000f60038ce5
  • iface wlx000f60038ce5 inet dhcp
  • wpa-driver wext
  • wpa-ssid ВАШSSIDWiFiСети
  • wpa-ap-scan 1
  • wpa-proto RSN
  • wpa-pairwise CCMP
  • wpa-group CCMP
  • wpa-key-mgmt WPA-PSK
  • wpa-psk fe727aa8b64ac9b23423423gsxfgbcvbbbc6c52e7522fw4w709a
Сохраняем CTRL+O и выходим CRTL+X

Далее создаем конфигурационный файл для wpasupplicant
  • nano /etc/wpa_supplicant.conf
У меня такая конфигурация
  • ap_scan=1
    ctrl_interface=/var/run/wpa_supplicant
    network={
    ssid="ВАШSSIDWiFiСети"
    scan_ssid=0
    psk=fe727aa8b64ac9b23423423gsxfgbcvbbbc6c52e7522fw4w709a
    key_mgmt=WPA-PSK
    proto=RSN
    pairwise=CCMP
    group=CCMP
    }
Сохраняем CTRL+O , выходим CRTL+X и перезагружаемся
  • reboot
Всё. Патч-корд отсоединяем, чтобы не было конфликтов в работе dhcp роутера

Устанавливаем osmo-RTL-SDR
  • 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
  • make install
  • 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 и указать IP Raspberry Pi и вручную указать порт (по умолчанию это 1234)
  • rtl_tcp -a 192.168.1.167 -p 1234

Для раздачи потока вашим друзьям, можно использовать замечательную утилиту rtlmuxer
  • git clone https://github.com/alexander-sholohov/rtlmuxer
  • cd ./rtlmuxer
  • make
Для работы этой утилиты нужно чтобы работал rtl_tcp, можно оставить его работать в фоне, можно открыть еще один терминал и выполнить
  • ./rtlmuxer --src-address=192.168.1.167 --src-port=1234 --sink-bind-address=192.168.1.167 --sink-bind-port-a=2222 --sink-bind-port-b=2223

src-address=192.168.1.167 - адрес rtl_tcp вещания
--src-port=1234 - порт который вещает rtl_tcp
--sink-bind-port-a=2222 Порт A
--sink-bind-port-b=2223 Порт B

Порт A используется для управления, т.е. он задает частоту дискретизации, усиление, сдвиг, ppm и т.д. Порт B - для слушателей, они могут в пределах выбранной частоты дискретизации слушать радио, но изменять параметры вещания не смогут.

Чтобы вы управляли, вам нужно ввести в поле Device string
  • 192.168.1.167:2222 - для локального управления
  • 164.72.86.60:2223 - внешний ip для друзей
  • test.asuscomm.com:2223 - если роутер поддерживает DDNS
Устанавливаем OpenWebRX
  • apt-get install build-essential libfftw3-dev cmake nmap
  • git clone https://github.com/simonyiszk/openwebrx.git
  • git clone https://github.com/simonyiszk/csdr.git
  • cd csdr
  • make
  • make install
 Убираем загрузку драйверов dvbt. Если не убрать, С1+ будет зависать намертво с kernel panic

  • bash -c 'echo -e "\n# for RTL-SDR:\nblacklist dvb_usb_rtl28xxu\n" >> /etc/modprobe.d/blacklist.conf'

Чтобы редактировать настройки OpenWebRX, переходим в каталог с программой и используя nano редактируем
  • nano config_webrx.py 
 Запускаем openwebrx
  • ./openwebrx.py
Стандартный порт для вещания 8073. Открываем браузер и вводим IP C1+
192.168.1.167:8073


Для автоматического запуска при включении C1+ необходимо установить
tmux
  • apt-get install tmux
 Далее редактируем файл для автозапуска скриптов и вписываем строку до значения exit0
  • nano /etc/rc.local
  • sudo -H -u root tmux new -d -s openwebrx-session 'bash -c "cd ~/openwebrx; ./openwebrx.py; bash"'
Перезагружаем и радуемся!



1 комментарий: