跳到内容

APRS折腾之:车载信标

之前的博文《MMDVM花式折腾》中提到了GPS模块和APRS信标,没错,本文就详细讲述一下博主在车子上折腾APRS信标的过程。

APRS全称:自动位置回报系统(Automatic Packet Report System),是业余无线电中的一个项目,结合业余无线电和全球卫星定位系统(GPS)传送实时位置信息,可以在电台之间传递,某些连入互联网的电台也可以将该电台所接收到的APRS数据包上传至APRS服务器,这些分布于全世界各地的APRS服务器将资料汇总并绘制在地图上,供爱好者们在线查看。

可以理解为用声音信号传输数字信息,在电波中发“朋友圈”,分享物和人的各种信息。APRS从诞生到现在已经有二三十年的历史了,虽然看似古老,但是却在我们业余无线电通讯中起到重要的作用。具体作用都有哪些呢?就拿我们平时使用最多的UV段来举例。

博主经常会遇到这样一个问题,当地有好几个热门的直频守候频率:438.500MHz、434.975MHz。。。每次打开电台都很迷茫,不知道哪个频率都有谁在,只好挨个CQ一遍。但有了APRS就会好很多,每当电台工作时都持续间隔向外发送信标,内容包含设备、天馈、功率、当前守候频率、QTH,其他友台通过查看信标(电台直接接收或浏览APRS地图网站)就能了解,都有哪些Ham在使用电台、他们守的是什么频率、在什么方位、据我有多少距离。。。是不是就一目了然不再盲目了?接下来拿起手咪就是个喊。

再比如,到了一个陌生的地方,当地的APRS频率是多少?我是否在APRS网关和APRS中继的覆盖范围内?有没有数字中继和公共热点可供使用?气候如何?这些都可以通过APRS信标得知,偶尔还会有Ham和你主动打招呼。

说了这么多,博主要表达的中心思想就是号召大家多使用APRS功能,有能力的友台多参与APRS设施的建设,在获得通联便利和折腾乐趣的同时让我们的圈子更加繁荣。

 

开工所需材料:

树莓派Zero W(外壳、C10以上TF卡、读卡器)

MicroUSB OTG线(单口OTG或多口Hub均可)

GPS模块(USB口NMEA协议输出就行,十来块钱VK-172就能用,但博主推荐M8030芯片的,原因是GPS和北斗双星方案定位精度更高,内置天线更好,连接线较长可以放在挡风玻璃下避免顶棚屏蔽。)

刷入Raspbian系统:

下载树莓派官方Raspbian系统压缩包,解压得到img镜像文件,通过Win32DiskImager软件刷入到TF卡中,这里建议使用精简的“Lite”版本镜像,因为“Desktop”版预装的图形界面会加重系统负担,一切为了效率嘛。

博主这里使用的是之前折腾的Pi-Star热点盒子,因为Pi-Star实际就是装好MMDVM软件包的官方Raspbian系统,再加入APRS功能,也算是物尽其用。

刷好TG卡以后“我的电脑”里会出现一个boot名字的盘符,创建一个名字为ssh(注意:没有扩展名)内容为空的文件放进去。

再创建一个名为wpa_supplicant.conf(扩展名为conf)的文件,内容如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="手机热点名"
    psk="密码"
    key_mgmt=WPA-PSK
    priority=1
}

network={
    ssid="家中WiFi名"
    psk="密码"
    key_mgmt=WPA-PSK
    priority=2
}

“priority”是优先级,当两个WiFi同时出现时,数值大的会优先连接,因为接下来要照着教程在家配置,所以先连家里WiFi。注意:树莓派Zero只支持2.4G的WiFi,别把5G的接入点给填进去了。

 

安装Direwolf:

TF内存卡放入树莓派,GPS模块通过OTG线转成MicroUSB头插入树莓派的USB数据口,接上5V电源。

进入家中路由器,如果联网成功则在路由DHCP客户端列表中便可看到树莓派的IP地址,使用SSH终端软件连接该IP地址,账号pi,初始密码raspberry。

确认树莓派已经以串口的形式识别了GPS模块,/dev/ttyACM0为GPS模块的设备文件,使用cat命令查看它的内容,如果有GPSNMEA开头语句不断输出,则说明模块工作正常:

cat /dev/ttyACM0

按Ctrl+C终止显示回到命令提示符,安装依赖软件包,国内源比较慢,耐心等候:

sudo apt-get update
sudo apt-get install build-essential cmake git libasound2-dev libudev-dev

获得Direwolf源代码:

cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf

编译:

mkdir build && cd build
cmake ..
make -j4

安装:

sudo make install

创建配置文件:

cd ~
nano direwolf.conf

内容如下:

ADEVICE udp:7355 null
GPSNMEA /dev/ttyACM0
MYCALL BG9EGA-9
TBEACON sendto=IG delay=1 every=5 symbol="/>" comment="438.500MHz Hello CQ"
#SMARTBEACONING 60 3:00 5 10:00 0:10 255
MODEM 1200
AGWPORT 0
KISSPORT 0
IGSERVER china.aprs2.net
IGLOGIN BG9EGA-9 12345
IGTXLIMIT 6 10

“GPSNMEA”用于指明GPS坐标的获取设备,填入上文提到的那个设备文件/dev/ttyACM0即可,Direwolf会根据GPS模块输出的NMEA协议语句得出GPS坐标值。

“MYCALL”是你的“呼号-SSID”,如“BG9ABC-9”,SSID含义查看

“IGSERVER”是APRS-IS服务器地址,就近写中国(china.aprs2.net)。

“IGLOGIN”是APRS-IS服务器的认证,填“呼号-SSID”和“Passcode”,呼号对应的Passcode通过此网站可以算出。

“TBEACON”是信标的内容部分,这里详细说明一下,便于大家根据自身情况修改,更多配置可参阅官方文档的第114页:

  • sendto:信标发送方式,值“IG”就是iGate网关的意思。
  • delay:Direwolf程序启动后多久开始上传信标,“1”为一分钟,“0:30”为30秒。
  • every:而后的上传间隔。
  • symbol:APRS图标,两个字符,“/>”为小轿车,更多图标参照APRS图标列表
  • comment:信标附带信息,写上你常守的频率再寒暄一下吧,让其他友台了解你。

“SMARTBEACONING”是智能信标功能,根据车速和角度控制发射,博主设置的是速度高于60MPH时每3分钟发射一次、低于5MPH时(堵车)每10分钟发射一次、中间速度根据比例自动计算、转弯角度大于10°时发射、连续拐弯时发射间隔大于10秒。这个功能还是很强大的,一则保护您的秀发,二则节省频率资源,最重要的是地图上的轨迹会更漂亮,需要此功能的话删掉行首的“#”即可生效,这时“PBEACON”里的“every”会失效。

配置完成后Ctrl+x再按y回车保存

测试:

direwolf

命令输出如下则说明配置成功,报错的话根据提示找原因。

Reading config file /home/pi/direwolf.conf
Audio input device for receive: stdin  (channel 0)
Audio out device for transmit: null  (channel 0)
Channel 0: 1200 baud, AFSK 1200 & 2200 Hz, E+, 44100 sample rate.
Note: PTT not configured for channel 0. (Ignore this if using VOX.)
Disabled AGW network client port.
Disabled KISS network client port.

Now connected to IGate server asia.aprs2.net (119.9.79.69)
Check server status here http://119.9.79.69:14501
[ig] # aprsc 2.1.8-gf8824e8
[ig] # logresp BG9EGA-5 verified, server T2HK
[ig] BG9EGA-5>APDW15:!3415.05N/10854.91ElWorking...

 

应用:

以上就是Direwolf的基本配置。好了,现在要做的就是加入开启自动启动:

编辑开机启动文件:

sudo nano /etc/rc.local

在“exit 0”的前一行插入启动命令,Ctrl+x保存,编辑后如下:

# Direwolf Service
su - pi -s /bin/sh -c "/usr/local/bin/direwolf &"

exit 0

重启树莓派:

sudo shutdown -r now

以后树莓派启动时便会加载配置文件/home/pi/direwolf.conf在后台运行Direwolf,稍等片刻后浏览器打开http://aprs.cn就可以看到你的信标了。

 

发射方案:

以上方案其他友台只能通过APRS地图网站查看你的信标,因为你是通过互联网上送的,而非电台发射,所以无法通过电台接收查看。

接下来博主就讲一下如何通过电台将信标发射出去,让周围的Ham通过电台收到你的信标,如果你恰巧在某个APRS中继(Digipeaters)和网关(IGate)的覆盖范围内,那完全可以关掉手机WiFi热点,中继会将你发射的信标转送给网关,由网关的互联网接口上传到APRS-IS,也就是APRS地图网站。

有的台友提到一个方案:手机有GPS有耳机口,连上台子,打开APRSDroid APP通过台子的VOX声控激活PTT并发射岂不更简单?但博主不建议这么做,因为声控PTT存在安全隐患,任何声音包括杂音干扰都会激活发射,一旦失控会让当地APRS频率瘫痪。而且台子的声控灵敏度低的话,语音都开始传送了才激活PTT,相当于话说了一半才按下PTT,那么这个信标会因为不完整而无法被解码。所以这个方案用做网关接收可以,用来发射的话博主还是不建议这么做,而且Direwolf官方也对这个方案予以否决:

好在官方同时也给出了更好的解决方案(见官方文档的第75页):CM08和CM119芯片的免驱USB声卡不但可以传送语音,而且内置的GPIO可以控制电台的PTT,Direwolf也内置了相应的配置让这个过程变得更简单。接下来我们要做的就是用此类声卡DIY一个连接器:

 

材料:

CM108/CM119芯片声卡(淘宝搜CM108声卡,25块钱左右。)

(博主手头恰巧有一个CM119,虽然和淘宝上的不太一样,但也凑合能用,CM108和CM119针脚定义基本一致,推荐使用CM108。)

10KΩ电阻1枚(看到有国外腿子用1KΩ的)、NPN三极管1枚(直插的和贴片的都行,博主声卡壳子空间有限,选择了贴片型。)

手咪线(本文以K头为例,其它接口参阅:手咪接口定义

开工:

芯片的第13号脚为“GPIO 3”,用漆包线引出,连一个10KΩ电阻和一个三极管,三极管一端接连板子GND另一端接K头的PTT。

声卡的Mic接手咪线的Speaker,声卡的Speaker接手咪线的Mic,再接上引出的PTT和GND就OK了。

博主的作品(渣焊工,还好有胶固定。)

做好以后插在树莓派上,使用命令查看设备ID:

aplay -l

“card 1”和“device 0”表示第1块声卡的第0个设备

 

此时开始修改上文中创建好的Direwolf配置文件:

cd ~
nano direwolf.conf

内容较上文有所改动:

ADEVICE plughw:1,0
GPSNMEA /dev/ttyACM0
PTT CM108
MYCALL BG9EGA-9
TBEACON sendto=IG delay=1 every=5 symbol="/>" comment="438.500MHz Hello CQ"
TBEACON delay=1 every=5 symbol="/>" comment="438.500MHz Hello CQ"
#SMARTBEACONING 60 3:00 5 10:00 0:10 255
MODEM 1200
AGWPORT 0
KISSPORT 0
IGSERVER asia.aprs2.net
IGLOGIN BG9EGA-9 12345
IGTXLIMIT 6 10

ADEVICE:输入输出设备类型为“plughw”,具体设备是“第1块声卡的第0个设备”

PTT:使用“CM108”类型声卡的GPIO4针脚来控制PTT发射。

TBEACON:此处可以写两条,一条通过APRS-IS上传(加入sento=IG参数),另一条通过台子发射(不含sento=IG参数),这样通过浏览器APRS地图可以查看,同时附近的电台也能收到了。

 

接下来对声卡音量和增益进行调整:

这个“1”就是上述“aplay -l”命令得出的声卡ID“card 1”

alsamixer -c 1

按“F6”选择声卡,左右移动按“m”把“Speaker”和“Mic”的“MM”调成“00”,“Auto Gain Control”调成“MM”(MM表示关闭,00表示开启),按“↑”将麦克风和喇叭音量调到50左右,调好后“Esc”退出。

使用以下命令保存,否则重启后会还原:

sudo alsactl store

命令启动Direwolf程序并打开APRS地图网站或频谱仪查看结果:

direwolf

如果设置有误,启动时的反馈信息会告诉你,照着提示找原因便可。

到此为止就配置好了,在确保启动文件/etc/rc.local没问题以后就可以装车了。

可以看到开启智能信标以后航迹更漂亮了

发表于无线电

18 条评论

  1. bg4vrg bg4vrg

    感谢分享~
    折腾一天direwolf的aprs tracker功能没有成功,看到你的配置文件后豁然开朗。
    因为我事先配置了gpsd所以我没有用GPSNMEA /dev/ttyACM0这个参数,
    直接替换成GPSD也没问题

    • Direwolf的官方文档里说的很详细,GPSNMEA的好处就是配置简单,直接读GPS模块输出的NMEA语句。而GPSD的优点则是多个软件可以同时使用GPS模块,不像GPSNMEA是独占的。我太懒就没开GPSD服务,其实可以利用GPSD的优点,跑Direwolf的同时附带跑GPS校时和Traccar远程航迹存储。

  2. NASa NASa

    我才开始研究arps,看到你的文章,想确认一下,整篇文章讲的就是将一台模拟手台作为发射机,GPS模块读取到信息后,通过树莓派编码成arps格式转换为模拟信号通过手台发射出去,这样aprs中继收到后上传到互联网?
    我一直在弄明白带ARPS功能的手台就是将这GPS模块和ARPS编解码模块同时做到了手台里吧?

    • 对,GPS模块获取坐标,树莓派封装,接下来可以直接网传给服务器,也可以通过电台发出去,由收到信标的其它APRS网关传给服务器。实现这套功能的方案很多:成品APRS电台和马工盒子的优势在于简单稳定,实现信标收发和信息附带;本文介绍的Direwolf胜在功能和性能,在前者的基础上还能实现APRS网关、APRS中继、脚本控制、外部联动,而且实测解码能力要优于APRS电台。虽然后者相对复杂且不稳定,但可玩性高,总之根据自己的喜好和能力选择就行。

  3. daqi daqi

    问一下三极管用的是那个型号的啊

    • 随便找个NPN三极管都可以吧,毕竟声卡也没多大电压电流,我在废板子上拆的贴片,老外们用2N3904插机的多。

      • BG9GYH BG9GYH

        老师请问一下,这声卡如果插在windows系统上,可以实现电脑播放音频同时控制电台PTT嘛?

        • Direwolf从1.7版本开始支持Windows下运行了,和Linux下一样可以CM108控制PTT,但我没有实际测试过,所以稳定性未知。

          • BG9GYH BG9GYH

            谢谢老师,我是想用win系统上装个整点报时的软件,到整点报时控制电台发射,等年后快递通了,我搞个这声卡回来研究一下。

  4. 自然风 自然风

    原来CM108有GPIO可用,学到了👍

  5. BG5CNO BG5CNO

    请问,为什么我设置完成,请一天中继可以在地图显示,但第二天重启,中继就不能显示了,但是我手台通过中继还是可以连上互联网上显示出我有手台位置。
    (中继在地图上不显示)

    • 我看到你的BG5CNO-1是由BG5CNO-9上传的,那么-9是APRS网关吗?
      我还看到一个BG5CNO-15的APRS网关信标,它没有接收上传任何非自身信标。
      首先你要保证Direwolf能开机自启并在后台持续运行,这样才能定时显示自身信标和接收上传其它信标。
      还有,检查配置文件里的TBEACON自身信标,其中delay和every值配置正确,这样才能定时更新自身信标。
      如果你能参照我的新博文保存日志的话,那么排查问题也就更容易了。

  6. BG5CNO BG5CNO

    麻烦你看一下,我的配置。 就是不显示中继自身信标.
    ADEVICE plughw:1,0
    ACHANNELS 1
    ARATE 44100
    CHANNEL 0
    MYCALL BG5CNO-9
    MODEM 1200
    PTT CM108
    AGWPORT 8000
    KISSPORT 8001
    PBEACON delay=0:30 every=2 via=WIDE1-1,WIDE2-1 overlay=D symbol=”digi” lat=30^11.11N long=121^08.24E power=4 height=5 gain=6 comment=”NOCALL-10 2m APRS Digipeater”
    FIX_BITS 0
    DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE
    IGSERVER asia.aprs2.net
    IGLOGIN BG5CNO-9 19113
    IGTXVIA 0 WIDE1-1,WIDE2-1
    #IGFILTER m/50
    #FILTER IG 0 b/BG5*
    IGTXLIMIT 6 10

    • 信标内容没问题,但没有指定发送方式,给PBEACON段里加一个“SENDTO=0”。
      0是通过射频的第0个通道发送自身信标,对应配置里的“CHANNEL 0”。
      如果只通过网络发送自身信标的话就是“SENDTO=IG”。

  7. BG5CNO BG5CNO

    万分感谢,可以正常显示了。
    PBEACON delay=0:30 every=30 via=WIDE1-1,WIDE2-1 SENDTO=IG overlay=S symbol=”digi” lat=30^11.11N long=121^08.24E power=10 height=15 gain=6 comment=”BG5CNO-9 2m APRS Digipeater”
    现在显示的是“6角星一个S” ,我想把标志为天线。是不是可以改成这样
    PBEACON delay=0:30 every=30 via=WIDE1-1,WIDE2-1 SENDTO=IG symbol=”/r” lat=30^11.11N long=121^08.24E power=10 height=15 gain=6 comment=”BG5CNO-9 2m APRS Digipeater”

  8. bh4wal bh4wal

    EGA你好,我操作树莓派出现问题了,编译的时候进行不下去了:
    mkdir build && cd build 这一步没问题
    cmake .. 这一步没问题
    make -j4 这一步提示错误了:make : *** No targets specified and no makefile found. Stop.

    LINUX我比较菜。

发表评论

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