树莓派之SDR服务器

-

最近一段时间闲的无聊突发奇想利用树莓派搭建一个SDR的服务器,这样无论在何地也能通过网络收听想听的频率.美滋滋.


首先 我们来看一下 什么是SDR?

软件定义的无线电(Software Defined Radio,SDR) 是一种无线电广播通信技术,它基于软件定义的无线通信协议而非通过硬连线实现。频带、空中接口协议和功能可通过软件下载和更新来升级,而不用完全更换硬件。(摘自百度百科)


简单地介绍一下.以前接收各种无线信号是靠各种电子元件.调频,检波等等"处理"变成音频输出,而SDR,就是将无线信号转换为数字信号,然后利用软件+硬件实现音频输出,有什么好处呢? 频带宽,可解调协议更多,抗干扰性能更优秀.随着技术的发展,SDR在业余无线电通讯中渐渐地流行起来.


去年,鄙人不才才加入这个行列.研究了一款基于SDRPLAY 的RSP1 开源硬件的SDR,这款SDR出自于一位3区(天津)的HAM BG3CS.

频率覆盖:1KHZ - 2GHZ

最高带宽:10MHZ(取决于计算机硬件性能)

在家使用的时候我用的是倒V天线+GP高增益天线作为接收.使用windows系统进行解调.总觉得要是外出也能访问收听就更好一些了.

于是网上搜索各种资料.发现了一套解决方案,树莓派+OPEN WEB SDR,但大数都是基于RTL2832U+R820T的,各种周转..翻山阅读.终于搞清楚.这个SDR如果使用OPEN WEB SDR的话需要第三方软件的支持...经过阅读了大量资料.各种编译..各种代码修正后终于成功了.在树莓派上 成功将3CS 的SDR 共享为WEBSDR.理论上这个教程适用于SDRPLAY 的RSP各系.


前段时间把原来的树莓派搞成HIFI数播.于是又从新买了台.

没选择树莓派4?

树莓派4,虽然性能会更高.但是由于刚出来没有多长时间.加上硬件上有些BUG.所以排除了.

至于3B+,这货...多了200MHz主频..只要散热搞好,从3B直接超频稳稳的.

依旧我的树莓派3B+ 铸铝外壳.散热没的说....


话不多说.先上教程.

对不住大家..树莓派基于UNIX系统.所以.下面将会是一大段代码编译过程......


首先,依旧要讲西戎烧录在TF卡上.

系统选用:

由于这个应用基本上树莓派处于一个"服务器"的角色,所以武学GUI界面.系统选用为


Raspbian Buster Lite

版本信息:

Version:September 2019

Release date:2019-09-26

Kernel version:4.19


请前往官网下载:

https://www.raspberrypi.org/downloads/raspbian/


刷系统

软件:

SD Card Formatter

Win32DiskImager


将下载回来的压缩文件解压获得IMG镜像,然后

把TF卡插在电脑上,使用 SD Card Formatter 格式化


然后使用 Win32DiskImager 将下载回来的 Raspbian Buster Lite 系统镜像.写入TF卡

等待系烧录完成,打开"可移动磁盘"

在磁盘根目录下创建一个文本文件.空的即可,命名为ssh(注意不包含扩展名)

这一步是为了打开ssh功能


最后将TF卡插入树莓派...开机.让树莓派自动配置 飞 一会


进入自家路由器,或者其他方法找到树莓派的IP地址,

再用 ssh 软件 连接到树莓派(我用putty), 

用户名:pi

密码:raspberry



登录系统后,第一件事请是要更新一下系统.

输入并运行: sudo apt-get update

输入并运行: sudo apt-get upgrade

等待更新完毕后.我们就要开始安装各种所需软件了.一大堆命令执行

(以下命令请单独执行,如遇提示请输入Y同意即可安装)

sudo apt-get install cmake python2.7 libfftw3-dev libfftw3-3 libfftw3-bin libusb-1.0-0.dev netcat git

根据网络不同时间不等.请耐心等待完成.


然后进行FTP的设置,这个主要是树莓派传输文件用.

1.安装vsftpd

sudo apt-get install vsftpd

2.修改配置 /etc/vsftpd.conf

sudo nano /etc/vsftpd.conf

把里面的所有内容全部删除,将以下内容粘贴进去ctrl+X保存退出


#若出现以下报错是,则开启一下行 vsftpd: 500 OOPS: prctl PR_SET_SECCOMP failed

#seccomp_sandbox=no

listen=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

anon_upload_enable=NO

anon_mkdir_write_enable=NO

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

connect_from_port_20=YES

#chown_uploads=YES

#chown_username=whoever

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

idle_session_timeout=600

data_connection_timeout=120

async_abor_enable=YES

ascii_upload_enable=YES

ascii_download_enable=YES

ftpd_banner=Welcome to blah FTP service.

#deny_email_enable=YES

#banned_email_file=/etc/vsftpd.banned_emails


userlist_enable=YES

userlist_deny=NO

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

#local_root=/var/ftp


ls_recurse_enable=YES

secure_chroot_dir=/var/ftp

pam_service_name=vsftpd

rsa_cert_file=/etc/ssl/private/vsftpd.pem


在配置访问用户

sudo nano /etc/vsftpd.user_list

在编辑器里面输入pi

ctrl+X保存退出


sudo nano /etc/vsftpd.chroot_list

在编辑器里面输入pi

ctrl+X保存退出


新建ftp文夹

sudo mkdir /var/ftp

sudo chown ftp:ftp /var/ftp

sudo chmod 555 /var/ftp


重启树莓派

sudo reboot

等待重启完成在用SSH工具连接到树莓派,继续操作

在控制台继续输入命令


创建一个SDR的目录

mkdir SDR


用FTP软件 连接树莓派,

服务器IP地址就是树莓派地址

用户名:pi

密码:raspberry


将从 https://www.sdrplay.com/ 官网下载的 

API/HW DRIVER 上传到树莓派的SDR文件夹

我下回来文件名是 SDRplay_RSP_API-RPi-2.13.1.run

继续运行

进入SDR目录

cd SDR


安装SDR硬件驱动

sudo chmod +x SDRplay_RSP_API-RPi-2.13.1.run

sudo ./SDRplay_RSP_API-RPi-2.13.1.run


按回车直到100%,然后Y


接下来就要安装各种相关软件了,都是要从GIT仓库GET下来.

执行代码.每行未执行一次

git clone https://github.com/pothosware/SoapySDR

git clone https://github.com/rxseger/rx_tools

git clone https://github.com/pothosware/SoapySDRPlay

git clone https://github.com/simonyiszk/csdr.git

git clone https://github.com/simonyiszk/openwebrx.git



然后是漫长的编译...又是一大堆代码....


cd csdr

sudo make

sudo make install

cd ..


cd SoapySDR

mkdir build

cd build

cmake ..

make 

sudo make install

sudo ldconfig

cd ..


cd rx_tools

mkdir build

cd build

cmake ..

make 

sudo make install

sudo ldconfig

cd ..


cd SoapySDRPlay

mkdir build

cd build

cmake ..

make 

sudo make install

sudo ldconfig

cd ..



#编辑硬件连接

 sudo nano /etc/modprobe.d/blacklist-sdrplay.conf


这时会打开一个编辑器 将下面内容粘贴进去

blacklist sdr_msi3101

blacklist msi001

blacklist msi2500


Ctrl+O保存,Ctrl+X退出


#重启

reboot


#至此如果安装正确.已经可以查看到硬件设备了,确认硬件连接后继续执行

SoapySDRUtil --find


正常的话会显示


#进一步确认连接
#测试设备 Ctrl+C 退出测试
        rx_sdr - | csdr through > /dev/null


重要 
当所有配置或者镜像烧录完毕 都必须要配置文件config_webrx.py
可用FTP连接树莓派
/home/pi/SDR/openwebrx/config_webrx.py

或 用命令方式编辑文件
sudo nano /home/pi/SDR/openwebrx/config_webrx.py


server_hostname="XXX.XXX.XXX.XXX"
改为
server_hostname="树莓派地址"

否则无法运行


#运行服务

        cd /home/pi/SDR/openwebrx/

        python2.7 openwebrx.py


此时如果设置全部顺利正常,您在浏览器里面打开

http://树莓派IP:8073 

就能看到WEB SDR的整个界面了



如果需要增加开机启动

        sudo nano /etc/rc.local


打开编辑器在EXIT 前加入如下内容

        cd /home/pi/SDR/openwebrx/

        sudo python2.7 openwebrx.py

        cd /


即可


config_webrx 推荐配置
短波建议修改
rf_gain = 30
waterfall_min_level == -80



写在最后
openwebrx 文件夹下config_webrx.py 文件是WEB SDR 的配置.我做了一些简单的中文注释.大家可以根据自己的需求修改配置文件.
理论上使用SoapySDR 可以进行其他SDR软件的TCP连接.大家自行研究吧.
如果需要在外网访问 还要需要配置自家陆游的动态域名.以及端口映射即可.