跳到内容

APRS折腾之:IGate网关

上篇博文《APRS折腾之:车载信标》说到了如何生成并上报信标,就是GPS模块获得位置坐标,封包后通过WiFi热点上送到APRS地图网站。但有些情况下我们只有一部电台,虽然带有APRS功能,却缺少网络接口,无法将信标通过手机WiFi热点上传到互联网。再想象一种更糟的情况,你身处沙漠戈壁之中,连手机都没信号,想要接入互联网让他人知道你的坐标就更难了。这时就需要APRS中继(Digipeater)和APRS网关(iGate)了。如果你在其覆盖范围内,中继会将你的信标转发,以接力的形式传递给带有互联网接口的网关,由网关解码并上传,显示在APRS地图网站。

当然,对于身处大城市的我们来说,似乎没有可能遇到后者这种糟糕的情况,但城市也有相应的麻烦,因为APRS常用的频率144.640MHz属于VHF段,受到建筑物遮挡的影响非常大,看似近在咫尺的网关却因为一栋大楼的遮挡无法收到你的信标。

通过上述两种环境得出结论:城市内多建设网关,荒芜地带建设适量中继与城市网关相连。

本文博主就来介绍一下APRS网关(iGate)的简易方案,为什么说是简易方案?“简”体现在廉价,以最小的资金投入解决问题;“易”体现在易于安装调试,以更小巧的体积和更简单的配置快速搭建。总之,APRS网关作为无线电的基础设施建设,只有做到了简易才能大量部署,为本地的Ham提供服务。

此方案博主也是测试了很长一段时间,中途也遇到了很多的选择和坑,在这里和大家一一分享,一起折腾。

 

开工前的准备:

ARM小主机(Linux系统,树莓派当然最好,内存卡刷入配置好的固件直接用,但成本较高,有折腾精神的话博主还是推荐电视盒和矿渣,咸鱼收个刷好Armbian系统的“电视盒子”或者“玩客云”,便宜。)

SDR(RTL-SDR首选,价格便宜而且各种平台支持都很好,淘宝“RTL2832U+R820T2”塑料棒子,校准一下频偏就能用,顺带一个MCX转SMA或SL16接头。)

天线(V段中心频点在144.640,当然定制的话就最好不过了。)

 

安装:

准备系统环境:

SSH方式连入小主机(建议全程使用root用户操作,避免遇到权限问题。),更新软件包列表并安装编译所需环境。

apt-get update
apt-get install git build-essential cmake automake libasound2-dev libudev-dev alsa-utils

安装RTL-SDR软件(Debian系统源里有rtl-sdr软件包,这里就不用编译了,直接安装即可。)

apt-get install libusb-1.0-0-dev rtl-sdr

拉取Direwolf软件源代码并编译

cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf
mkdir build && cd build
cmake ..
make –j4

安装编译好的Direwolf

make install

创建配置文件

nano /root/direwolf.conf

内容如下,完成后Ctrl+x按y保存。

# 输入设备:监听UDP的7355端口,这样比较省资源且不会出现报错情况。
# 输出设备:因为APRS网关只接收信标,不发射,所以没有输出设备,null即是空。
ADEVICE udp:7355 null

# 呼号及SSID,10代表互联网网关设备。
MYCALL BG9ABC-10

# APRS-IS服务器使用国内的,就近原则。
IGSERVER china.aprs2.net

# APRS-IS认证呼号-SSID及Passcode,可去22meters.com生成。
IGLOGIN BG9ABC-10 XXXXX

# 网关自身信标,让其他人知道你的APRS iGate处于工作状态。
# every为自身信标上报间隔时间,lat和long为经纬度,comment为说明信息。
PBEACON sendto=IG delay=1 every=10 symbol=/r lat=34^15.34N long=108^56.49E freq="144.640" comment="VHF APRS iGate"

 

SDR频偏ppm值测量:

上文说到的塑料棒子SDR因为使用了廉价的晶振,导致频率不准,因此我们需要找出偏移量并在运行时加以校准。上文中安装了rtl-sdr软件包,其附带的rtl-test命令此处会用到:

rtl_test -p

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

博主的黑色棒子测得频偏为17,还算不错~

 

运行:

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

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

命令原理就是:rtl_fm监听144.640MHz频点(17是以上测得的频偏ppm值,根据实际填写),并将收到的信号用管道符“|”传递给Direwolf,Direwolf通过配置文件direwolf.conf中的规则将解码后的信标内容上传至APRS-IS服务器。

命令输出:Direwolf自身配置、APRS-IS服务器连接情况、接收到的信标,确认无报错后按Ctrl+C结束命令运行,如下:

这里有一个坑:部分系统会输出“sub_claim_interface error -6 Failed to open rtlsdr device #6”错误,这是因为系统内核自动加载SDR,而Direwolf会因系统占用SDR无法调用。解决的方法就是将SDR列入内核黑名单中。

创建黑名单文件

nano /etc/modprobe.d/rtlsdr.conf

写入如下内容,完成后Ctrl+x按y保存并重启系统。

blacklist dvb_usb_rtl28xxu

编辑开机启动文件

nano /etc/rc.local

在上文中的命令结尾添加“&”(后台运行的意思)然后加入到“exit 0”的前一行,如:

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

保存退出后赋予启动文件执行权限,而后重启即可。

chmod +x /etc/rc.local

个别系统可能会出现开机不启动现象,需要自行排查原因。如使用“ps-ef | grep direwolf”命令查看程序是否在后台运行、使用“ls -l /etc/rc.local”命令确保该文件是本尊,而非软链接、使用“systemctl status rc-local.service”命令查看开机启动文件rc.local的服务日志,根据日志提示排错。

 

这是博主制作出的成品,目前已经赠送给西安本地的一位友台了,希望他能够利用高度优势充分发挥APRS网关的作用,为我们本地的Ham服务,让西安的业余无线电圈子更热闹。

发表于无线电

8 条评论

  1. BH9FXP BH9FXP

    精神小伙不请自来,大佬人帅学历高

  2. 学习了, 买一个玩玩 [抱拳]

  3. LF LF

    开机启动的日志,提示命令不符合规范,不能自动启动,怎么解决?

    • 不同Linux系统的用户权限、路径、环境变量可能不同,先手动运行命令,然后根据报错提示找原因。

  4. LF LF

    谢谢大佬百忙之中抽空回复。我看了日志提示的是命令不规范。用后台命令Nohup解决了。就是没有收到手台的信号,一时不知道谁有频偏了。

  5. BH2UFZ BH2UFZ

    谢谢你哟 我也参照教程,做了一个APRS网关 BH2UFZ-10

  6. BG4USS BG4USS

    照抄完成,感谢!

  7. synge synge

    依样画葫芦,用rtl-sdr做了一个igate

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注