2021年5月1日土曜日

KiwiSDR と RaspberryPi で、WSPR受信ロボットを構築

"KiwiSDR"は受信チャンネルを初期設定では4チャンネル、
設定変更して拡張すれば8チャンネルまでに出来ます。
つまり、
8チャンネル・マルチモード・マルチバンド受信機(各チャンネル12kHz帯域)
になります!
 
"KiwiSDR"には、WSPRデコーダを内蔵していますが
LF/MF用に、FST4Wモードもデコードしたいので
外付けで RaspberryPi を使って受信ロボットを構築します。
 
この用途には、"WsprDaemon"が昔からメジャーのようですが、
まだ"FST4W"をサポートしていないので・・
派生系の"DigiSkimmer"を使ってみました。
こちらは、WSJT系デジタル・モードを殆んどサポートしています。
ただ、まだ開発途中でスポット・データに"FST4W"モード識別子が
含まれていない為、すべて"WSPR2"になってしまうようです。
 
"WsprDaemon"の紹介サイト http://wsprdaemon.org/
"DigiSkimmer"のサイト https://github.com/lazywalker/DigiSkimmer
 
受信ロボット概略図
"KiwiSDR"と"DigiSkimmer"は、スイッチングハブに接続し
他の機器にネットワーク負荷をかけないようします。
最高8チャンネル分のオーディオ・データが常に流れるので、
片方でもWiFiにしてしまうとスマホなどのホームWiFiが遅くなります。
 
 
忘れないように、ここから備忘録
 
●"KiwiSDR"の初期値からの変更点
 "KiwiSDR"admin 画面
  mode を、Kiwi classic から More receivers へ変更

  Control タブでチャンネル数を設定
   例では、7チャンネルに設定している

●"Raspberry Pi OS" SDカード作成
 今回は、RapberryPi-4 を使用
1.SDカードに、"Raspberry Pi Imager"最新版を使って
 "Raspberry Pi OS Lite(32-bit)" イメージファイルを書き込む
  * https://downloads.raspberrypi.org/imager/imager_latest.exe

・書き込み終わったSDカードをPCに挿しなおして
 boot フォルダに、ssh という空のファイルを作っておく。
 ターミナル(teratermなど)からSSH接続する為に必須

・RaspberryPiにSDカードを挿し、LANケーブルを接続し電源ON

・RaspberryPiのIPアドレスをPCからツールを使って調べておく

2.PCターミナル(TeraTerm) からSSHログイン --> pi/raspberry
    passwd でパスワードを変更しておく
        pi@raspberrypi:~ $ passwd
        Changing password for pi.
        Current password:         <----- ここは、raspberry
        New password:
        Retype new password:
        passwd: password updated successfully
        pi@raspberrypi:~ $

    LANポートのIPアドレス固定化
        pi@raspberrypi ~ $ sudo nano /etc/dhcpcd.conf
    データ最後に下記を追加 (アドレスはネット環境に合わせる)
        interface eth0
        static ip_address=192.168.10.112/24
        static routers=192.168.10.1
        static domain_name_servers=192.168.10.1

    CTRL+O(save) , CTRL+X(exit)

        pi@raspberrypi ~ $ sudo shutdown -r now

    (設定したIPアドレスで)TeraTerm からSSH再ログイン

3. raspi-config でシステム設定
    pi@raspberrypi:~ $ sudo raspi-config
     で、"Timezone"の変更と、
     "Expand Filesystem"を実行しておく。

    "5 Localisation Options" の "L2 Timezone" を実行
    Asia/Tokyo を選択

    "6 Advanced Options" の "A1 Expand Filesystem" を実行

システムが、Reboot するので再ログイン

4. システムアップデートしておく
  pi@raspberrypi:~ $ sudo apt-get update
  pi@raspberrypi:~ $ sudo apt-get upgrade
  時間がかかる時が有る

5. Install git
  pi@raspberrypi:~ $ sudo apt-get install git

    sudo reboot し再ログイン

 
 
 
● "DigiSkimmer"の構築

1. Install libs of python3
  pi@raspberrypi:~ $ sudo apt install python3-requests python3-numpy python3-colorlog
        改行を入れずに一行で実行する事!

  pi@raspberrypi:~ $ sudo apt install libgfortran5 libqt5widgets5 libqt5network5 libqt5printsupport5 libqt5multimedia5-plugins libqt5serialport5 libqt5sql5-sqlite libfftw3-single3 libgomp1 libboost-all-dev libusb-1.0-0
        改行を入れずに一行で実行する事!  
        時間がかかる

2. Install wsjtx
  pi@raspberrypi:~ $ wget https://physics.princeton.edu/pulsar/k1jt/wsjtx_2.3.1_armhf.deb
        改行を入れずに一行で実行する事!

  pi@raspberrypi:~ $ sudo dpkg -i wsjtx_2.3.1_armhf.deb

3. Use ramdisk as temporary directory to save SD card

 root権限の為にパスワードを設定
  pi@raspberrypi:~ $ sudo passwd root
  New password:
  Retype new password:
  passwd: password updated successfully

 root権限に移る
  pi@raspberrypi:~ $ su
  Password:
  root@raspberrypi:/home/pi# sudo echo "tmpfs /tmp/digiskr tmpfs defaults,noatime,nosuid,size=300m 0 0" >> /etc/fstab
        改行を入れずに一行で実行する事!

  root権限から戻る
  root@raspberrypi:/home/pi# exit
  exit
  pi@raspberrypi:~ $

4. DigiSkimmer の導入と設定
  pi@raspberrypi:~ $ cd ~
  pi@raspberrypi:~ $ git clone https://github.com/lazywalker/DigiSkimmer.git
  pi@raspberrypi:~ $ cd DigiSkimmer

  pi@raspberrypi:~/DigiSkimmer $ cp settings.py.template settings.py

  pi@raspberrypi:~/DigiSkimmer $ sudo nano settings.py
        ここで設定ファイルを編集する
    設定内容は下記参照

5. "TMUX"のインストール
 SSHターミナル接続のままでは、接続を切断すると終了してしまうので
 "TMUX"をインストールする。(仮想ターミナル)
  pi@raspberrypi:~ $ sudo apt-get install tmux -y

    System Re-boot
      pi@raspberrypi:~ $ sudo shutdown -r now

6. SSH ターミナル再接続
 "TMUX"起動
  pi@raspberrypi:~ $ tmux

 "TMUX"ターミナルから下記入力
    pi@raspberrypi:~ $ cd DigiSkimmer
    pi@raspberrypi:~/DigiSkimmer $ ./fetch.py

 これで、DigiSkimmer がスタート

  ターミナルで他の作業実施の場合、デタッチ(tmuxセッションは生きたまま)
   ctrl + b  次に d を入力
 ターミナル作業終了時は、そのまま切断

 次回、SSHターミナル接続後に
  pi@raspberrypi:~ $ tmux attach  (tmux aで良い)

 "TMUX"終了は、"TMUX"ターミナルから
    まず、CTRL + c で、DigiSkimmerを停止する
 pi@raspberrypi:~ $ <-- 出るまで待ち
 pi@raspberrypi:~ $ exit


########## settings.py 設定 変更部分のみ

##FST4W モードの設定
 
    'interval': {
        'FST4W': 300              ## available intervals: [120, 300, 900, 1800]
    }
 
##自宅KiwiSDR設定例
##サンプルでは'szsdr','czsdr','cdsdr'と三つ表記されているが
## 'czsdr'を自宅用に設定した
 
    'czsdr': {
        'server_host': '192.168.10.101',
        'server_port': 8073,
        'password': '',
        'tlimit_password': '',
        'callsign': 'JG3HGD/SDR',
        'grid': 'PM74uv',
        'antenna' : 'Long-wire'
    },

##受信スケジュール設定
##現在はタイムテーブルを使って試行中(時間はLocal-Time)

    # '*': {'czsdr': ['630!','630`','160!|80!','20+|40+']},   #630m WSPR|FST4W,160m|80M WSPR
    # '*': {'czsdr': ['40+|20+','630!','630`','160!|80!']},   #40m|20m FT4,630m ,160m|80m WSPR
    # '*': {'czsdr': ['2190`']},                                         #2190m FST4W-1800, for Loop
    # '*': {'czsdr': ['40+','20+','30','17','12','10']},            #20m|40m FT4,WARC+10m WSPR

    # Long-Wire :
     '05:00-10:00': {'czsdr': ['630!','630`','160!','80!']},                 # 630m-80m WSPR,630m FST4W
     '10:00-16:00': {'czsdr': ['40!','20!','15!','10!']},                       # 40m-10m WSPR
     '16:00-19:00': {'czsdr': ['630!','630`','160!','80!','40!','20!']},   # 630m-20m WSPR,630m FST4W
     '19:00-05:00': {'czsdr': ['630!','630`','160!','80!']},                 # 630m-80m WSPR,630m FST4W


補足
##サポートしているモードと周波数
##KiwiSDR では、当然28MHz迄です。
MODES = {'~': 'FT8', '#': 'JT65', '@': 'JT9', '+': 'FT4', '!': 'WSPR', '`': 'FST4W'}
BANDS = {  # Freq in MHz
    'FT8': {'160': 1.840, '80': 3.573, '60': 5.357, '40': 7.074, '30': 10.136, '20': 14.074, '17': 18.100, '15': 21.074, '12': 24.915, '10': 28.074, '6': 50.313, '2': 144.174},

    'FT4': {'80': 3.575, '40': 7.0475, '30': 10.140, '20': 14.080, '17': 18.104, '15': 21.140, '12': 24.919, '10': 28.180, '6': 50.318, '2': 144.170},

    'JT65': {'160': 1.838, '80': 3.570, '40': 7.076, '30': 10.138, '20': 14.076, '17': 18.102, '15': 21.076, '12': 24.917, '10': 28.076, '6': 50.310, '2': 144.120},

    'JT9': {'160': 1.839, '80': 3.572, '40': 7.078, '30': 10.140, '20': 14.078, '17': 18.104, '15': 21.078, '12': 24.919, '10': 28.078, '6': 50.312},

    'WSPR': {
        '2190': 0.136000, '630': 0.474200, '160': 1.836600, '80': 3.568600, '60': 7.038600, '40': 7.038600, '30': 10.138700,
        '20': 14.095600, '17': 18.104600, '15': 21.094600, '12': 24.924600, '10': 28.124600, '6': 50.293000,
        '2': 144.489000, '0.7': 432.300000
    },

    'FST4': {'2190': 0.136000, '630': 0.474200, '160': 1.839000},

    'FST4W': {'2190': 0.136000, '630': 0.474200, '160': 1.836800},
}


0 件のコメント:

コメントを投稿