Dantracker 下集 – 無線收發編

 

dan2_cover

 

上集提要

安裝過程和經 network 收取並顯示 aprs 站台資訊。

下集重點

下集主要嘗試以無線電收發 aprs packet,並顯示在 dantrackeraprs.fi 上。

為此,也陷入前所未遇到,瀕臨失敗的苦戰。

 

Devil 級數的 screen power saver

承上集提到的 Rpi bug,就是 10minRpi 自動關掉視頻訊號。

鍾意就係 feature,唔鍾意就係 bug。對我來說,用在 7″ display 上,停咗 signal 都唔會停那塊食電背光,所以明顯是 bug

和大部份人一樣,由細到大用開 MS windows,本以為按一兩下 mouse 就可關掉這個功能,結果玩足三日,將網上所有方法試暈都係唔 work

最後方法還是打那塊 7″ display 主意。

這是一塊觸控屏,之前沒用觸控的原因是觸控驅動程式和 Rpi 最新的 OS Jessie 有衝突,按多幾下就會搞死個 OS,要重裝。

而剛好這個 project 用的 OS wheezyok,可能這是上天的安排。所以不配備 keyboardmouse 下,唯有 10min 內或黑畫面後按一下 screen

Stupidbut work

 

RF 收發的準備

由於想試真實環境,沒有其他路徑如 WiFinetwork 等提供訊息流,所以沒有設定 Rpi WiFi 的參數。

folder 內的 aprs.ini 刪去或備份到另一檔案。然後將 examples folder 內的 aprs.ini 抄到工作 folder 中。

nano 編輯 aprs.ini,將作者的資料改為自己的。

telemetryport 必需前面加 #,否則運行不了。

這個 telemetry 參數是有點古怪的。獨佔一個 serial port。而這個方案已有一個 portgps,一個接 TNC 。為什麼還要多一個 port 處理 telemetry

這個時侯還是搞不清的,所以加上 # ignore 佢先。

 

Round one

接上 TNC-X 後,執行上集的兩指令,發現不能顯示從我的 ftm-350 發出的 beacon,儘管 TNC 接收燈著了。

由於室內也收不到 GPS 訊號,會否因此構成影響也不清楚,所以唯有戶外測試。

戶外測試發現,儘管 GPS 接收良好,但仍舊不能顯示 APRS 站資訊。當下也只能不停更改指令和 ini 檔案參數,只一次成功,但 reboot 後也不能重覆。

 

dan2_sh1

 

dan2_sh2

 

dan2_sh3

 

玩了一個下午,只有一次不能重覆的成功,too bad

事後檢討

由於 ini 參數內有一 initial tnc 的指令參數,TNC-X 本身就是一個 KISS TNC,應不需啟動轉 mode 指令。會否因此而 talk 唔到係 unknown

不要緊,這個時侯就係鬥裝備齊唔齊。舊文介紹過的 16F88 TNC 可用同一對指令 KISS ONRESTARTmodeKISS TNC。遂換上之。

另一擔心的是,都幾肯定那兩指令不能直用。但要改到點,完全無概念。

inibeaconing 一欄,明顯是 smart beaconing 參數。

Smart beaconing 廣泛用於 mobileaprs 站台。簡單來說汽車行得越快,發出 beacon 間隔越密。速度慢,beacon 間隔也變疏。

咁我坐定定係公園試,會否 0 速度下而不發出 beacon 也是 unknown。我總不能為試 trackercallUber

上集提到的三份文件,其實都係提到 stress test,即經 network 收取 aprs 就停。會否這個 solution 只能行到這一步而已,也開始擔心。

 

Round two

三號風球下有蓋戶外地方再試。

換上 16F88 TNC,並先用指今轉為 KISS mode

事前在網上不能找到有效的解決方法,只能在零碎的片段找到 aprs -v

這個指令可勉強測試到與 TNC 的收發連接,收到會顯示 aprs string,按 Ctrl + c 離開時 TNC 會發射一下 beacon

但在執行指令換上 aprs -v 也不得要領。仍是不能顯示資訊。

今次的結果,只能觀察到 beaconingatrest_rate 參數會反映在 GPS 一欄上。

1800 = 30min

 

Round three

不能無了期的 trial & error,接近失敗邊緣。

三份文件己無參考價值。也沒有其他秘笈可用。然而, open source 方案可貴之處是源碼是公開的。而源碼己告訴了你一切。

source code 是最後一步了,c program 早已連本帶利還回給老師。只能盡力而為。

翻看 ui.c ,有以下一段:

ui_key

 

實測發現,按 c 掣會進入一黑畫面。b m k 則無反礙。

dan2_press_c

 

去到此時,我初步結論是:

個方案寫到有初步成效就停止繼續,
或轉為商業應用而停止免費發放,
又或是商業應用的方案,但抽起部份功能放給 ham

上文提到的 telemetry,和作者的 YouTube demo 對比下,應是在最下方顯示電壓和温度的。但其他同好的試製也沒有這行 data 的。

kk7ds_dan

 

aprs.c 內有以下一段:

dan2_aprs_help

這是轉捩點。輸入 ./aprs –help 知道完整 option 列表。

dan2_com1

 

最後決定將第一條指令更改,第二條不變:

screen -dmS aprs ./aprs -t /dev/ttyUSB0 -m -c /home/pi/dantracker/aprs.ini
screen -dmS ui xinit /home/pi/dantracker/ui

第一條的指示是:

明示 tncport 位。
明示 config file 的位置。
使用公制單位。

成功了!留意程式初始時間為約 5 sec,需等一下才能接收aprs packet。  

 

gps_wrong

 

室內環境也能收到我的 ftm-350 aprs 資訊。然而也發現 ini file 內的靜態座標是沒用的。 aprs 站台距離十萬九千里遠。

擇日室外再試。

 

Round 4

八號風球多了一日額外假期,趁黃昏風勢轉弱到 cover playground 再試。

新定的兩指令 confirmwork 的。

ty8_beacon

但也發現一個新問題,gps 一欄顯示的時間亂了。原因是 Rpi 不設內置 RTC。上網時會到 NTP server 同步時間。不能上網時則會啟動 fake clock。這fake clock 是沒用的,只為應附一些需回報時間的系統免出錯而設。用 date 指令查看一下,還是幾天前的時間。

Dantracker 顯示的不是 GPSUTC 時間或系統時間,從秒數有時幾秒咁跳就知是亂數的。然而室內接了上網,但又收不到 GPS 訊號時,GPS 一欄時間仍是亂數的。解決方法不外:

  1. 室外 WiFi 接上網
  2. 加入 RTC module
  3. GPS 本身就是一個很精準的時鐘。可研究能否利用 gpsd 等將之既可對應 dantracker 之餘,又可作為 NTP

 

最後測試

Telemetry 測試

port 設為 ttyAMA0,即 Rpi serial port。嘗試據我對 source code 的理解輸入參數,希望能在最底層顯示模擬的電壓和温度。但進入 program 一會就 hang up 了,不論有否輸入參數;唯有放棄。

完整 ini

由於這個方案很缺資訊,我將我的 ini 檔完整顯示,僅供參考。

[gps]
port = /dev/ttyUSB1
rate = 4800
type = nmea

[tnc]
port = /dev/ttyUSB0
rate = 9600
type = KISS
init_kiss_cmd =,

[telemetry]
#port = /dev/ttyAMA0
rate = 9600
type = vr2xkp

[station]
mycall = VR2XKP-9
icon = /j
beacon_types = weather,phg
power = 4
height = 0
gain = 4
directivity = 0
digi_path = WIDE1-1,WIDE2-1

[beaconing]
atrest_rate = 1800
#atrest_rate = 120
min_speed = 10
min_rate = 300
max_speed = 60
max_rate = 60
course_change = 30

[comments]
enabled = 1,2,3,4
1=Using a home-built tracker
2=
http://danplanet.com
3=Software $ver$
4=Set path to TEMP1-1,WIDE2-1 to digi

[static]
lat = 22.342
lon = 114.171
alt = 0
speed = 0
course = 123

[digi]
alias=TEMP1
enabled=1
append_path=1
txdelay=500

記著換回自身的 callsign、座標。 TNC 我換回 TNC-X ,並刪掉 initial command

 

 

YouTube demo

主要示範純 RF 接收到的場境,和用上下鍵可選擇清單上的站台,顯示其資訊。

 

 

 

總結

分別透過 networkRF 介面使用 Dantracker 去顯示 aprs 站台資訊算是成功了。而在不能和 TNC 通聯時,也 plan  C direwolfmanual 由頭讀到尾兩次。稍事休息後希望將兩者整合一起。Direwolf 功能強大,之後會專題介紹。

透過 network 去接收,能顯示較多資料如機場 VHHH 天氣報告,也省回一部收發機和 TNC 。適合室內固定台。

RF 去接收,較合 mobile 使用。

利用 gpsd share gpsdata stream 在其他程式是可行的,之後也會測試。

這個 project 耗時近 2 個月,挫敗感之大前所未有。跟住篇文應講番的輕鬆既 topic

Posted in APRS, AVR / ARM | Tagged , , , , , | 11 Comments

Dantracker 試製篇,上集

 

dantracker_cover

 

前言

Dantracker 是一個數年前 APRS 界頗為出名的 open source tracker 方案,介面無異於商品級的設備;一些自製 dot martix LCD 方案,或簡陋的 TFT 彩屏介面即時相形見拙。

不太普及的原因除了安裝資訊不足外,相信作者不再更新也是一個因素。網上的東西,沒人講就自然下沉。

我以前不講,除了希望網上多些資訊供参考外,另一原因是這個方案較適合駕車上人仕使用。But anyway,與其讓好東西下沉,不如當一個 topic 講一下。

這是 2011 年的方案,距今快近六年了,可找到的資料也定了。就 base on 這些資料,試製一下吧。

儘管是幾年前的東西,但至今也沒找到類似的替代品。

測試發現,可玩的比預期多。同樣,遇到的問題也比預計多得很,所以分兩集講。

 

Why Dantracker

aprs.fi 地圖,沒有 ham moible 中是靜態的。

Dantracker 可顯示當前收到 station資訊,最近8 station的相對方位角和距離。自身 GPS 資訊,和最近一次收到的 aprsWX 資訊;內容較生動。

aprs_wx_dan

 

 

版本對決,KK7DS  vs N7NIX

Dantracker 原作者為 KK7DS,是一開源方案。

N7NIX 以原著為基礎,發展出新一代的版本,加進支援 aprs message 收發,關機等功能。

n7nix-dantracker-main

N7NIX screen, Courtesy of http://www.trinityos.com

 

我對比兩者的功能,介面後,還是喜歡原著的,原因:

  • 黑色介面,比 N7NIX 的彩色介面較舒服
  • 儘管後者支援 aprs message,但代價是需配備keyboard mouse。戶外使用有點不設實際。要功能完整,用 notebookAPRSISCE/32 吧。
  • N7NIX 的介面見方,有違一般屏幕的比例。
  • 我希望做到的是殘廢餐,開機 boot 起就用,按 off 制就熄機走人,簡簡單單,無需服待。

 

硬件準備

我用的是一台 Rpi rev2,由於這是 2011 年的方案。所以用舊款的也應沒問題。建議先將 reset pin (RUN) 銲上 pin header,否則需配備尖咀鉗。

rpi_reset

 

KISS mode TNC 我用回自製的 TNC-X 。整個方案 settle 後希望可利用軟件 TNCDirewolf,有利推廣。

一條 USB to RS232 cable,供接到 TNC

一個 USB GPS

 

軟件準備

實測發現,Rpi 最新的 OS Jessie 不能成功編繹,會出現錯誤,所以用回 wheezy。最後的為201555日版。請到官網下載。

 

参考資料準備

除數個 YouTube 影片可供簡單看一下較果外,網上只有三篇資料可用。皆由 PA0ESH 編寫。

第一篇,是本文參考重點。但放心,根著做是不成的。http://www.pa0esh.nl/wordpress/?wpfb_dl=6

第二篇,有 2013 ,15 兩版本。但太多 network 設定,其他和第一篇類似。
http://www.pa0esh.nl/wordpress/wp-content/uploads/2015/02/Dantracker-on-a-Raspberry-PI-from-scratch.pdf

第三篇,是最後的更新。
http://www.trinityos.com/HAM/CentosDigitalModes/RPi/n7nix-dantracker-install.txt

三篇皆混合了 KK7DSN7NIX 的版本來談。但個人覺得,作者較偏愛後者。這也增加了難度。

 

安裝步驟

首先,接上 USB to RS232 cord USB GPS

開機登入後,輸入以下指令應看到這兩東西。

lsbusb

isusb_gps

 

見不到也可以繼續,因上集無需 TNCGPS 也可玩到。

一反常態,無需更新以避免變為 Jessie。只更新軟件的目錄。

sudo apt-get update

 

之後,幹掉那個大而無用的 wolfram-engine

sudo apt-get purge wolfram-engine

 

安裝所需軟件,需一行完成:

sudo apt-get install screen git python-serial libgtk2.0-dev gtk+-2.0 build-essential gcc pkg-config imagemagick automake autoconf libtool cvs curl libncurses-dev libssl-dev libax25-dev

下載加安裝需約一小時。

完成後下載 KK7DS 的版本。

git clone https://github.com/kk7ds/dantracker

進入該 folder ,並下載 libfap 。雖最新版本為 1.5;但在測試 jessie 時發現不論 1.31.5,最後階段編繹時皆失敗。為省時所以這裡用回 1.3

cd dantracker
wget http://pakettiradio.net/downloads/libfap/1.3/libfap-1.3.tar.gz

解壓並安裝之
tar xvzf libfap-1.3.tar.gz
sudo cp libfap-1.3/src/fap.h /usr/local/include/
cd libfap-1.3
sudo cp src/fap.h /usr/local/include/
./configure
make
sudo make install
sudo ldconfig

完成後回到 dantracker folder

cd ..

跟著用類似步驟下載和安裝iniparser
sudo wget http://ndevilla.free.fr/iniparser/iniparser-3.1.tar.gz
tar xvzf iniparser-3.1.tar.gz
cd iniparser
sudo cp src/iniparser.h /usr/local/include
sudo cp src/dictionary.h /usr/local/include
make
sudo cp libiniparser.* /usr/local/lib
sudo ldconfig

完成後回到 dantracker folder

cd ..

 

戲肉來了,aprs-is.c main() 內含用家設定參數,需編輯之。

nano aprs-is.c

將作者的 callsign,所選 server,覆蓋範圍,靜態座標定為自身的資料。

aprs_c

 

然後 save 離開。

 

編譯前也需編輯 Makefile,加進參數。否則跟著的編繹會回報 warning

nano Makefile

在第一行最後加入 –lm

dan_tracker_compile

然後 save 離開。

編繹運行以下指令:

touch .revision
make

之後進入 images folder 執行 make 指令:

cd images
make

所有安裝完成。這時可備份一下張 SD Card

之後 reboot 一下,再進入 dantracker folder ,執行

sudo ./detect_gps.py

類似 lsusb,但回報的是 USB serial cord GPS 的所屬 port 位。

lsusb_gps

進入 sub-folder examples,將 aprstest.ini 抄到 dantracker folder 中並改名為 aprs.ini

cd examples
cp aprstest.ini /home/pi/dantracker/aprs.ini

 

aprstest.ini 是測試設定檔,主要從 network 收取覆蓋範圍內 iGatepacket,將之顯示出來。GPS 則是 hard codedummy data

換句話說,這就是一個無需 radioAPRS tracfficmonitor

dantracker folder 中編輯 aprs.ini;將 callsign,靜態座標改回自己的,save 離開。

執行以下兩指令就可啟動 dantracker 了。

screen -dmS aprs ./aprs -m /home/pi/dantracker/aprs.ini

screen -dmS ui xinit /home/pi/dantracker/ui

 

YouTube demo

 

 

Raspberry Pi 冷知識

首兩畫面大家會發現右上角有個彩色四方形 (Rainbow Square)。這是輸入電源電壓過低的提示。如為紅色四方形,則是 CPU 溫度過高提示。

對我來說,是因將系統移植到 portable 後,7吋顯示屏的背光耗電近 1A ,用的電話充電火牛電流不足而拖低了電壓。

Rpi firmware 更新到最近(9月)的版本,圖示則會是較易明白的雷電 icon 和溫度計 icon

 

關機程序

承上文提到,這個方案沒退出機制。所以關機只能 short reset pinreboot Rpi

小問題,可克服。我們將一個按制 (push button) 接到 Pin 39 (Gnd), Pin 40 (GPIO21)


aprs_shutdown

編寫一段 python 程式仔,當發現 GPIO21 落地,就執行關機指令。並將這程式加到每次開機執行。

詳情請參考這個網址,將 GPIO 編號改為 21 即成。
https://www.element14.com/community/docs/DOC-78055/l/adding-a-shutdown-button-to-the-raspberry-pi-b

 

將系統移植到流動平台後

dan_port

 

由於仍是測試階段,不建議設為開機即運行的狀態 (要還原需用另一 linux 系統編輯取消)。

 

小結

上集示範了安裝和利用 aprstest.ini 設定檔作為一個固定 aprs 站台 monitor。介面美觀資訊明確。

下集將為戶外測試,接上 radioGPS;和一個 Rpibug 導致陷入苦戰及最後的節衷方案。

 

待續…

Posted in APRS | Tagged , , , , , | 6 Comments