方案介绍:

OpenWebRX是一个国外开源项目,基于Python语言编写,配合SDR设备使用,能将SDR接收软件Web化,通过网络实现多用户远程访问,无需安装任何客户端软件,功能非常强大,支持:DMR、D-Star、NXDN、YSF、APRS、Pocsag、FT8等数字信号,后台自动解码,并存储解码内容上传APRS-IS、PSKreporter及WSPRNet,是一种理想的解决方案。

说通俗一些就是:1台电脑1个SDR,通过这个软件搭建一个频谱监测网站,只要能上网有浏览器的设备就能访问,随时随地查看频谱和守听,还支持多人同时使用,是不是很爽?你还在家用台子扫频吗?出门揣个便携SDR到处寻找制高点吗?来吧,利用手头的SDR,建立一个OpenWebRX基地监测站,享受业余无线电的乐趣。

这是一些老外们建设的OpenWebRX站点,可以先去体验一下。

https://www.receiverbook.de/?type=openwebrx

博主自己也搭建了一个OpenWebRX,覆盖:业余短波段、业余VU段。说到这里博主要提醒大家了:请勿触及敏感波段,特别是在互联网上!!

需要具备的条件:

  1. 技能:网络基础知识(IP地址)和Linux基本命令(别问我为什么,好玩的东西都是Linux……..需要学会:SSH连接、目录操作、vim编辑器)
  2. 服务器:64位ARM或X86的CPU,推荐使用树莓派(2B以上,Zero不行)、S905盒子(N1),X86 NUC,博主使用的是家中已有的树莓派。
  3. SDR:推荐使用RTL-SDR,要么就买老外的RTL-SDR Blog v3,要么就国产电视棒子,博主用的是前者,其优点在于频偏小,金属外壳屏蔽和散热好,25刀(160软妹币)的价格也相对60包邮的电视棒子高一些。淘宝上那些100+的RTL-SDR就别看了,都是智商税,国人连板子都懒得抄,直接换壳加忽悠;此外其它SDR(SDRPlay、AIRSPY。。。)效果会更好,价位也就更贵了,对服务器硬件要求更高。
  4. IP地址:远程访问需要的条件,但国内IPv4资源紧缺,多数家用宽带都没有公网IP地址。可以向运营商索要试试,或者做内网穿透,
  5. 天线:有条件的可以准备两根,短波和UV各一根,这样就可以全覆盖了,当然SDR也就相应是两个。

满足条件就可以开工了

选择适合的安装方式:

安装方式分为:手动编译、镜像刷入、Docker,可以根据你的服务器类型选择:

树莓派相对简单一些,此处下载镜像直接刷入,然后SSH连进去修改配置文件即可(跳过部署,直接看下文的配置文件说明),相对Docker省去了前面几步,很适合新手;

盒子较难,但其优点在于价格便宜性能强劲,咸鱼购买刷好Armbian系统的S905盒子,然后手动编译Docker部署

这里讲一下如何docker部署

主机开机并插入SDR,使用SSH客户端连入,安装好Docker工具。(群晖自带Docker套件)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

拉取镜像

docker pull jketterl/openwebrx:latest

创建外部映射目录并建立容器(

“/dev/bus/usb”是Linux下USB设备目录,SDR就包含在其中;“/date/openwebrx/conf:/etc/openwebrx”里前者是预先创建的外部目录,后者是容器内部目录,目的是将配置文件映射出来,方便以后修改配置;“8073:8073”同理是内外端口,默认即可。

mkdir -pv /date/openwebrx/conf
docker run -d --name="openwebrx" --privileged -v /dev/bus/usb:/dev/bus/usb -v /date/openwebrx/conf:/etc/openwebrx -p 8073:8073 jketterl/openwebrx:latest

此时容器就已经跑起来了,浏览器输入http://主机IP:8073就可以看到OpenWebRX的界面了。

如果界面出现“No SDR Devices available”错误,这是因为部分系统的内核自动加载SDR,而Docker容器会因宿主机占用SDR无法对其调用。解决的方法就是将SDR列入内核黑名单中。

创建黑名单文件nano /etc/modprobe.d/rtlsdr.conf写入如下内容(以下是RTL-SDR,其它SDR可自行百度),完成后Ctrl+x按y保存并重启系统。blacklist dvb_usb_rtl28xxu

接下来就是编辑配置文件了,OpenWebRX的主要配置文件有:bands.json、config_webrx.py、bookmarks.json。

bands.json:频段范围配置,供后台解码服务使用,JSON语法。”lower_bound”和”upper_bound”为该频段的起始和截止频点,”frequencies”为可选参数,是频段内的特殊频点。

注意:bands.json和config_webrx.py中每个频段的划分大小根据设备的带宽决定,尽量用最少的条目创建频段,不同的SDR设备带宽不一样,可参照下表:

业余UHF段的频宽是10M(430M~440M),RTL-SDR的最佳工作带宽是2.4M,Airspy的最佳工作带宽是10M,因此Airspy仅需划分一个频段,而RTL-SDR则需要划分4个来回切换。

配置实例:业余VHF频段144M~148M,共4M,RTL-SDR需要切分成两部分。

config_webrx.py:主配置文件,Python语法+JSON语法,如果需要可以根据官方注释结合官方文档研究:

SDR设备参数部分:

此处定义SDR的相关参数,需要仔细研究,由于篇幅太多博主无法一一说明,需要注意的是站点页面可视的频宽范围和SDR带宽相关,和bands.json的配置类似,一段不够就切分成多段,切换显示。

"sdrs": {"rtlsdr": {"name": "RTL-SDR USB Stick","type": "rtl_sdr","profiles": {"70cm": {"name": "70cm Repeaters","center_freq": 438800000,"rf_gain": 29,"samp_rate": 2400000,"start_freq": 439275000,"start_mod": "nfm"},"2m": {"name": "2m","center_freq": 145000000,"rf_gain": 29,"samp_rate": 2048000,"start_freq": 145725000,"start_mod": "nfm"},"VHF FM Broadcast - 01": {"name": "VHF FM Broadcast - 01","center_freq": 77200000,"start_freq": 77000000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 02": {"name": "VHF FM Broadcast - 02","center_freq": 79600000,"start_freq": 79400000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 03": {"name": "VHF FM Broadcast - 03","center_freq": 82000000,"start_freq": 81800000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 04": {"name": "VHF FM Broadcast - 04","center_freq": 84400000,"start_freq": 83750000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 05": {"name": "VHF FM Broadcast - 05","center_freq": 86800000,"start_freq": 87800000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 06": {"name": "VHF FM Broadcast - 06","center_freq": 89200000,"start_freq": 89600000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 07": {"name": "VHF FM Broadcast - 07","center_freq": 91600000,"start_freq": 91600000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 08": {"name": "VHF FM Broadcast - 08","center_freq": 94000000,"start_freq": 93100000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 09": {"name": "VHF FM Broadcast - 09","center_freq": 96400000,"start_freq": 96400000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 10": {"name": "VHF FM Broadcast - 10","center_freq": 98800000,"start_freq": 98800000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 11": {"name": "VHF FM Broadcast - 11","center_freq": 101200000,"start_freq": 101100000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 12": {"name": "VHF FM Broadcast - 12","center_freq": 103600000,"start_freq": 104300000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF FM Broadcast - 13": {"name": "VHF FM Broadcast - 13","center_freq": 106000000,"start_freq": 105500000,"start_mod": "wfm","samp_rate": 2400000,"initial_squelch_level": -55,"rf_gain": 15},"VHF 2m Flight - 1": {"name": "VHF 2m Flight - 1","center_freq": 119000000,"start_freq": 119900000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 2": {"name": "VHF 2m Flight - 2","center_freq": 122000000,"start_freq": 122850000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 3": {"name": "VHF 2m Flight - 3","center_freq": 124000000,"start_freq": 125100000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 4": {"name": "VHF 2m Flight - 4","center_freq": 126000000,"start_freq": 125900000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 5": {"name": "VHF 2m Flight - 5","center_freq": 128000000,"start_freq": 127450000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 6": {"name": "VHF 2m Flight - 6","center_freq": 130000000,"start_freq": 130450000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 7": {"name": "VHF 2m Flight - 7","center_freq": 132000000,"start_freq": 132730000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 8": {"name": "VHF 2m Flight - 8","center_freq": 134000000,"start_freq": 133050000,"start_mod": "am","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m Flight - 9": {"name": "VHF 2m Flight - 9","center_freq": 135500000,"start_freq": 135250000,"start_mod": "am","samp_rate": 1024000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m - 1": {"name": "VHF 2m - 1","center_freq": 145000000,"start_freq": 144500000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"VHF 2m - 2": {"name": "VHF 2m - 2","center_freq": 147000000,"start_freq": 147950000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -61,"rf_gain": 25},"UHF 70cm - 0": {"name": "UHF 70cm - 0","center_freq": 409868700,"start_freq": 409750000,"start_mod": "nfm","samp_rate": 240000,"initial_squelch_level": -62,"rf_gain": 30},"UHF 70cm - 1": {"name": "UHF 70cm - 1","center_freq": 431000000,"start_freq": 431675000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -66,"rf_gain": 30},"UHF 70cm - 2": {"name": "UHF 70cm - 2","center_freq": 433000000,"start_freq": 432500000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -66,"rf_gain": 30},"UHF 70cm - 3": {"name": "UHF 70cm - 3","center_freq": 435000000,"start_freq": 434975000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -66,"rf_gain": 30},"UHF 70cm - 4": {"name": "UHF 70cm - 4","center_freq": 437000000,"start_freq": 436795000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -66,"rf_gain": 30},"UHF 70cm - 5": {"name": "UHF 70cm - 5","center_freq": 439000000,"start_freq": 438500000,"start_mod": "nfm","samp_rate": 2400000,"initial_squelch_level": -66,"rf_gain": 30}},"always-on": true}}

OpenWebRX配置的精髓就在于此处,可实现多个SDR协同工作(博主有两个SDR:RTL-SDR Blog v3用于UV段、SDRPlay RSP1用于短波,打造全频段监测站)

大致结构:

【2~6行】单个SDR的设备ID、名称、设备类型、频偏等;

【7-10行】后台解码方式、时间段、扫描频段(bands.json中定义);

【其余】每个频段的的名称、中心频点、默认频点、默认制式、带宽、静噪、增益;

背景和图标自定义:

站点页面代码和图片在/opt/openwebrx/htdocs目录下,修改替换即可拥有自己的风格。

创建用户:

通过官方源安装的过程中会提示创建管理员并输入密码

而树莓派镜像有现成的“openwebrx”命令,SSH连入命令行执行命令创建管理员:

openwebrx admin adduser admin
openwebrx admin enableuser admin

Docker则需执行Python脚本创建管理员,如下命令是进入容器和执行创建一气呵成:

docker exec -it openwebrx python3 /opt/openwebrx/openwebrx.py admin adduser admin

目前还没有授权方法,所以创建出的用户都是管理员,期待后续版本加入权限分配功能。更多说明请参考官方文档的用户管理部分。

结语:

以上就是博主对OpenWebRX的安装和配置的简单说明,希望各位友台们发掘出更多功能。有条件的友台也不要吝惜你的资源,监测站的搭建可以为更多的台友提供信号监听、传播分析、信标上传等服务,这类技术研究或者说基础设施建设,在方便自己和他人的同时也促进了圈子的繁荣、推动了业余无线电的发展、体现了我们爱好者的团结互助精神。

使用树莓派3B、RTL-SDR、OpenWebRX搭建无线电监测站相关推荐

  1. winscp连接nas root账户拒绝访问_树莓派 3B 结合 NextCloud PI 搭建皮米级 NAS 家庭储存...

    背景 又是突发奇想- 前几天想起家里还有个闲置的树莓派 (Raspberry Pi) 3B ,应该是之前想拿来学 Python 还有物联网啥的而购入的,之后因为时间问题.学习考试之类的一直闲置.中途好 ...

  2. 小R SLAM机器人树莓派3b+ ROS kinetic 环境搭建笔记

    上位机环境搭建基本应该没什么难的,装一个Ubuntu16.04,然后根据ros官方指导来操作即可 http://wiki.ros.org/kinetic/Installation/Ubuntu 树莓派 ...

  3. 树莓派编写html,在树莓派3b or 3a or 4a or 4b上搭建OpenWebRX

    OpenWebRx OpenWebRX 项目提供了搭建WebSDR的解决方案,该项目基于 Python 编写,除了完全开源外,官方还提供了完备的技术文档.您只需要一台电脑或是树莓派,一个SDR设备和网 ...

  4. 树莓派3b+ ubuntu-mate18.04系统安装 迅雷远程下载 搭建详解

    最近入手了一个台式机硬盘盒子装500g机械硬盘,恰逢老母要看刘老根,借此机会,用一下闲置的树莓派3b+ 搭建远程下载机. 注!文中的"你的用户名"需要换成你自己用户的名字 这里写目 ...

  5. 使用qemu在windows系统下搭建树莓派3b环境运行RT-Thread

    需要下载的资源 表1 下载资源 序号 资源名称 下载地址 说明 1 raspi3b_run_rt_thread_in_Qemu.rar https://download.csdn.net/downlo ...

  6. 树莓派3b+家庭nas搭建安装openmediavault必要插件安装采坑

    树莓派家庭nas制作openmediavault的坑 文章目录 树莓派家庭nas制作openmediavault的坑 说明 需要准备以下相关材料 成果展示 总结 福利 说明 第一我是自己手动搭建的,从 ...

  7. 树莓派3B+/4 配置LRP python3环境搭建

    标题在onenote上做的笔记,不方便转md,图片转不了,所以长图加纯文字.包含刷系统,常用设置,安装令人头疼的python库以及解决的思路 OS 选择sd卡和下载好的镜像: 在清华镜像站下载img, ...

  8. 树莓派3B搭建HomeAssistant,alist,cpolar,plex,transmission

    一.手把手教学树莓派搭建homeassistant 环境:内存卡16G,树莓派3B,官方工具烧写镜像,我烧的是树莓派系统,设置里面填写用户名密码,WiFi和密码,同时打开SSH服务. sudo apt ...

  9. 【树莓派】树莓派3B+搭建Ubuntu

    相关硬件 树莓派3 B+ 内存卡 Sandisk 32GB 高清HDMI线一条 树莓派电源线一条(5V3A) 读卡器一个 usb键鼠 支持HDMI的显示器 准备SD卡 清空SD卡后,如果当前系统是 L ...

最新文章

  1. mongodb在插入数据环节避免数据重复的方法(爬虫中的使用update)
  2. 使用Anaconda完全替代官方Python
  3. c语言电子计算器课程设计报告,计算机程序设计课程设计报告.doc
  4. HBase基本概念与基本使用
  5. 面试官跟我扯了半小时 CountDownLatch 后,给我发 Offer?| 原力计划
  6. 小程序代理创业成功的五个条件
  7. 毕业论文中含有Java需要哪些参考文献_Java毕业论文参考文献
  8. IDEA中阿里p3c代码规范
  9. 项目开发的完整流程(详解版)
  10. 视频剪辑计算机配置要求,笔记本电脑用来视频剪辑和后期制作要求什么配置高?...
  11. 可移动磁盘双击打不开怎么办
  12. Matplotlib设置坐标轴日期格式
  13. 代码风格自动化(二)——husky + lint-staged
  14. 逻辑回归(Logistic Regression):线性回归与逻辑回归的来龙去脉
  15. Linux Mint (应用软件— 二进制文件编辑器 :bless)
  16. c++编写函数实现字符串中指定字符位置插入字符串
  17. pat乙级 1006 题解
  18. 金融风控——Python建模
  19. SPA项目之登录注册
  20. 使用VQGAN+CLIP从图鉴文本描述中生成神奇宝贝

热门文章

  1. MAC 打开CAJViewerMac软件时报错
  2. iOS 教你如何修改微信运动步数
  3. SK海力士加入日韩美三国财团 收购东芝芯片业务
  4. 【论文】学术论文写作总结
  5. 纯干货-5Deep Reinforcement Learning深度强化学习_论文大集合
  6. 江苏省计算机二级c语言复习知识点,计算机二级C语言知识点复习
  7. InnoDB的“无用”知识
  8. Android字母排序列表效果与开发实现
  9. iphone创建无线网络连接服务器,如何通过苹果iOS设备管理无线网络(图文解析)
  10. 【英语词组】恋恋不忘Day4-5