APRS IGate网关搭建

2023-03-14 Note 108

开工前的准备:

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

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

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

安装:

准备系统环境:

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

sudo apt-get updatesudo apt-get dist-upgrade sudo rpi-updatesudo apt-get install git build-essential cmake automake libasound2-dev libudev-dev alsa-utilssudo apt-get install libtool autoconf automake libfftw3-de

屏蔽集成声卡

 sudo apt-get remove --purge pulseaudio sudo apt-get autoremove rm -rf /home/pi/.pulsesudo reboot

首先安裝 Kalibrate-rtl:

cd /opt/sudo apt-get install libtool autoconf automake libfftw3-devsudo git clone https://github.com/asdil12/kalibrate-rtl.gitcd kalibrate-rtlsudo git checkout arm_memorysudo ./bootstrapsudo ./configuresudo makesudo make install

完成後執行以下指令,掃描所有 GSM 900 MHz 頻率,並尋找存在的頻道。

sudo kal -s EGSM

Kalibrate-rtl 會顯示所有存在的頻道及其功率。選擇功率較大的頻道並計算出頻率偏差。

sudo kal -c 76

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

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

拉取Direwolf软件源代码并编译

cd ~sudo git clone https://www.github.com/wb2osz/direwolfcd direwolfsudo mkdir build && cd buildsudo cmake ..sudo make -j4sudo make installsudo make install-conf

安装编译好的Direwolfmake install

创建配置文件

nano /root/direwolf.conf
  • 信标配置
PBEACON delay=10 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83E power=1 height=20 gain=4 comment="144.64MHz"
  • PBEACON : 表示位置报告信标
  • delay : 启动后延时多久开始发送
  • every : 每个多少分钟发送一次
  • symbol : 显示的图标
  • lat : 纬度,注意最后一个字母N,北纬
  • long : 经度,注意最后一个字母E,东经
  • power: 描述发射功率
  • height: 天线高度
  • gain: 天线增益
  • comment: 附加信息

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的服务日志,根据日志提示排错。

发布评论