2.mesh組網通訊
接上一篇,其實對我來說plutosdr最有意義的是這個自組網通訊的應用,上一篇講的三維頻譜圖只是顯示效果比較酷炫,而且可以離線使用,但是其實頻譜圖本身不太稀奇,玩sdr看了不少能畫頻譜圖的工具了。
但是這個自組網通訊十分厲害,我認為它的優點有以下幾個:
1.不需要像LTE基站那樣,所有無線裝置都必須圍繞基站,脫離基站範圍後終端不能互相通訊。
2.所有訊號處理都在sdr板子上完成,不需要電腦處理基頻資料,這樣電腦執行的作業系統是任意的。
3.部署快速,設定完成後,直接上電就能在幾秒鐘內開始執行。
4.所有無線口都可以自己加功放(得有業餘無線電執照),可以實現遠距離通訊。
刷韌體步驟其實比上一次講的還要簡單。
https://github.com/tvelliott/charon
到上面這個連結裡下載,build_pluto_image是已經編譯好的韌體,這裡面就一個檔案pluto.frm,把它放到plutosdr的u盤裡,然後彈出,就刷好了。
刷完以後還不能馬上用。因為既然是自組網,到時候會有好多個裝置接在一起,要確保所有裝置的ip地址都是不一樣的,而剛刷完韌體後,ip都是一樣的。我說的ip包含2個ip,一個是plutosdr自己的ip,還有接在plutosdr上的電腦的ip,都需要不一樣。
比如我今天測試的時候有2個plutosdr,和兩臺電腦。
第一套裝置的plutosdr ip是192.168.2.1,電腦ip(host ip)是192.168.2.10。
第二套裝置的plutosdr ip是192.168.2.3,電腦ip(host ip)是192.168.2.50。
這些都在plutosdr的u盤裡config.txt裡面改。
# Device Configuration File
# Edit, Save and then Eject the USB Drive
[NETWORK]
hostname = pluto3
ipaddr = 192.168.2.3
ipaddr_host = 192.168.2.50
netmask = 255.255.255.0
[WLAN]
ssid_wlan =
pwd_wlan =
ipaddr_wlan =
[USB_ETHERNET]
ipaddr_eth =
netmask_eth = 255.255.255.0
[SYSTEM]
xo_correction =
udc_handle_suspend = 0
[ACTIONS]
diagnostic_report = 0
dfu = 0
reset = 0
calibrate = 0
我的其中一個檔案是這樣的,為避免重複我把hostname也改為不一樣的了,改完了儲存後,彈出u盤就行。
但是我發現光這樣還不行,如果用ssh登入plutosdr,它的ip其實還是預設的192.168.2.1,需要登入進去執行一遍重新啟動服務
/etc/init.d/S100-start_charon restart
才能把ip改過來,你可以看到終端視窗上啟用了新ip,這時候ssh會中斷,因為ip變了,所以以後都需要用新的ip才能登入。
我不知道這是不是bug,因為照道理裝置啟動就會啟動這一套程式,而這個restart只不過是作者為了讓人能在終端上看到裝置狀態才用的。不知道為啥設定ip也需要手動呼叫這個restart。
總之這樣就設定好ip了。
設定完ip後,可能你會發現你電腦還是無法ssh登入plutosdr,這是因為plutosdr的dhcp服務有時候有點問題,你只需要在你電腦的網路卡(plutosdr會在你的電腦上建立虛擬網路卡)設定裡手動設定ip就行,電腦ip就是你前面設定的host ip,閘道器和dns都是plutosdr的ip。
這樣其實就設定完成了,如果你是第一次使用還不太會用,你可以用之前執行過的那個restart命令在終端上觀察一下plutosdr內部的報文。
程式一啟動會有好多初始化,裡面也會說有一些service有點問題,不用理會。
接著就是跳出下面這樣的內容。
TAPDEV_IN -> RF_OUT , len=54
RF_IN->TAPDEV_OUT_, len=54, rssi: -77.4 dBm, rx EVM -22.7 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
TAPDEV_IN -> RF_OUT , len=54
TAPDEV_IN -> RF_OUT , len=54
RF_IN->TAPDEV_OUT_, len=54, rssi: -82.6 dBm, rx EVM -21.7 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
TAPDEV_IN -> RF_OUT , len=54
RF_IN->TAPDEV_OUT_, len=54, rssi: -88.4 dBm, rx EVM -21.9 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
TAPDEV_IN -> RF_OUT , len=54
RF_IN->TAPDEV_OUT_, len=54, rssi: -78.9 dBm, rx EVM -20.9 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
RF_IN->TAPDEV_OUT_, len=54, rssi: -76.2 dBm, rx EVM -23.7 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
TAPDEV_IN -> RF_OUT , len=54
TAPDEV_IN -> RF_OUT , len=54
RF_IN->TAPDEV_OUT_, len=54, rssi: -82.1 dBm, rx EVM -21.1 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
TAPDEV_IN -> RF_OUT , len=54
RF_IN->TAPDEV_OUT_, len=54, rssi: -76.5 dBm, rx EVM -27.9 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
RF_IN->TAPDEV_OUT_, len=54, rssi: -89.3 dBm, rx EVM -25.0 dB, in-gain: 65 dB, d-rate 272 Kbps, #sub-carriers=64, mod: qam16
TAPDEV_IN -> RF_OUT , len=54
比較短的TAPDEV_IN -> RF_OUT表示你在發射。比較長的RF_IN -> TAPDEV_OUT_表示你從另一個plutosdr上收到的封包。一開頭你可能只有比較短的報文,沒有長的報文,你可能要等待一會,挪動2個plutosdr(不是越近越好),或者調整一下頻率(因為時鐘有誤差,導致你設定的915MHz,不一定正好在915MHz上,如果2個裝置的收發頻點對不上,就收不到了),如果看到比較長的那種報文,就表示大功告成了。
接下來你就可以在兩臺電腦上互相ping對方的ip了,比如在192.168.2.10那臺電腦上ping 192.168.2.50。
一開頭要等一段時間建立arp表,然後才會ping通,我這裡實測ping的延遲在100ms以下。搞定以後也可以嘗試ssh登入對方電腦並且複製檔案,我實測速度80kbps,比原作的慢。原作4個節點,沒有多跳狀態下也能達到114kbps,理論應該在272kbps。
我估計是ppm導致的問題,我雖然能成功連線2個裝置,但是還是有誤差,導致浪費了一些資源。但是暫時還不敢去改這個引數。
我前兩天用mobaxterm改組態檔,結果提示crc錯誤,然後那個plutosdr就變磚了,dfu模式也進不去,看來以後還是得用linux內部的vi來改。
這是我的一臺電腦的照片,大的終端視窗是登入到plutosdr上然後顯示的自組網程式的輸出。小的終端視窗是我用的這臺電腦在ping自組網裡的另一個電腦的ip。
使用視訊(2套系統): https://www.bilibili.com/video/BV1sa4y1j7PX/