跳到内容

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

这里还有一个坑:明明手动执行成功,但放到开机启动里就失败,试试把rtl_fm换成完整路径(例如/usr/bin/rtl_fm),这里可能是系统环境变量不同的原因吧。

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

chmod +x /etc/rc.local

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

 

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

发表于无线电

19 条评论

  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

  8. bg4uvy bg4uvy

    我用网心云盒子,加声卡,就是不能 启用PTT。
    不知道,能不能启用串口(没有测试),版主有空时用AIOC 小板+“网心云”盒子试验一下。谢谢
    听大神们説,可能是盒子的armbian系统缺少内核组件。
    只能自己编译系统来解决,但系统编译配置非常复杂,而且工具链很难下载。
    版主,要不编译一个ARPS 专用的armbian系统!谢谢

    • 编译和移植系统已经超出了我的知识范畴。
      你可以试试玩客云刷OneCloud固件,声卡用CM108,Direwolf支持GPIO控制PTT。
      AIOC我只在Win上跑Direwolf测试过,GPIO和串口都可以控制PTT,但PTT容易受到台子射频干扰,这个坑得想办法填上,还是用CM108声卡稳些。

      • bg4uvy bg4uvy

        Reading config file direwolf.conf
        Config file line 30: Could not determine USB Audio GPIO PTT device for audio out put plughw:0,0.
        You must explicitly mention a device name such as /dev/hidraw1.
        Run “cm108” utility to get a list.
        See Interface Guide for details.
        Audio device for both receive and transmit: plughw:0,0 (channel 0)
        Channel 0: 1200 baud, AFSK 1200 & 2200 Hz, A+, 44100 sample rate / 3.
        Note: PTT not configured for channel 0. (Ignore this if using VOX.)
        Disabled AGW network client port.

        Now connected to IGate server china.aprs2.net (119.9.79.69)
        Check server status here http://119.9.79.69:14501

        [ig] # aprsc 2.1.14-g5e22b37
        [ig] # logresp BG4UVY-10 verified, server T2HK
        [ig] BG4UVY-10>APDW17:!3202.61N/12135.88ErPHG2160144.640MHz 439.300 -5 88.5 Welc ome to Lusi Port!欢迎你来吕四港。 RaspberryPi 1200bps

        我新下载的OneCloud固件,我的网心云盒子,不能PTT。以下是翻译内容(原文在上面)。USB声卡,用耳机可以听到声音。请指导!谢谢
        读取配置文件 direwolf.conf
        配置文件第 30 行:无法确定音频输出插头的 USB 音频 GPIO PTT 设备:0,0。
        您必须明确提及设备名称,例如 /dev/hidraw1。
        运行“cm108”实用程序以获取列表。
        有关详细信息,请参阅接口指南。
        用于接收和发送的音频设备:plughw:0,0(通道 0)

        以下是direwolf.conf文件 26-30行
        26 #打开声卡
        27 ADEVICE plughw:0,0
        28 #GPSNMEA /dev/ttyACM0
        29 #打开声卡GPIO4针脚来控制PTT发射
        30 PTT CM108

        • 没有找到声卡
          可能声卡在系统中的对应的并非plughw:0,0
          参照之前文章关于声卡配置的部分
          或者参照Direwolf官方文档51页

  9. BI6PIJ BI6PIJ

    我用玩客云做了一个,但是怎么查看收到的有效Aprs信号数据记录呢?

    • 见文章《Direwolf日志输出》

      • BI6PIJ BI6PIJ

        谢谢,已经看到成功收到的数据了

  10. BI4KPI BI4KPI

    End of file on stdin. Exiting
    您好大佬 我把启动命令放到rc里面之后 启动到一半提示这个End of file on stdin. Exiting 直接结束 但是用命令手动启动是没问题的

    • 你把rtl_fm改成完整路径试试

      • BI4KPI BI4KPI

        好的大佬 还有一个问题请教一下 能否实现 用usb扩展一个GPS硬件 实时上传到配置文件里面 然后上传到aprs服务器

        • 关于车载信标那篇文章里有方法,USB GPS插上以后会出现一个/dev/ttyACM0设备文件,cat会输出NMEA信息,Direwolf配置里GPSNMEA /dev/ttyACM0调用,后面使用TBEACON时就会附带GPS坐标到信标里。

发表评论

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

允许上传的最大文件为2 MB。 您可以上传:图像, 视频, 存档 Drop file here