本文已经获得BD7IPA老师转载授权
起因:户外徒步活动时,需要定位、轨迹、方向等功能,虽然手机有相当完善的功能,但限于电池寿命、4G/5G信号覆盖不全,部分山区信号弱的情况不太好用。因此,想通过无线电APRS的形式,进行位置报告。同时,对于远在家里的亲人,也可以实时掌握自己的位置,万一真的出现意外情况,还能协助救援,对于喜欢户外活动的人士来说,意义重大,非手机可比。
目标:用树莓派+USB声卡+手台,搭建一个集 网关、中继、追踪器(定位)于一身的小基站。
可以实现:人持手台进山,基站放车内(或地势开阔海拔高且有4G/5G信号的地方)。
- 手台的位置信息可以通过基站的网关上报到aprs地图服务器(基站需要能连wifi,有线网络也行,但户外有线不太现实),家人可以通过地图服务器获知你的位置。
- 两台手台之间,如果因为信号覆盖不能相互通联,可以通过基站的中继功能相互报送位置信息,方便户外活动与队员联系。
- 基站本身有定位功能,定时对外发送自身坐标,方便户外活动地图不好使或者迷路时,有一个明确的目标方位。
起初是在咸鱼上收的一位大佬的DIY成品,但它没有wifi,不带GPS定位功能。在自己加GPS的过程中,进行了深度折腾,从零开始,装系统、编译软件、换声卡、换手台、加装GPS模块,一步一步,把所有步骤几乎都走了一遍,遇到了不少坑,本着火腿精神,把整个过程整理出来,方便有兴趣的友台在DIY的过程中避免踩坑。
话不多说,马上开始。开始前,先总结一下需要的硬件、软件:
- 硬件:
a) 树莓派(1B就可以,就是装系统编译软件会慢点,我也试过用4B,除了编译更快以外,其他并无区别。网上大佬说香橙派也可以,我手上没有香橙派,没试过,理论上能装linux就可以)。
b) USB声卡,某宝上十几块钱就有,搜CM108声卡就行,大板和迷你版我都试过,都可以,没问题的,看你喜欢。
c) 手台,本来咸鱼上买回来的时候就有一个手台,我为了方便更换为宝峰UV5R,可以手置频,双段接收,这点在户外会更方便,与其他驴友通联的时候,可以更方便的更改频点。
d) GPS模块,我是某宝是买的“维特智能”的GPS+BD北斗模块,外接天线版本
e) 3.3V继电器模块(记得一定是3.3V的继电器,树莓派的GPIO口只提供3.3V电压,5V的模块驱动不起来),用于控制PTT。咸鱼上购买回来时,它是用一个三极管+电阻接到PTT上,后来我换成UV5R时不知为何一发射声卡就重置,导致程序退出,后来换成继电器控制就没事了,就是每次发送继电器吸合噪音比较大,介意的可以找找固态继电器看能不能实现。
f) DC-DC可调降压模块(两个),因为我用的是12V电源,树莓派需要5V供电,手台需要7.4V供电,所以用两个。
g) USB无线网卡我用的是箱底找到的RTU8188SU芯片的网卡,大家可以某宝随便入,只要linux下不需要另外装驱动就可以了。
h) 音频转接板,某宝上搜APRS手台手机转接板(BH4TDV作坊)。对了TDV大佬家有TNC网关等APRS相关设备的成品,不希望折腾的可以直接上成品。
i) 对讲机K头线。
- 软件:
a) 操作系统:DietPi,基于debian的迷你系统,非常适合低配置电脑使用。官网https://dietpi.com/
b) Direwolf:Dire Wolf是一款开源的软件“声卡”AX.25数据包调制解调器/TNC和APRS编码器/解码器。它可以单独用于观察APRS流量,作为跟踪器、digipeater、APRStt网关或互联网网关(IGate)。官网:https://github.com/wb2osz/direwolf/
接下来,我将一步一步带你从零开始搭建这个小基站。过程中需要一点简单的动手能力(焊接线路,并不难),以及一些linux基础,有基础可以更好的理解,没有基础一步一步来应该也能成功的。遇到问题多去网上搜索,国内貌似玩APRS的人不多,可能是由于政策原因,但国外还是很多人玩的,所以多到国外网站上查资料能更容易的找到问题答案。
先放两张整体图,这样能更直观的理解它


首先是硬件的搭建:
- 直流12V DC进来后,先通过两个降压模块,分别给树莓派和手台供电(手台也可以直接某宝买个借电器,它里面就有12V转7.4V的降压板)。
- 树莓派两个USB接口,一个插无线网卡,另一个插USB声卡,我这里因为声卡后还要接3.5mm插头,位置有点挤,所以直接用线焊到声卡的USB口上。
- 树莓派GPIO口:
a) 5V+GND è GPS模块的VCC+GND
b) GPIO14、GPIO15 è GPS模块的 RxD、TxD
c) GPIO18、3.3V 、GND è 继电器模块的 IN、DC+、DC-
d) GPIO23+GND è 外壳的其中一个LED上,LED正极和GPIO23之间串联一个680欧的电阻
e) 声卡的指示灯、网卡的指示灯,分别用延长线焊到外壳的其中一个LED上
f) K头线制作音频线,自己根据线序定义图,焊到音频转接板上



接下来是软件方面:
首先是安装操作系统:
- 准备一张8G以上的SD卡(如果是树莓派4B/3B,用的是TF卡,而操作是完全一毛一样的,跟着做就好)。
- 去DietPi的官网下载系统镜像,(记得根据自己的树莓派板子来下载)。下载好后,解压出来备用。文件名应该是DietPi_RPi-ARMv6-Bookworm.img,如果是树莓派4,对应文件名应该是DietPi_RPi-ARMv8-Bookworm.img

- 系统烧录:下载Rufus便携版(官网:https://rufus.ie/zh/),插入SD卡,打开Rufus:
a) 选择SD卡,如果有多个U盘或SD卡插在电脑上,请确认不要选错了
b) 选择刚刚解压出来的系统镜像文件
c) 其他保持默认,点击开始,等待烧录完成。
d) 烧录完成后,别急着弹出SD卡,用windows记事本打开SD卡里面的dietpi.txt文件,找到
AUTO_SETUP_NET_WIFI_ENABLED=0这行,把0 改为1,保存关闭。这样首次开机它会自动打开wifi
e) 然后打开dietpi-wifi.txt文件找到
aWIFI_SSID[0]='' 这行,在等于号后面的单引号内,输入你的wifi名(注意它貌似大小写敏感的,不一定支持中文,建议用英文网络名)
aWIFI_KEY[0]='' 这行,在等于号后面的单引号内,输入你的wifi密码
f) 其他不用改,保存关闭文件。

- 把SD卡从电脑弹出,插入到树莓派中,上电开机。
- 过一两分钟,连上你的路由看看机器名叫“DietPi”的机子是否获取了IP地址,记下它的IP地址
- 用SSH工具(比如PuTTY)连接到树莓派,登陆名:root,密码:dietpi
- 这里需要稍等片刻,系统首次启动会运行一堆脚本,基本不用管它,让它自己跑就行。但是需要留意,首次启动它会连接上GitHub获取最新版本号,我家里用的联通的宽带,有时可以有时不行,多试几次,或者不同时段试试就可以了。实在不行就科学上网大法,具体的步骤不在此篇范围内,就不多赘述,请自行百度。
- 期间还会询问你一些简单的问题,比如是否参加用户调研,是否修改默认密码等等,大家沉下心耐心看看界面提示,根据自己需要进行选择即可。
- 然后会让你进行一些软硬件设置,这里我们全部设置都不要更改,保持默认,直接选择最后一项“安装系统”即可(如图)

- 一切就绪后,应该看到如下的界面,这就证明DietPi系统已经安装完成

接下来就是软件安装了,下面的所有操作默认都以root身份运行
首先打开USB声卡及串口:
dietpi-config
出现下面界面,选择Audio Options -> Sound card


选择“hw:0,0 Device USB Audio”,按回车键安装

完成后一路“Back”,直到最上层,先别急着退出。接下来设置串口,以便GPS和树莓派能正常通讯。
在最上层选择“Advanced Options”

选择“Serial/UART : Manage available devices”

按照图片的方式选择,console选择off,device选择on

完成后,一路“Back”到最上层,然后“Exit”退出
此时可以验证一下声卡,运行以下两条命令,看看是否正确识别到音频播放及录音设备
aplay –l
arecord-l
如果看到如下界面,则声卡正常

然后设置一下国内源,以便更快的安装软件:
nano /etc/apt/sources.list
把文件内容改为如下的:
#deb http://raspbian.raspberrypi.org/raspbian/ bookwormmain contrib non-free
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/bookworm main non-free contrib
然后运行一次更新命令:apt install update
完成后,开始安装软件,运行以下命令:
apt install cmake make build-essential libasound2-devlibudev-dev git gpsd libgps-dev gpsd-clients
这个过程会比较慢,毕竟是1代树莓派,耐心等待即可。如果是树莓派4B会快很多。
等一切安装妥当,就可以配置gpsd服务了
nano /etc/default/gpsd
内容修改为:
START_DAEMON=”true”
USBAUTO=”true”
DEVICES=”/dev/ttyAMA0″
GPSD_OPTIONS=”-n”
配置gpsd为自启动
dpkg-reconfigure gpsd
运行:
systemctl enable gpsd
systemctl start gpsd
接下来可以验证GPS模块是否正常,输入以下命令
首先设置串口波特率为115200
stty -F /dev/ttyAMA0 115200
然后运行GPS客户端看看GPS信息:
cgps
如果看到有很多输出一直在滚动就证明串口和GPS模块已经可以正常通讯了,按“q”键退出软件。
接下来下载和编译direwolf,依次运行以下命令:
cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf
这里因为要连github,有时不太好连,多试几次就可以了。
下载完后,就可以进行编译安装了,依次运行以下命令:
mkdir build
cd build
cmake -DUNITTEST=1 .. <--注意这里别漏掉两个“..”
make -j4
make test
make install
make install-conf
树莓派1B的编译过程有点慢,以上所有命令跑完大概需要1小时,耐心等待就好了,一个命令完成后再进行下一个命令。如果是树莓派4B那就很快了,大概二十分钟内就能完成。
完成后,就可以试试运行一下看看是否正常了,运行以下命令:
direwolf –c direwolf.conf
看到类似下图的信息就证明软件及硬件都正常跑起来了。上面的一大堆提示不用管,意思就是强调不要以root身份运行,有时间的朋友可以折腾一下以普通用户身份运行程序。

先CTRL-C退出。
接下来就可以调整一下配置文件,以便让系统按照我们希望的方式运行。运行以下命令:
mv direwolf.conf direwolf.conf.bk
先把原始配置文件改名,作为备份保存。
然后新键一个配置文件:
nano direwolf.conf
接下来逐个解释它们的意思
#使用GPSD服务
GPSD
#使用智能信标,下面的意思是运动时速大于60km/h时,每2分钟发送一次信标,低于5km/h时,15分钟发送一次。
#后面的应该是跟转向角度有关,具体没仔细研究,有兴趣的可以看看官方手册,不需要的请注释掉它
SMARTBEACONING 60 2:00 5 15:00 0:15 30 255
#日志配置,请在/root目录下手动创建log文件夹,它会每天创建一个日志文件
LOGDIR .
LOGDIR log-files
LOGDIR /root/log
#下面设置的是一些时间参数,比如发送正式数据包的前后发送多长时间的空码等
#因为树莓派的一些问题,貌似USB声卡会有一定的随机延迟,有时会把正式数据包的头给截掉
#这时可以适当演唱TXDELAY的值。具体的需要大家亲测,这里的数值是系统默认值
#x10 mSec per unit = 0 mSec.
DWAIT 50
#x10 mSec per unit = 100 mSec.
SLOTTIME 10
#probability for transmitting after each slottime.
PERSIST 63
#x10 mSec per unit = 300 mSec.
TXDELAY 30
#x10 mSec per unit = 100 mSec.
TXTAIL 10
#Half Duplex.
FULLDUP OFF
#声卡设置,如果你上面一直跟着我的步骤操作,0,0就对了,如果系统有多张声卡,请根据实际情况配置
ADEVICE plughw:0,0
#单声道还是立体声,这里我们用单声道即可。立体声是2
ACHANNELS 1
CHANNEL 0
#设置台站呼号
MYCALL NONAME
#调制解调器速率,对于大多数对讲机来说,设置1200就可以了,不需要修改
MODEM 1200
#PTT控制端口,如果按照我上面的硬件连接操作的,就是18,否则请根据实际情况修改
PTT GPIO 18
#数据载波指示端口(收到信标的时候会亮灯)。如果按照我上面的硬件连接操作的,就是23,否则请根据实际情况修改
DCD GPIO 23
#如果需要用APRS客户端来连接到本机,在这里设置端口
AGWPORT 8000
KISSPORT 8001
#APRS无线信标
#TBEACON 是GPS信标,当GPS成功定位后才会发送
#delay是当软件启动后延迟多少分钟开始发送信标,这里是1分钟,也可以写成1:00
#every是发送频率,这里是5分钟发送一次,也可以写成5:00
#symbol是在地图上显示的图标
#alt=1是发送海拔信息,如果不想发送设置为0即可
#freq 是
#comment是要发送的附加信息,用户手册上建议不要在此处写上频率信息,频率信息用freq参数设置
TBEACON delay=1 every=5 symbol="CAR" alt=1 freq=144.640 comment="APRS DIGIPEAT From RaspberryPi 1200bps"
#PBEACON是固定信标,比GPS信标多了lat、long、height等位置信息
#用TBEACON还是PBEACON可以自行决定
#PBEACON delay=0:30 every=1 symbol="CAR" lat=23^10.120344N long=113^17.119954E height=420 freq=144.640 power=05 gain=6 comment="APRS DIGIPEAT from RaspberryPi 1200bps"
#中继设置,如果要打开中继功能,则需要这行参数,可以照抄
#具体的参数含义我也没有仔细研究,有兴趣折腾的可以参考官方手册
DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE
#网关服务器设置
IGSERVER asia.aprs2.net:14580
#登录服务器的呼号及验证码,
IGLOGIN BD7IPA 123456
#向网关发送的信标信息,与APRS无线信标参数设置一样,可以自行调整。
#留意这里多了一个 sendto=IG 的参数,这就表明这个信标是发送给互联网的,不会发送到手台
TBEACON sendto=IG delay=1 every=5 symbol="CAR" alt=1 freq=144.640 comment="APRS iGate From RaspberryPi"
#PBEACON sendto=IG delay=0:30 every=1 symbol="CAR" lat=23^10.120344N long=113^17.119954E height=420 freq=144.640 power=05 gain=6 comment="APRS iGate from RaspberryPi 1200bps"
#发送到网关的路由,照抄即可,无需修改
IGTXVIA 0 WIDE1-1,WIDE2-1
#发送限制,为了避免过度占用频道做的限制
#两个参数对应的是1分钟及5分钟内不能超过的发送次数
#这里表明1分钟内不能发送超过6此,同时5分钟内不超过10次,各位可根据实际情况调整
IGTXLIMIT 6 10
这个软件还有很多可以设置的参数,感兴趣的朋友可以去官网下载,比如IGFILTER等参数也很实用,可以限制中继只接收转发特定呼号的信息等。
https://github.com/wb2osz/direwolf/tree/master/doc
接下来,如果一切OK,运行:
direwolf –c direwolf.conf
过一会应该就能从aprs.cn 等网站上看到自己的信标了。
最后,我们来设置一下开机自动运行
先安装screen软件
apt install screen
安装完后,运行以下命令编辑定时执行文件
crontab –e
新增两行:
@reboot stty -F /dev/serial0 115200
* * * * * /root/dw-start.sh >/dev/null 2>&1
第一行是每次启动时,把串口的波特率调整至115200
第二行是每分钟运行一个脚本,如果发现direwolf已经运行则退出,如果没有则30秒后启动direwolf
这样能确保如果程序意外退出后,还能自动启动起来
每次启动后,通过
screen –D –r direwolf
命令可以看到程序运行的情况
这时千万不要按CTRL-C退出,这样会中断程序的
如果想正常退出screen,可以按CTRL-A,然后按d键,就可以了。
好了以上就是从零开始一步一步搭建APRS网关的所有步骤了,希望大家都能很轻松的搭建自己的网关
73 BD7IPA