IC-705のGPS機能を使ったラズパイ時刻同期


私はラズベリーパイを使って山でFT8を運用する際に、時刻保持のためRTCモジュールを使っていますので必要はないのですが、今回投稿にご質問をいただきましたし、私自身とても興味がある内容でしたので、IC-705のGPSを使った時刻同期について実験をしてみました。

結論から言いますと、技術的には興味があるものでしたが、ラズパイ側の使い勝手もありRTCに戻しました。この戻す際にもちょっと躓きましたので一連の作業内容を共有しておきます。

GPS時計の導入

まずあらかじめIC-705側でUSBケーブルを使ってGPS信号を出力するように設定をしておきます。

1. GPS ON

メニュー画面②で[GPS] – [GPS設定] – [GPS選択] でONを選びます。これでGPSの受信が始まります。

メイン画面で衛星のアイコンが点滅して、GPS同期が完了すると点滅が終わり常時点灯となります。

2. GPS信号外部出力

メニュー画面①で[SET] – [外部端子] – [USB(B)端子機能] – [GPS出力]でONを選びます。これでIC-705のUSB端子からGPS信号を取り出せます。

3. ラズベリーパイの設定

まず、ラズパイにUSBケーブル(充電ケーブルではなく通信ケーブルですので注意)を接続し、lsusbコマンド(注:最初はLの小文字です)で調べ、Prolificというデバイスが見つかればGPSのデバイスを認識しています。

次にラズパイ側で、そのUSBポートがどのポートとして認識されているかを調べます。まず、USBケーブルを抜いておいてコマンド  ls /dev/tty* を打ちます。

下の写真の上半分がその時の画面です。

次にUSBケーブルを接続して同じコマンドを打ちます。

上の写真の下半分がその時の画面です。

この2つを比べて何が増えたかを覚えておきます。

私の場合は下記の2つが増えています。

/dev/ttyACM0
/dev/ttyACM1

IC-705は物理的に1本のUSBケーブルを接続することで2つのポート(CI-VとData)を作りますので2つポートが増えていることが判ります。どちらがCI-Vで、どちらがDataかは、ucコマンドで調べられますが(ucは標準ではラズパイに入っていません)これはあとで実際に出てくるデータを見ればわかります。

ここまでやってから、ラズパイにGPS受信と時刻同期関連のソフトをインストールしておきます。

下記のコマンドでgpsdとその関連ソフトウェアをインストールします。

$ sudo apt-get install gpsd gpsd-clients python-gps

gpsdの設定ファイルは /etc/default/gpsdというファイルです。これを設定します。

# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time
START_DAEMON="true"

# Use USB hotplugging to add new USB devices automatically to the daemon
USBAUTO="true"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyACM1"  ♯ここを先ほどのポート名のどちらかにする

# Other options you want to pass to gpsd
GPSD_OPTIONS="-n"   ♯この -n オプションは必要でした

GPSD_SOCKET="/var/run/gpsd.sock"  ♯ソケットの場所指定、これがないとNTPに時刻が渡りません

このように先ほどのポート/dev/ttyACM0もしくは/dev/ttyACM1を入れます。 正しくない方を入れても動作しません。私の場合は/dev/ttyACM1がdataのポートでした。

もう一つOther Optionで -n 指定をします。

さらに最終行でSocketファイルの場所を指定しておきます。

これで下記コマンドを打つとGPS信号の受信状況を表示します。

$ cgps -s

こんな感じで時々刻々とGPS信号が表示されています。

しかし、これだけではGPSの信号をラズパイで受信するだけで、GPS信号の中の時刻情報を時計に取り込みません。この機能をNTPでやります。ラズパイでは標準ではNTPサーバーとして使われることはほとんど無いため、timedatectlというモジュールが入っていますが、これだけではGPSで受信した時刻情報を時計に取り込めませんでしたので最新のNTPモジュールであるchronyを入れてみました。下記のコマンドでインストールします。

$ sudo apt-get install chrony

このあとchronyの設定をします。

chronyの設定ファイルは /etc/chrony/chrony.conf  です。

最終行に下記を追加します。 これでGPS時間が取り込めます。

refclock SHM 0

timedatectl statusコマンドで状態を見てみるとちゃんと同期しています。 画面右上時計の隣の上下の矢印はこのラズパイがネットワークにつながっておらず、アクセスポイントで動作している状況を示しています。つまりNetworkにつながっていない状態でラズパイが時刻同期しているのはGPS信号に同期しているということです。

さて、これで完成なのですが、ラズパイの電源をOffにして再度立ち上げてみると、全く動作しません。時刻同期はおろか、まずラズパイがアクセスポイントモードで立ち上がりません。いろいろと試行錯誤しながら調べてみるとラズパイの電源をOnする時にUSBケーブルがGPS機器に繋がっているとどうもアクセスポイントモードで立ち上がらないようです。(もしかしたら回避方法はあるのかも知れません)

このため、ネットワーク環境の無い山や移動地でラズパイ+iPad+VNCでFT8を運用する場合、まず最初にラズパイを立ち上げた後にUSBケーブルをつなぐ必要があります。これで一応は大丈夫なのですが、いったんUSBケーブルを抜いてしまうと、またこれが大変。NTPモジュールのchronyをstopしてからstart、(これはなぜかrestartではだめでした)、gpsdをリロード、そしてUSBケーブルをつなぐという手順が必要です。

$ sudo systemctl stop chrony.service
$ sudo systemctl start chrony.service
$ sudo systemctl daemon-reload
$ sudo systemctl restart gpsd #これが必要だったかどうかはうろ覚え

何か手順を間違えただけでもラズパイが時刻同期しなくなってしまいますし、これだけコマンドを打つなら最初から立ち上げたほうが早いです。

さらにUSBケーブルを絶えず流れるGPS信号がFT8の信号と共存することになります。こちらの影響はあまりなさそうですが、ラズパイ3BでFT8を運用している時、多くの局に呼ばれると結構負荷が高くなり周回遅れでFT8でコールバックする場合もあります。ボトルネックはラズパイのCPUであるとは思うのですが、このあたりも気になります。

ということで、実験としては面白かったですが、やはりラズパイではRTCを使うことにしました。これなら、移動運用に行く前にネットワークのある環境で一度ラズパイを立ち上げ、自動で時刻合わせしておけば、山でもラズパイスイッチオンだけで何もしなくてOKです。仮に時刻合わせを忘れても2週間くらいは十分な精度が保たれていますし、もし時刻がずれているならスマホテザリングでNTP同期できます。

 

GPS時計からRTCへ戻す

ということで、GPS同期をやめてRTCで時刻を保持するためにchronyを停めたのですが、なんと、もともとラズパイで動作していたNTP同期のtimedatectlモジュールが動作しなくなっています。つまりネットワークのある環境でラズパイを立ち上げても、いつまでたってもNTPサーバーに同期しなくなってしまいました???

systemd-timesyncdモジュールのステータスを調べると落ちています。orz

$ systemctl status systemd-timesyncd
systemd-timesyncd.service - Network Time Synchronization
中略
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: inactive (dead)

いろいろ調べてみると、systemd-timesyncdデーモンは他の競合するNTPモジュールが動作していなくても、競合するモジュールがあるだけで動作を停めているようで、結局chronyをアンインストールしないといけないようです。

$ sudo apt-get autoremove --purge chrony

これで削除しました。

その後、再起動してみるとネットワーク環境でラズパイがNTPに同期しています。めでたし、めでたし。

gpsdのほうは信号の受信だけでも面白いので、そのまま残しておくことにしました。

 


JA1CTV
PC・デジモノの道

2件のコメント

  • JK1BMU

    JH0CJH様
    年明けのやっかいな質問に精力的かつ前向きに取り組まれたことに敬服申し上げます。
    有り難うございました。
    これからも益々サイトのご発展を祈念申し上げます。

    • JH0CJH

      JK1BMUさん
      どういたしまして。自分でもとても興味ある内容でしたので勉強になりました。また何かありましたら連絡ください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です