利用Linux小主机和SDR搭建APRS iGate


导言

APRS网络中的设备在通过无线电发送APRS信标后,只有附近的设备才能接受到内容。
而如果要接入到全球的APRS-IS网络,分享自己的实时位置。
则需要附近部署APRS iGate,通俗地讲就是一个APRS的数据网关,负责接收、解码、上传附近无线电波中的APRS数据包。

而APRS常用的频率144.640MHz属于VHF段,受到建筑物遮挡的影响非常大,看似近在咫尺的网关却因为一栋大楼的遮挡无法收到你的信标。
所以我们要积极部署更多的iGate,才能在城市中达到更好的效果。
而正常的iGate设备价格常常不菲,故想到利用便宜的SDR+大量洋垃圾Linux小主机来搭建自己的iGate。

正文

准备措施

一、准备硬件

博主测试了以下两种方案:

  1. 玩客云Onecloud(30元)+ RTL2832u/FC0012 SDR(60元)
  2. 树莓派1B(60元)+ RTL2832u/FC0012 SDR(60元)

此处更推荐使用玩客云,成本更低,运行稳定,性能更高,缺点是需要一定的动手能力来刷写系统。
因树莓派刷写系统过于简单,本文不做介绍,只对Onecloud的刷写系统步骤做教程。

其中SDR目前有以下几种架构方案:

调谐芯片厂家型号 频率范围 备注
Elonic E4000 52-2200MHz 已停产
Rafael Micro R820T2 24-1766MHz 已停产,常见为蓝色电视棒
Refeal Micro R828D 24-1766MHz 与R820T2同构,常见为RTL-SDR Blog V4
Refeal Micro R860 24-1766MHz 与R828D同构
Fitipower FC0013 22-1100MHz
Fitipower FC0012 22-948.6MHz 便宜,常见为黑色电视棒
很多奸商当820T2卖
FlipChip International FC 2580 146-308MHz

对于搭建APRS iGate,推荐购买Fitipower FC0012调谐器的SDR,成本会更低廉。
如要购买其他方案,请注意留意对应的频率范围,必须包含当地的APRS频率到工作频率范围内。

天线可以自信选购,注意对应波段的增益性能,增益越高效果越好。
比较廉价的固定天线方案是吸盘+HH-509F车载玻璃钢,顶配配置Diamond X510。
而使用手台天线,可以考虑RH770拉杆天线,V段增益也来到了3dBi,相当不错。
注意,大部分SDR使用的天线接口为MCX(例如电视棒),可能需要购买MCX-SMA或MCX-UHF的转接头/转接馈线。

二、安装系统

准备一把镊子,一条USB公对公或TypeC对TypeA的数据线(前提是你的电脑有C口,没错,C口接电脑)

下载好以下文件资料:

  1. Armbian镜像 GitHub下载
  2. Amlogic USB Burning Tool 下载

打开刷写工具,选择下载好的Armbian镜像,我这里下载的镜像是:Armbian-unofficial_24.5.0-trunk_Onecloud_jammy_current_6.6.21_minimal.burn。
给玩客云断电,拆开外壳,将USB一头连接到电脑,一头连接到远离网口的USB口,利用镊子短接对应的触电,插电开机。
直到听到电脑响起有设备接入的提示音后放开镊子,点击软件的开始刷写,然后等待完成,断开USB线,断电重启即可。

短接要求:

V1.1:
V1.1

V1.3:
V1.3

三、安装软件

SSH链接主机,请使用ROOT用户进行以下的操作。

  1. 安装基础环境:
1
2
3
4
# 更新软件包
apt update
# 安装软件
apt install git build-essential cmake automake libasound2-dev libudev-dev alsa-utils -y
  1. 安装RTL-SDR软件:
1
apt install libusb-1.0-0-dev rtl-sdr -y
  1. 拉取Direwolf软件源代码并编译
1
2
3
4
5
6
7
8
9
10
11
12
13
cd ~
# 从GitHub拉取代码
git clone https://www.github.com/wb2osz/direwolf
# 如果连不上GitHub,可以从我的镜像拉取
#git clone https://git.ghink.net/Mirrors/direwolf
cd direwolf
mkdir build
cd build
cmake -DUNITTEST=1 ..
make -j4
make test
make install
make install-conf

请静待编译完成,玩客云大概需要20分钟,树莓派1B大概在1个小时左右

  1. 创建配置文件

nano /root/direwolf.conf

输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
# 输入设备:监听UDP的7355端口,这样比较省资源且不会出现报错情况。
# 输出设备:因为APRS网关只接收信标,不发射,所以没有输出设备,null即是空。
ADEVICE udp:7355 null
# 呼号及SSID,10代表互联网网关设备。
MYCALL BD8CMN-10
# APRS-IS服务器使用APRS.ICU提供的国内节点,可以自己改成别的
IGSERVER china.aprs.icu
# APRS-IS认证呼号-SSID及Passcode,可去tools.ianxia.com生成。
IGLOGIN BD8CMN-10 XXXXX
# 网关自身信标,让其他人知道你的APRS iGate处于工作状态。
# every为自身信标上报间隔时间,lat和long为经纬度,comment为说明信息。
PBEACON sendto=IG delay=1 every=1 symbol=/r lat=30.61999N long=120.57413E freq="" comment="Tongxiang APRS iGate 144.390MHz"

Ctrl+O回保存,Ctrl+X退出

  1. SDR频偏ppm值测量

rtl_test -p

执行命令后等待10分钟以上,等晶振工作温度稳定时,输出的“cumulative PPM”值会趋于恒定,此时就可得出SDR的频偏值。

  1. 测试运行

将SDR插入小主机并运行如下命令:

rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -

命令原理就是:rtl_fm监听144.640MHz频点(25是以上测得的频偏ppm值,根据实际填写),
并将收到的信号用管道符传递给Direwolf,Direwolf通过配置文件direwolf.conf中的规则将解码后的信标内容上传至APRS-IS服务器。
确认无报错后按Ctrl+C结束命令运行。

  1. 创建黑名单文件

nano /etc/modprobe.d/rtlsdr.conf

写入下列信息:

blacklist dvb_usb_rtl28xxu

Ctrl+O回保存,Ctrl+X退出

  1. 创建开机启动

部分新的Linux系统没有rc.local文件了,不用管,先用编辑器尝试修改:

nano /etc/rc.local

如果显示是创建新文件,说明是新版本Linux,先不用管,写入以下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.


rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -&
exit 0

如果文件已经存在内容,只写入以下内容:

1
2
rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -&
exit 0

注意,启动命令中的参数请自行修改成上述测试命令中的自己的参数。

Ctrl+O回保存,Ctrl+X退出

为其赋予运行权限:

chmod +x /etc/rc.local

如果上述文件是新创建的,请接着看,否则重启你的设备,网关就已经搭建好了。

接下来我们创建系统服务:

vim /etc/systemd/system/rc-local.service

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

按ESC,:wq回车保存退出

激活服务:

systemctl enable rc-local.service

启动服务:

systemctl start rc-local.service

大功告成!可以用以下命令查看运行输出:

systemctl status rc-local.service

END

可以在追踪网站上搜索 BD8CMN-10 查看博主方案效果