手把手教程:利用树莓派 + RTL-SDR 搭建 APRS 接收 iGate 网关

APRS(自动分组报告系统)是业余无线电爱好者非常喜爱的数字化通信模式。它通常用于传输位置信息、气象数据或短消息。而 iGate(Internet Gateway) 则是连接本地无线电波与世界的关键节点:它负责接收射频(RF)上的 APRS 数据包,并将其上传至互联网(如 aprs.fi 网站),让全球爱好者都能看到本地电台的活动。

以往搭建 iGate 需要一台传统的电台和声卡接口,成本较高。但现在,借助几十块钱的 RTL-SDR 电视棒和廉价的树莓派 Zero,我们只需花费极低的成本,就能搭建一个 24 小时不间断运行的 仅接收(RX-only)iGate。

本教程将详细讲解如何在树莓派上安装软件、配置 RTL-SDR,并使用强大的解码软件 Dire Wolf,将收到的 APRS 信号上传至 APRS 服务器。

1. 准备工作:硬件与软件清单

在开始动手之前,需要准备好以下硬件和软件资源。
硬件列表

  • 树莓派(Raspberry Pi):任意型号均可(推荐 Pi 3B、Pi 4B 或更省电的 Pi Zero W)。确保配有 MicroSD卡(建议 8GB 以上)和电源。
  • RTL-SDR 接收器:基于 RTL2832U 芯片的电视棒。为了频率稳定度,建议购买带 TCXO(温度补偿晶体振荡器)的版本(如 RTL-SDR Blog V3).
  • 天线:适用于 2米波段(144-148MHz)的天线。如果是简易入门,可以自制 1/4 波长地网天线或购买合适的室外天线。
  • (可选)网线或 WiFi:树莓派需要连接互联网以上传数据。

树莓派 rtl-sdr

软件概念

  • Dire Wolf:一个纯软件的解调器/解码器,充当“声卡”和“终端节点控制器(TNC)”的角色,能将 SDR 传来的音频数据解码为APRS 数据包 。
  • rtl_fm:RTL-SDR 驱动库自带的命令行工具,负责调频并输出音频流。
  • APRS 密码:使用呼号在指定网站生成,用于向 APRS 服务器验证身份 。

2. 烧录与初始化树莓派系统

推荐使用 Raspberry Pi OS Lite 版本(基于 Debian 的轻量级命令行版本),以节省系统资源。

  1. 烧录系统:使用 Raspberry Pi Imager 工具,选择操作系统为 “Raspberry Pi OS Lite(32-bit)”,并将其写入 MicroSD 卡 。
  2. 预配置(Headless 模式):

在烧录前,通过 Imager 工具的高级菜单(Ctrl+Shift+X)提前设置:
开启 SSH(用于远程登录)。
设置用户名(如 pi)和密码。
配置好 WiFi 的 SSID 和密码(如果使用无线网络)。
设置时区为 Asia/Shanghai 或你所在的区域。

3. 启动与连接:

将 SD 卡插入树莓派,连接 RTL-SDR 和天线,然后上电。通过路由器后台查找树莓派的 IP 地址,或使用 nmap 等工具扫描,最后通过 SSH 客户端(如 PuTTY 或终端)登录:

ssh pi@你的树莓派IP地址

3. 编译与安装 Dire Wolf

由于 RTL-SDR 的特殊性,我们不使用 Dire Wolf 的默认音频设备,而是通过“管道”接收来自 rtl_fm 的数据,因此需要确保安装正确。

首先,更新系统并安装编译所需的依赖工具 :

sudo apt update && sudo apt upgrade -y
sudo apt install git build-essential libasound2-dev libudev-dev cmake libusb-1.0-0-dev -y

接下来,从 GitHub 获取 Dire Wolf 源码并进行编译安装:

cd ~
git clone https://github.com/wb2osz/direwolf.git
cd direwolf
mkdir build && cd build
cmake ..
make -j4          # “-j4” 表示启用4线程编译,可根据树莓派核心数调整
sudo make install
make install-conf  # 安装默认配置文件

编译过程在树莓派 Zero 上可能需要十几分钟,而在 Pi 3/4 上会快得多。

4. 安装与配置 RTL-SDR 驱动

为了确保树莓派将 RTL-SDR 识别为软件定义无线电设备,而不是默认的电视接收器,需要黑名单掉 DVB-T 驱动 。

  1. 克隆并编译 RTL-SDR 库:

    cd ~
    git clone git://git.osmocom.org/rtl-sdr.git
    cd rtl-sdr
    mkdir build && cd build
    cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
    make
    sudo make install
    sudo ldconfig

  2. 屏蔽默认驱动:

创建黑名单配置文件:

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

添加以下内容:

blacklist dvb_usb_rtl28xxu
blacklist dvb_usb_v2
blacklist rtl_2830
blacklist rtl_2832
blacklist r820t
  1. 重启树莓派:

    sudo reboot

  2. 测试 SDR:

重启后,重新连接 SSH,插入 RTL-SDR 并运行测试命令,检查是否识别成功:

rtl_test -t

如果看到 “Found N devices” 且没有报错,说明驱动加载正常。

5. 配置 Dire Wolf 的 SDR 模式

Dire Wolf 安装时附带了一个针对 SDR 优化的示例配置文件 sdr.conf。我们需要将其复制到用户目录并修改 。

cp ~/direwolf/conf/sdr.conf ~/sdr.conf
nano ~/sdr.conf

主要需要修改以下几个关键部分:

  • 设置你的呼号:找到 MYCALL 行,填入你的业余无线电呼号。根据惯例,iGate 通常使用 SSID 为 -10(例如N0CALL-10)。

    MYCALL 你的呼号-10

  • 设置 APRS 服务器:根据你所在的地区,选择相应的 APRS 轮换服务器地址 。

中国大陆地区常用:cn.aprs2.net (或 rotate.aprs.net)
北美:noam.aprs2.net
欧洲:euro.aprs2.net

IGSERVER cn.aprs2.net
  • 设置登录验证:访问 MagicBug 密码生成器,输入你的呼号(不含SSID),获取 6 位数字密码。然后填入:IGLOGIN 你的呼号-10 你的6位数字密码
  • (可选)添加信标:为了让地图知道你的 iGate 的物理位置,可以取消注释或添加 PBEACON 行,并修改为你实际的经纬度和注释 。

    PBEACON sendto=IG delay=0:30 every=30:00 symbol="igate" overlay=R lat=39.9089 long=116.3975 comment="RPi SDR iGate in Beijing"

(请注意:lat/long 应替换为你的实际坐标,使用十进制格式。)

6. 组合测试与调试

在设置为开机自启之前,先在命令行中测试整个链路是否通畅。

使用 rtl_fm 将树莓派调谐到当地的 APRS 频率(中国大陆和大多数亚太地区为 144.640MHz;美国为 144.39MHz)。将调频后的音频数据通过管道(|)传递给 Dire Wolf,并指定采样率为 24000 Hz 。

rtl_fm -f 144.64M - | direwolf -c ~/sdr.conf -r 24000 -D 1 -

如果一切正常,你将会看到终端开始滚动输出信息:

  • 首先显示 Dire Wolf 版本和配置。
  • 接着看到 rtl_fm 开始输出采样数据。
  • 最终,当有 APRS 信号被接收时,你会看到解码成功的报文,类似于 N0CALL>APRS,TCPIP*,qAC, ...
    并显示信号强度。

终端显示成功解码 APRS 数据包的截图

故障排查:

  • PPM 校正:如果收不到信号,可能是 SDR 的频率不准。你可以先在电脑上用 SDR# 等软件配合已知信号计算出 PPM 值,然后在 rtl_fm 命令中加入 -p ppm 参数(例如 -p 40)。
  • 增益设置:如果信号太弱或过载,可以尝试使用 -g 参数固定增益(例如 -g 30),而不是使用自动增益。

7.设置开机自启动(systemd)

测试成功后,我们希望树莓派在每次断电重启后自动运行 iGate 功能,无需手动输入命令。这可以通过创建一个 systemd 服务来实现 。

  1. 创建服务文件:

    sudo nano /lib/systemd/system/direwolf.service

  2. 填入以下内容:

    [Unit]
    Description=Direwolf APRS iGate with RTL-SDR
    Wants=network-online.target
    After=network-online.target

    [Service]
    User=pi
    ExecStart=/bin/sh -c 'rtl_fm -f 144.64M -g 30 -p 0 - | direwolf -c /home/pi/sdr.conf -r 24000 -D 1 -'
    Restart=always
    RestartSec=10
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=direwolf

    [Install]
    WantedBy=multi-user.target

注意:请根据你的频率和实际测试结果,修改 -f 后的频率以及 -g(增益)和 -p(PPM)参数。

  1. 启用并启动服务:

    sudo systemctl daemon-reload
    sudo systemctl enable direwolf.service
    sudo systemctl start direwolf.service

  2. 查看运行状态:

    sudo systemctl status direwolf.service

  3. 查看实时日志:

    journalctl -u direwolf.service -f

8. 验证与成果展示

配置完成后,等待几分钟让 iGate 上传数据。打开浏览器访问 https://aprs.fi,在搜索框中输入你的呼号-10(例如 N0CALL-10)。

  • 如果一切顺利,你应该能看到一个带“i”标志的灯塔图标出现在你设置的经纬度上。
  • 点击你的台站,可以查看最近接收到的所有 APRS 数据包统计。
  • 这也意味着,当你本地的火腿朋友发射 APRS 信号时,你的 iGate 就会替他“上网”,为整个 APRS 社区做出了贡献。

aprs.fi 上显示的 iGate 台站截图

9. 进阶优化建议

  • 天线是王道:SDR 接收机的灵敏度很大程度上取决于天线。尽量将天线架高,使用馈线损耗小的同轴电缆。
  • 散热:如果使用树莓派 4,建议加装散热片,确保长时间运行的稳定性。
  • 远程管理:可以安装 watchtower 或简单的 cron 脚本,定期重启服务以防死锁。也可以考虑使用预编译镜像快速部署 。

结语

至此,你已经成功利用树莓派和廉价的 RTL-SDR 搭建了一个功能完备的 APRS iGate。它不仅能让你以极低的成本参与全球 APRS 网络,也为本地无线电社群提供了有价值的公共服务。如果你在搭建过程中遇到问题,欢迎查阅 Dire Wolf 的官方文档或在本站留言交流。73!(Best Regards!)

相关文章

发表新评论