前言
本文介紹如何使用 F8ASB 編寫的 plug-in,最終實現在svxlink 以 DTMF 指令控制 Raspberry pi 的 IO。
過程不複雜,但原碼也不是完整可即用,需動點腦筋。
F8ASB 的 Svxlink Plug-in
以 Raspberry Pi 作為平台,配上 Svxlink 作為 Echolink node,我認為是最佳的 Echolink 用戶端選擇。就以這次介紹的 Plug-in 為例,就可遠端控制 Rpi 的 IO 了。
這是成品機如 Kenwood 支援 Echolink 的機種,電腦上運行 Echolink 軟件做不來的。也不計這兩方案 24 小時運作的耗電量,成本等等了,計埋只越問越傷心。
在 Github 發現了 F8ASB 編寫的 sxvlink plug-in,也看過其 YouTube 的簡單 demo。但 Google 一下 svxlink,echolink Rpi 等 keyword ,沒甚專題報導。
F8ASB 的 Github 網址:
https://github.com/F8ASB/Module-Remote-Relay
原因可能有二,F8ASB 也是另一 project openrepeater 的成員,openrepeater 是改自 svxlink 的開源方案,主攻中繼的控制。這個 plug-in 的高階版 (各樣參數可透過網頁修改)也包括在內。作者可能想 reserved 在自家的方案中。
第二,他們也開發了一塊 control board,有 RTC, IO relay 等。配該 plug-in 控制 relay 是附加值。
Courtesy of http://svxcard.f5uii.net/doku.php?id=fr:start
我的睇法是第一點無何口非,雖然 svxlink 本身就是一個repeater controller 的控制方案。粗略看他們是加進 php 編寫的頁面進行 config 。
第二點,外國地方大,買零件隨時駕車成個鐘。本地則鴨街,網上訂送上門,再不淘寶搞掂。這些一體化方案對本地ham 友沒有迫切性。
這個 plug-in 是一個模組,以 DTMF 指令控制 Rpi 的 IO 埠 20-23。可分別輸出 1,0,或一個 0.1 秒的正 pulse 。
今次打交道的四個 IO Port
0 與 1 輸出適合作為開關。pulse 較適合接到 MCU 的 int 作為觸發 trigger signal。
有關 DTMF 指令:
9# : 啟動模組
xxY# : xx 是輸出端,即 20-23 。Y 是輸出狀態:
1 是高電平,
0 是 0V,
2 是 Pulse。
* : 關閉模組
例: 想將輸出端 20 變為 1 :
201#
有了這些輸出,除可控制簡單的開關外;也可作為密碼組合,如你唔怕煩的話。
一些舊式中繼控制方案也可經 DTMF 控制,但多靠 DTMF IC 解碼,如 Mitel 8870,8888 等。這些 IC 停產多年,硬件彈性低,維護困難。
相反,svxlink 是軟解的,無需特別 IC。有需要用到時才遠端開啟這個模組,相對安全。
大致安裝步驟
今次不會提供詳細的安裝步驟了。理由是其實我也不是 Linux 專家,遇到問題也是上網找。大家可參考以往幾篇Echolink 文章。指令來來去去一大抄的。
這裡用的軟硬件正是上次 svxlink 14.081 demo 後運行至今的 Rpi,期間未嘗死機;非常穩定。今加上 plug-in ,和一塊接有四枚 LED 的萬用板。
先備份一下整張 SD card。
後到 F8ASB 的 Github 網址下載整個 package。
下載後的檔案是 master.zip ,解壓後的 folder 名是 Module-Remote-Relay-master 。
將以下檔案抄到相對位置。留意官網提供位置和我的 default 位置是不同的。以下是我的路徑。
RemoteRelay.tcl -> /usr/local/share/svxlink/events.d/
ModuleRemoteRelay.tcl ->/usr/local/share/svxlink/modules.d/
建立音效檔所需的 folder :
/usr/local/share/svxlink/sounds/en_US/RemoteRelay
將所有音效檔 copy 到這裡。
提示:如不熟悉在 Linux 抄 file,起 folder 的指令,用必殺技進入 X windows 快手搞掂即可,無需深究。
指令:
sudo startx (一定要在前面加上 sudo 取得 root 權限)
編輯以下檔案加進支援 ModuleRemoteRelay
sudo nano /usr/local/etc/svxlink/svxlink.conf
在 MODULES 一行加進 ,ModuleRemoteRelay
編輯一個新檔案儲存所需參數:
sudo nano /usr/local/etc/svxlink/svxlink.d/ModuleRemoteRelay.conf
加進:
[ModuleRemoteRelay]
NAME=RemoteRelay
PLUGIN_NAME=Tcl
ID=9
TIMEOUT=60
基本設置完成,先 reboot 一下。
一波多折,學習 debug,執 code 過程
過程漫長,不詳細交代了,重點如下:
- F8ASB 的方案內的語音檔是法文,初步棄用之。
- 轉而試用 Open Repeater 的 remote relay control方案,雖語音檔是英文,但也沒反應。
- 返回最初 F8ASB 的方案,一樣完全沒反應。
唔 work,就以 F8ASB 原方案仔細研究。
細研那幾個 tcl 檔的內容,發現關鍵檔是 ModuleRemoteRelay.tcl。
其中呼叫 IO port 輸出 0 的指令碼是:
exec gpio -g write 20 0
有和 Rpi IO 打過交道的,應看得出是 Wiring Pi 的指令。先前的 Svxlink 無需用上,現在控制 IO 則要之。安裝步驟這參看官網:
http://wiringpi.com/download-and-install/
留意 Wiring Pi 的指令,需先將所用的 IO 端設為方向,即輸出 (out) 或輸入 (in),再指示輸出 0 或 1 電平。
而上述的 tcl 檔內的執行指令只有後者。沒有發現任何片段是端口的輸出 (out) 設定。
OK,那在 ModuleRemoteRelay.tcl 所需加進內容是:
在 58 行,遙控模組 activate 部份內將相關四個 port 設為 out。
exec gpio -g mode 20 out
exec gpio -g mode 21 out
exec gpio -g mode 22 out
exec gpio -g mode 23 out
在原 67 行,遙控模組 deactivated 部份還原設定。本是用懶人的方法將 port 位設為 in 就搞掂。但實測發現再次進入時會記住上次的電平,所以先加四行將 4 port 設回零。
這裡衍生了一些選項:
如想遙控模組 deactivated 後保持輸出電平,可不需將 4 port 設回零。
那四個 port 是專職做輸出,其實還原部份將 4 port 設回零,刪去那 4 行 in 也可。
而另一選項是 pulse 的時間長短:
細看編碼,Pulse 是先輸出 1,等 100mS,再歸 0。
100mS,即 0.1 秒。這個時間長短也可更改。但留意由於他是一個 delay,用在這裡不適宜太長;個人認為最長不應超過 200mS。
還要留意一點,Port 21 pulse 重覆了。會導致 222# 即指示 Port 22 輸出 pulse 失敗。只需將第二個 212 改回 222 即可。
YouTube Demo
我用 LED 代替 Relay 示範,輸出 1 LED 著,0 就熄; pulse 就一閃。要推 relay 加 Transistor 即可。
圖片來源 https://developer-blog.net/raspberry-pi-gpio-schnittstelle-teil-2/
圖片來源 http://www.susa.net/wordpress/2012/06/raspberry-pi-relay-using-gpio/
English Sound Clip
以上的 demo 語言是原裝法文的。除 pulse 一字外,其他發音相近英語應可理解的。不過如想用回英文也無問題。由於 open repeater 的 sound clip 已有所需的英文檔。我將相關的英語檔併合為所需的語檔。只需將下件 overwrite 原有的 sound clip 檔即可。
Lesson to learn
起初以為是簡單任務,到最後要執 code 才成事。都好,對 tcl 檔加深了解。
tcl 檔 是 Tool Command Language。是一種簡單的 script。而 F8ASB 的 plug-in 正好是一個例子,供研究,學習編寫 tcl plug-in 之用。
另一同門方案 open repeater 去推 IO 的方法不同,用回傳統方式(可參考上述 Relay 的網頁)。原因我不深究了,各施各法。
但起用 Wiring Pi 的好處是其 library 豐富,加上 -x 可外接一些 i2c IC 如 AD convertor 等。那回傳用語音報上一些電壓、電流數字值應可行的。
Wiring Pi 另一指令是讀回 IO 端的狀態( 0 或 1 ),我們也可嘗試透過修改 tcl 內容,e.g:用 3 就讀回指定 IO 端的輸出電平,無需人手記下。
總結
Svxlink 配 Rpi 的 Echolink 方案可外加 Plug-in 以增強功能,這是其他器材所不能的。外加什麼,還看創意。這是活在軟件年代 Ham 的專利。
查看 ARRL 網頁,四月中的 7.5 級厄瓜多爾地震,災後的人道救援通訊起用了 Echolink 的 VoIP 方案,部份緊急物資請求更 route 到西班牙處理(厄瓜多爾通西班牙話)。
這體現了天涯若比鄰的意境。而我們配備了這些 Plug-in 方案,有需要時 we can do more。
下篇有關 svxlink 的文章應是試用最新版的 15.01,配以 SDR 的整合應用。暫想到的用 SDR 在另一頻道上standby,作為 DTMF 指令頻道等。
雖未開始準備,先興奮。