本文已獲得 BD7IPA 老師的轉載授權。
原因:在戶外健行活動時,需要定位、軌跡、方向等功能。雖然手機具有相當完善的功能,但由於電池壽命、4G/5G訊號覆蓋不全以及部分山區訊號較弱等因素,使用起來不太方便。因此,希望透過無線電APRS的形式進行位置報告。同時,對於遠在家中的親人,也可以即時掌握自己的位置,萬一真的發生意外情況,也能協助救援。對於喜歡戶外活動的人來說,這具有極大的意義,無法與手機相比。
目標:利用樹莓派、USB聲卡和無線電收發機,建立一個整合了網關、中繼和追蹤功能(定位)的小基地台。
可以實現:使用者攜帶移動基地台進入山區,並在車內(或地形開闊、海拔高且有4G/5G訊號的地方)放置。
- 手機的位置資訊可以透過基地台的網關上傳至 APRS 地圖伺服器(基地台需具備 Wi-Fi 連接功能,或有線網路,但戶外有線網路較不實際)。家人就可以透過地圖伺服器得知您的位置。
- 在兩台手持無線電之間,若因訊號覆蓋無法互相連線,可以透過基地台的中繼功能互相傳送位置資訊,方便戶外活動與隊員聯繫。
- 基地本身具有定位功能,會定期向外部發送自身的座標,這在戶外活動時,當地圖不便使用或迷失方向時,可以提供一個明確的目標方位。
起初是在「鹹魚」上收到的一位大佬的成品,但它沒有 Wi-Fi,也沒有 GPS 定位功能。 在自己加裝 GPS 的過程中,進行了大量的實驗,從零開始,安裝系統、編譯軟體、更換音效卡、更換手台、加上 GPS 模組,一步一步地完成所有步驟,遇到了不少問題,秉持著「火腿精神」,整理出整個過程,方便有興趣的朋友在 DIY 的過程中避免踩坑。
不囉嗦,馬上開始。在開始之前,我們先總結一下所需的硬體和軟體:
- 硬體:
a) 樹莓派(1B 就好,只是安裝系統和編譯軟體會比較慢,我也試過用 4B,除了編譯更快以外,其他沒有差別。網路上有人說香橙派也可以,但我沒有香橙派,所以沒試過,理論上只要能安裝 Linux 就可以)。
b) USB聲卡,在某寶上有幾十塊錢就可以買到,搜尋「CM108」的聲卡即可,我已經試過大板和迷你版,兩者都沒問題,你可以依照自己的喜好選擇。
c) 原本從二手市場購買的手機,原本就已經有一台,為了方便更換為寶峰 UV5R,我可以手動調整頻率、雙段接收,這在戶外使用時會更加方便,而且與其他登山愛好者聯繫時,也可以更輕鬆地更改頻點。
d) GPS模組,我是在某寶購買了「維特智能」的GPS+BD 北斗模組,並連接了外部天線的版本。
e) 3.3V繼電器模組(請務必使用3.3V的繼電器,Raspberry Pi的GPIO口只提供3.3V電壓,5V的模組無法驅動),用於控制PTT。在咸魚上購買回來時,它是用一個三極管+電阻連接到PTT上,後來我換成UV5R時不知為何一發射聲卡就重置,導致程式退出,後來換成繼電器控制就沒有問題了,只是每次發送繼電器吸合時噪音較大,介意的人可以找找固態繼電器看看是否能實現。
f) 兩個可調變壓模組 (DC-DC),因為我使用的是 12V 電源,樹莓派需要 5V 的電源,而無線電也需要 7.4V 的電源,因此使用兩個。
g) 我使用的是在箱底找到的 RTU8188SU 芯片的無線網卡,大家可以在某寶上隨意購買,只要在 Linux 環境下就不需要額外安裝驅動程式即可。
h) 音频轉接板,可在「某寶」搜尋「APRS 手台手機轉接板 (BH4TDV 製作)」。另外,TDV 的大佬也有 TNC 網關等相關的成品,如果您不想自己組裝,可以直接購買成品。
i) 對講機 K 頭線。
- 軟體:
a) 作業系統:DietPi,基於 Debian 的迷你系統,非常適合低規格電腦使用。官方網站:https://dietpi.com/
b) Direwolf:Dire Wolf 是一款開源的軟體「聲卡」AX.25數據包調製/解調器/TNC 以及 APRS 編碼/解碼器。它可以單獨用於監聽 APRS 流量,作為追蹤器、數位中繼站、APRStt閘道或網際網路閘道 (IGate)。官方網站:https://github.com/wb2osz/direwolf/
接下來,我將一步步帶你從零開始搭建這個小型基地台。過程中需要一些簡單的手工能力(焊接線路,並不難),以及一些 Linux 的基礎知識。如果已經有相關經驗,可以更好地理解;如果沒有基礎,也可以一步一步來,應該也能成功。遇到問題時,多去網上搜尋,國內似乎玩 APRS 的人不多,可能是因為政策原因,但國外還是很多人玩的,所以多到國外網站上查資料,更容易找到問題的答案。
首先展示兩張整體圖,這樣可以更直觀地了解它。


首先,我們要搭建硬體:
- 將直流 12V 輸入後,首先通過兩個降壓模組,分別為樹莓派和手提電腦供電(手提電腦也可以直接在某寶購買一個變壓器,裡面有 12V 轉 7.4V 的降壓板)。
- Raspberry Pi 的兩個 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 連接到外殼上的其中一個 LED 上,將 LED 的正極與 GPIO23 之間連接一個 680 歐姆的電阻。
e) 声卡的指示燈、網卡的指示燈,分別用延長線焊接在外殼的一個LED上。
f) 製作 K 型線的音訊連接線,並依照線序定義圖,焊接在音訊轉接板上。



接下來是軟體方面:
首先安裝作業系統:
- 準備一張 8GB 或更大的 SD 卡 (如果使用 Raspberry Pi 4B/3B,則使用 TF 卡,操作方式與上述相同,請依照指示進行)。
- 前往 DietPi 的官方網站下載系統映像(請記得根據您自己的樹莓派板來下載)。下載後,解壓縮並備份。檔案名稱應該是 DietPi\_RPi-ARMv6-Bookworm.img,如果是樹莓派 4,則應為 DietPi\_RPi-ARMv8-Bookworm.img。

- 系統燒錄:下載 Rufus 便攜版 (官方網站:)https://rufus.ie/zh/),插入 SD 卡,開啟 Rufus:
a) 如果有多個 U盤或 SD 卡已插入電腦,請確認是否選錯。
b) 選擇剛從壓縮檔解壓縮出來的系統映像檔案
c) 其餘選項維持預設狀態,點擊「開始」按鈕,等待燒錄完成。
d) 完成燒錄後,不要急著取出 SD 卡,使用 Windows 的記事本開啟 SD 卡中的 dietpi.txt 檔案,並尋找…
將 `AUTO_SETUP_NET_WIFI_ENABLED=0` 更改為 `AUTO_SETUP_NET_WIFI_ENABLED=1`,然後儲存並關閉。這樣第一次開機時,它就會自動開啟 Wi-Fi。
e) 然後打開 dietpi-wifi.txt 檔案,找到…
`aWIFI_SSID[0]=''` 這行程式碼,在等號後面的單引號內,請輸入您的 Wi-Fi 名(請注意,似乎對大小寫敏感,可能不支援中文,建議使用英文網路名稱)。
aWIFI_KEY[0]=''; 這行程式碼,在等號後面的單引號內,請輸入您的 Wi-Fi 密碼。
f) 其他部分請保持不變,並關閉檔案。

- 將 SD 卡從電腦中取出,然後插入到樹莓派中,按下電源開機。
- 等待一兩分鐘後,請連接您的路由器,確認機器(名稱為「DietPi」)是否已取得 IP 位址,並記錄下來。
- 使用 SSH 工具(例如 PuTTY)連接到樹莓派,使用者名稱:root,密碼:dietpi
- 這裡需要稍等片刻,系統首次啟動時會執行許多腳本,基本上不需要干預,讓它自己運作即可。但是需要留意的是,首次啟動時會連接到GitHub取得最新版本號。我家的寬頻(聯通),有時候可以,有時候不行,可以多嘗試幾次,或者在不同時間試試看。如果實在不行,就請使用「科學上网」的方法,具體步驟不在這篇文章範圍內,就不再詳細說明,請自行搜尋。
- 在此期間,系統也會詢問您一些簡單的問題,例如:「您是否參加使用者調查?」「您是否要修改預設密碼?」等。請大家放鬆心情,仔細閱讀介面上的提示,然後根據自己的需求進行選擇即可。
- 接下來,您需要進行一些軟硬體設定,在此我們將所有設定都維持預設狀態,直接選擇最後一項「安裝系統」(如圖所示)。

- 在所有步驟都完成後,您應該會看到以下介面,這表示 DietPi 系統已經成功安裝。

接下來是安裝軟體,以下的所有操作預設以 root 身分執行。
首先打開 USB 音卡和串行口:
dietpi-config
出現以下介面,選擇「音效選項」-> 音效卡


選擇「hw:0,0 Device USB Audio」,按下 Enter 鍵進行安裝。

完成後,一路按「Back」鍵,直到最上層,先不要急著關閉。接下來設定串列通訊,讓 GPS 和樹莓派可以正常溝通。
在最高層選擇「高級選項」

選擇「序列/UART:管理可用的設備」

依照圖片所示,選擇「關閉」選項。

完成後,一路按「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 安裝:cmake, make, build-essential, libasound2-dev, udev-dev, git, libgps-dev, gpsd-clients
這個過程會比較慢,畢竟是第一代的樹莓派,請耐心等待。如果使用樹莓派 4B,則會更快。
當所有設備都已正確安裝後,就可以設定 gpsd 服務了。
nano /etc/default/gpsd
內容修改為:
START_DAEMON="true"
USBAUTO="true"
DEVICES="/dev/ttyAMA0"
GPSD_OPTIONS="-n"
設定 GPSD 為自動啟動
使用 dpkg-reconfigure 重新配置 gpsd
執行:
啟用 gpsd
啟動 gpsd
接下來可以驗證 GPS 模組是否正常,請輸入以下指令:
首先,請設定串列口的鮑機率為 115200。
使用 `stty` 命令設定終端 `/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,並設定 `UNITTEST=1`:`cmake -DUNITTEST=1 ..` <--請務必不要遺漏兩個「..」
make -j4
make test
make install
make install-conf
使用樹莓派 1B 編譯可能比較慢,上述所有指令執行大約需要 1 小時,請耐心等待,一個指令完成後再執行下一個指令。如果使用樹莓派 4B,則會很快,大約可以在 20 分鐘內完成。
完成後,您可以嘗試執行指令,看看是否正常運作。請執行以下命令:
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
#傳送後發送的機率。
PERSIST 63
#x10 mSec per unit = 300 mSec.
TXDELAY 30
#x10 mSec per unit = 100 mSec.
TXTAIL 10
#半雙工。
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
接下來,如果一切順利,請執行:
direwolf –c direwolf.conf
稍後應該可以在 aprs.cn 等網站上找到自己的信號。
最後,我們來設定一下開機自動執行。
首先安裝 screen 軟體。
使用 apt 安裝 screen
安裝完成後,請執行以下指令來編輯定時執行的檔案。
crontab -e
新增兩行:
@重新啟動時執行:stty -F /dev/serial0 115200
* * * * * /root/dw-start.sh >/dev/null 2>&1
第一行是每次啟動時,將串口的速度調整為 115200。
第二行是執行一個腳本,該腳本每分鐘執行一次。如果發現「direwolf」已經執行,則停止;否則,會在 30 秒後啟動「direwolf」。
這樣可以確保,即使程式意外關閉後,也能自動重新啟動。
每次啟動後,透過
螢幕 -D -r direwolf
可以查看程式運行的情況。
在此千萬不要按下 CTRL+C 鍵來結束程式,這樣會導致程式停止運作。
如果您想要正常關閉螢幕,可以直接按下 CTRL+A,然後按下「d」鍵即可。
好的,以上就是從頭開始一步步搭建 APRS 網關的所有步驟。希望大家都能輕鬆地搭建自己的網關。
73 BD7IPA