
山岳移動用FT8装備-最終版
昨日、嵐山の山頂でのんびりFT8でもやろうと思っていたのですがFT8でのQRVができませんでした。理由はなぜかiPadがラズパイに繋がらないことが原因です。いままで問題なく動いていましたが、先日少しだけ設定を変えました。この時に家で接続した時は問題なかったのですが、今回実際に山でやってみて接続ができませんでした。原因を考えながら修正してみました。いままで山岳移動用のFT8装備について2回に分けて2020年9月に投稿していましたが、すでに必要のない古い情報は削除し、新しい設定を行ったところを反映して書き直してみました。この設定を最終版としてまとめておこうと思います。 混乱を避けるため今までの投稿は後日削除します。
—–
IC-705はUSBケーブル一本でPCと接続でき、FT8やRTTYなどデジタルモードに簡単にQRVできます。 しかしPCを持って山に行くのは、ただでさえ重い荷物がさらに重くなります。このためラズベリーパイを使ってFT8に出るシステムを作ってみました。
次のような設定を行っていきます。
1.ラズベリーパイの基本設定
2.時計の設定
3.ディスプレイの設定
4.アクセスポイント化の設定
5.時刻合わせの設定
6.WSJT-Xの設定
1. ラズベリーパイの基本設定
まずはラズベリーパイを準備しておきます。初期設定の説明はここではやりませんが、このあたり(最初のラズパイ初期設定の部分だけです)を参考にネットワークにつながる状態のラズベリーパイがあるという前提で進めていきます。ラズパイは3B以上のものがいいと思います。
まずはネットワークの設定を行います。ここでは家の中のLANネットワークのIPアドレスが192.168.1.XXX/24のようになっていると想定しています。ここはそれぞれの設定で見直してください。
IPアドレスは固定しておく必要があります。それによってiPADなどに入れたVNCクライアントから、いつでも同じIPアドレスでアクセスできるようになります。これはどこでやるかというと/etc/dhcpcd.confというファイルで行います。 このファイルに下記のような記述をしておきます。WiFiの設定です。最初の設定だけはWiFiでなくWired LANを使う場合はinterface wlan0 を interface eth0としておけばOKですが、最終的にはWiFiの設定をしないとiPadとつながりません。
# Static IP configuration: interface wlan0 static ip_address=192.168.1.100/24 ♯ラズパイのIPアドレス例 static routers=192.168.1.1 ♯ゲートウェイのIP アドレス例 static domain_name_servers=8.8.8.8 ♯GoogleのDNS借りました
ラズパイを再起動し、この状態でIPアドレスが固定されNetworkにつながることをまず確認しておきましょう。ラズパイのIPアドレス確認は下記で確認できます。
$ ip addr
2. 時計の設定
次にラズパイ側でやっておくべきことは時刻合わせの仕組みです。ラズパイは電源を切ると時計が止まってしまいます。時刻を保持せず、次回ラズパイの電源を入れた時に、ネットワーク上の時間サーバーにつながり時計を合わせます。 ネットワーク環境がある場所でラズパイを動かすならそれでもよいのですが、山の上では無理です。これでは特に秒単位での正確な時計の校正が必要なFT8の運用には致命的となります。 このためラズパイの電源を切っても時間を保持する機能が必要です。 これを解決するにはラズパイに乗せるRTCというモジュールが必要です。 この赤い基盤がRTCという時間保持の機能を持つモジュールです。 この赤い基板の裏側に時刻保持のためボタン電池を装備しています。
私はSwitch Science社のラズベリーパイ用RTCモジュールを使いました。これを使うには少し設定も必要です。(市場には安いデバイスを使ったバッタモンがあるようです、ちゃんとDS1307というデバイスを使ったものを選ばないと時刻精度が出ない場合もあるようなので注意してください。)
まずはi2cの有効化。 これは下記のようにメニューから「設定」-「Raspberry Piの設定」で行います。
インターフェースタグの下で、i2cを「有効」にすることでOK。
再起動した後
$ i2cdetect -y 1
コマンドを打ってみます。 すると下記のように
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
GPIOピンを通して、RTCモジュールが認識されていることが判ります。 一度RTCが動き出すと、この「68」が「UU」に代わります。 まだRTCが動いていませんので「68」の表示です。
まず、このRTCモジュールを使って時間を表示させてみます。
この状態でコンソールから下記のコマンドを打ってみます。
$ sudo modprobe rtc-ds1307 $ echo ds1307 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device $ sudo hwclock -r hwclock ioctl(rtc_rd_time) to /dev/rtc0 to read the time failed
3番目のコマンドを打つとエラーが出ます。
これは、もともとRTCがない状態では、ラズベリーパイの電源をOffした時刻を記録し、次に起動するときにその時刻から再開する fake-hwclockというモジュールが動いているのですが、その機能との間で干渉が発生しエラーが出ているようです。 すでにRTCを採用したわけですし、そんな前回からの時間で再開しても全く意味がないため、この fake-hwclockの動作を停め、さらにこのモジュール自体を削除してしまいます。
// 機能を停止 $ sudo update-rc.d fake-hwclock disable // モジュール削除 $ sudo apt-get remove fake-hwclock $ sudo dpkg --purge fake-hwclock
これで干渉は無くなったはず、
// hwclockをシステム時計に合わせます $ sudo hwclock -w // 時間を表示させます $ sudo hwclock -r 2020-09-12 13:58:42.191741+09:00
動作が確認できました。
起動するときにRTCの時刻を取り込むように /etc/rc.local に下記を追加します。必ず最終行の exit 0の前に記述します。
sudo hwclock -s
これで時計の設定はOKです。
3. ディスプレイの設定(VNCの設定)
次はディスプレイです。 ラズベリーパイにはディスプレイがありませんので、山に持っていくディスプレイを考えなくてはいけません。
新しく買うのはもったいないし、せっかく買っても小さい画面だと見にくいだけでなく、画面操作を使うFT8の運用はほぼ不可能です。このため手持ちのスマホやiPADを使うことにしました。 ラズベリーパイからiPADまでの画面転送はVNCというソフト群を使います。 もともとVNCは画面転送というよりもリモートログインのツールであり、ラズパイにリモートログインする形で操作をします。 まずラズベリーパイにVNCサーバーを組み込んでおき、iPADやスマホではVNCのクライアントソフトを入れておきます。これでラズベリーパイのHDMIケーブルがなくともWiFiで画面だけをiPADに表示させることができます。 最近のラズビアンOSには標準でVNCが入っていますので、下記のように先ほどと同じく、メニューから「設定」-「Raspberry Piの設定」でインターフェイスタグの下のVNCを「有効」にして再起動することでVNCサーバーが動作します。
次にディスプレイとして使う、クライアント側です。
iPADやiPhoneの場合はApple Store, アンドロイドの場合はPlay Storeで 「VNC Viewer」を検索します。 似たようなものがありますが、このアイコンです。
ご参考としてWindows版のVNCクライアントソフトはReal VNC Viewerという名前でアイコンはこのようなものになります。
これをクライアント側の端末で立ち上げて、先ほど固定化したサーバー側IPアドレスとポート番号(標準は5900) そしてuser nameとパスワードを入力することでラズパイ側の画面がiPADなどの端末に表示されます。
これでiPadでラズパイの画面を見ることができます。
しかしこの状態ではラズパイとiPadが家にあるルーター経由で繋がっているだけです。これではまだ山に登ってFT8の運用はできませんので次は直接iPadとラズパイをWiFiで接続する設定をします。
4. アクセスポイント化の設定
次にラズパイとiPadがWiFiでつながるようにラズパイをアクセスポイントにします。
まずラズパイにhostapdをインストールします。
$ sudo apt-get install hostapd
これでインストールは完了。次は設定です。サンプル設定ファイルは下記のdirectoryにあるのでコピーして持ってきます。
$ sudo cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/
次に、その持ってきたサンプルの設定ファイル hostapd.conf を書き換えることで設定していきます。私は下記の追加をしました。そのほかは全部デフォルトです。
ssid=rp3b ♯自分で名前を決めます country_code=JP auth_algs=1 ignore_broadcast_ssid=0 ieee80211n=1 wpa=2 wpa_passphrase=XXX #8桁以上です wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP
これでhostapdは起動しますが、その前にいくつかやることがあります。それはラズパイがここまでの設定に使っていたWiFiのネットワークにつながらないようにしておかないといけません。 ラズパイがWiFiのネットワークに繋がってしまうと、先にWiFiポートを占有されてしまうため、ラズパイがアクセスポイントとして立ち上がらず、iPADとラズパイがP2Pで接続できません。このためラズパイのネットワーク接続設定を削除しておく必要があります。 これは、/etc/wpa_supplicant/wpa_supplicant.confで設定します。 一度でも家のネットワークや携帯のテザリングなどに接続するとその時の情報がすべてこのconfファイルに記憶されています。
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid=”ABC_network” ♯ ネットワークID psk=”XXX” ♯ パスワード key_mgmt=WPA-PSK }
この network={ から } までが自分のネットワーク設定ですので消しておきます。消すまでもなく♯でコメントアウトしたかったのですが、wpa_supplicant.confでは、コメント行は許されないようで消えてしまいました。これでラズパイを立ち上げてもWiFiに自動で接続されなくなります。
次にラズパイを立ち上げた時に自動でアクセスポイントになるようにhostapdが開始されるように設定します。
これは /etc/default/hostapd のなかにある下記のコマンドのコメントアウトの#を削除することで可能です。
DAEMON_CONF="/etc/hostapd/hostapd.conf" #行頭の#を削除
この後コマンドラインで
$ sudo systemctl start hostapd
これでhostapdが起動します。
systemctl status hostapdで状態を見ると下記のように AP-Enabledになっています。
ここで一つ注意点があります。私はここでハマりました。これが嵐山で接続できなかった原因だと思います。ラズパイを再起動したときにアクセスポイントで立ち上がらないケースがありました。毎回だめというケースではなく時々発生するのです。 常時ではないため、これが非常に厄介です。いろいろと試した結果、一度ラズパイでWiFiをOffしてからOnにすると大丈夫ということが判りました。どうも再起動時にネットワーク設定が完了する前にアクセスポイントの設定が完了してしまうような感じがしました。このためタイミングでできたりできなかったりするようです。エラーログをみるとwlan0が準備できていないのにhostapdが設定されているようなのです。
このためラズパイの起動時のシーケンスを見てみるとこのようにhostapdはネットワークの立ち上げよりも遅いタイミングではあるのですが、もしかしたらwlan0が立ち上がる際に既存のネットワークを探しに行っているのかもしれません。wpa_supplicant.conf の既存ネットワーク情報は削除してあるのですが、このネットワークサーチの時間が掛かっているのかもしれません。wpa_supplicant自体を止めてもいいのですが、WiFi接続をしたい時にはできなくなってしまうので、そこまではやりたくありません。
これの対処方法としては下記のように raspi-config でBoot時の設定をしておく必要があります。この情報にたどり着くまでだいぶ苦労しました。https://forums.raspberrypi.com/viewtopic.php?t=291522
コマンドラインから下記のようにラズパイコンフィグを立ち上げます。
$ sudo raspi-config
1のSystem Optionを選択
S6のNetwork at Bootを選択
はいを選択します。raspi-config を抜け出て再起動させます。
これでラズパイを再起動しても自動でアクセスポイントで立ち上がります。
iPADからも先ほど自分で決めた名前(ssid)が見えているはずです。
このアクセスポイントを選択したあと、これも上記で決めたパスワード(wpa_passphrase)を入力してラズパイに接続します。 その後は IP Addressも前回設定した固定のままなので、その状態からiPADでVNCを起動すれば画面が見えるはずです。
5. 時刻合わせの設定
RTCモジュールを載せたラズパイも時々NTPに接続して校正しないと少しづつ時計がくるってきますので時刻同期が必須であるFT8では致命的になります。
そこで次のように設定しました。
まず通常のFT8運用ではラズパイとiPadだけが茶色線の枠内のようにWiFiでつながればOKですので、ここは先ほど設定したようにIPアドレスを固定しておきます。(上の例では192.168.1.100)そして時刻合わせのためにWired LANを接続し、これを通してインターネット経由NTPサーバーで時刻を合わせるようにします。このためWired LANの設定をWiFiとは別に設定しておきます。(上の例では192.168.1.99) そこで先ほどの/etc/dhcpcd.confを下記のように修正します。
WiFiはアクセスポイント用に使うのでルーターやDNSの設定は不要ですので#でコメントアウト。その代わりWired LANに設定しています。
# Static IP configuration: interface wlan0 static ip_address=192.168.1.100/24 ♯ラズパイのIPアドレス例 #static routers=192.168.1.1 ♯これはコメントアウト #static domain_name_servers=8.8.8.8 ♯これもコメントアウト interface eth0 fallback static_eth0 static ip_address=192.168.1.99/24 ♯Wired LANのIPアドレス例 static routers=192.168.1.1 ♯インターネットにつなぐのでこれは必要 static domain_name_servers=8.8.8.8 ♯これも必要 GoogleのDNSです
これでラズパイをLANケーブルでつなぐとインターネットにつながるのでNTPサーバーで時刻合わせができます。
つまり山に行く前にLANケーブルに繋いであげれば時計が自動で合うということになります。
LANケーブル接続前の時刻同期状態
LANケーブル接続後の時刻同期状態、StatusがIdleからSynchronized to time server …に変わっています。
これで時刻校正もできました。
いよいよFT8ソフトの導入です。
6. WSJT-Xの設定
WSJT-Xのケースで説明します。 まず、該当のWSJT-XのLinux用ソフトウェアをWSJT-Xのホームページからダウンロードします。すでにWiFiはアクセスポイント用にしてしまいましたのでWired LANを使ってネットワークにアクセスする必要があります。
これを下記のコマンドでインストールします。 X.X.Xはバージョン番号です。
$ sudo dpkg -i wsjtx_X.X.X_armhf.deb
インストール後の起動は、そのままコマンドラインから
$ wsjtx
と打つだけでもプログラムが動きますし、GUIのメニュー「サウンドとビデオ」からもWSJT-Xのアイコンをクリックして起動が可能です。
もし起動したときにLocaleが違うという下のようなエラーが出た時はLocaleの設定をしてからもう一度インストールします。
$ Error: locale::facet::_S_c_locale name not valid
Localeの設定は /etc/locale.gen を開いて 下記のように2行目のUS UTF-8を追加
ja_JP.UTF-8 UTF-8 # これは元々入っていると思います en_US.UTF-8 UTF-8 # これを追加します
そのあとコマンドラインから下のコマンドを打ちます。
$ sudo locale-gen # rootでやる必要がありますので sudoが必要
これでlocaleが変わりましたので、この後もう一度wsjt-xをインストールします。
下記の4点がハマりやすいところです。
- 設定のウィンドウで無線機タグを開いて無線機でIC-705を選びます。最新版のWSJTXではIC-705も登録されていますので最新版のWSJTXを使えば何も問題はないと思います。
- CAT制御のシリアルポート設定を /dev/ttyACM0 にすること。 これは最初から出てきませんでした。自分で打ち込めますし、何度かリブートしていると選択肢として出てくるようになりました。
- PTT側のポート設定をCATとすること。私はCAT制御側と同じく /dev/ttyACM0 にしてしまい、送信ができず悩みましたが、この点が原因でした。
- 送受信のサウンドカードを入力、出力とも sysdefault:CARD=CODECとすること。 この設定も最初出て来ず、ラズベリーパイを何度かリブートすると出てきました。
この4点が設定できれば、あとは簡単にWSJT-Xをラズパイ上で動かすことができると思います。
これで完成です。
山の上からやるFT8は最高ですよ!
下のリンク先は参考までにIC-705からGPS同期でラズパイの時計を同期させる方法ですが、とても煩雑で実際には使いにくいので私は使用しないことにしました。