GPSを使って位置情報を得つつ、時計を合わせる(1)

Raspberry Pi をネットワークから隔離した状態で起動した際に、問題になるのが時計のずれ。バッテリーで時間を保持してくれる物もありますが、正確な位置情報も欲しいのでGPSモジュールを使うことにしました。

hideさんの Raspberry Piに「みちびき」対応GPSモジュールを接続 を参考にしました。

記事を参考にGPSモジュールを調達して、5分程度の半田付け作業を行って配線。USB接続だったら以下の作業ももっと楽できるのかも知れませんが、 USBポートはなるべく開けておきたいです。

Raspberry Pi 2, Astroberry Server OS など記事とは環境が違うため、幾つか作業をスキップ出来たので、φ(..)メモメモ。

先ずは、raspi-config を使って

  1. 5 Interfacinf Option -> P6 Serial ->
  2. Would you like a login shell to be accessible over serial? を NO
  3. Would you like the serial port hardware to be enabled? を Yes
  4. 一応再起動

この操作のせいか、/boot/comline.txt はserial0 の記載が既になかったのでそのまま。

astroberry@astroberry:~ $ cat /boot/cmdline.txt 
console=tty1 root=PARTUUID=d9b3f436-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

/boot/config.txt は、enable_uart=1 が既に記載されていたので、 dtoverlay だけ変更。

# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18
dtoverlay=pps-gpio,gpiopin=18

/etc/modules にpps-gpio を追記

astroberry@astroberry:~ $ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
pps-gpio

 pps関連のパッケージが入っていなかったのでインストール

sudo apt install pps-tools 

/etc/default/gpsd の DEVICES セクションを書き換え

astroberry@astroberry:~ $ cat /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/serial0 /dev/pps0"

# Other options you want to pass to gpsd
GPSD_OPTIONS="-n"

そして再起動


gpsdというデーモンが自動的に起動しているので、先ずは電波を受信しているか確認。

astroberry@astroberry:~ $ sudo ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1591791504.101452227, sequence: 851 - clear  0.000000000, sequence: 0
source 0 - assert 1591791505.101455479, sequence: 852 - clear  0.000000000, sequence: 0
source 0 - assert 1591791506.101457794, sequence: 853 - clear  0.000000000, sequence: 0
source 0 - assert 1591791507.101460838, sequence: 854 - clear  0.000000000, sequence: 0
source 0 - assert 1591791508.101463413, sequence: 855 - clear  0.000000000, sequence: 0
source 0 - assert 1591791509.101467134, sequence: 856 - clear  0.000000000, sequence: 0
source 0 - assert 1591791510.101470282, sequence: 857 - clear  0.000000000, sequence: 0
source 0 - assert 1591791511.101473430, sequence: 858 - clear  0.000000000, sequence: 0
source 0 - assert 1591791512.101476266, sequence: 859 - clear  0.000000000, sequence: 0
source 0 - assert 1591791513.101479310, sequence: 860 - clear  0.000000000, sequence: 0
source 0 - assert 1591791514.101482145, sequence: 861 - clear  0.000000000, sequence: 0
source 0 - assert 1591791515.101485241, sequence: 862 - clear  0.000000000, sequence: 0
source 0 - assert 1591791516.101487973, sequence: 863 - clear  0.000000000, sequence: 0
source 0 - assert 1591791517.101490808, sequence: 864 - clear  0.000000000, sequence: 0
source 0 - assert 1591791518.101493696, sequence: 865 - clear  0.000000000, sequence: 0

OK

続いて gpsmon と打つと、一秒ごとに情報をまとめて表示してくれる。緯度経度、信号強度などがわかります。屋内なので S/N比が小さいですね。

緯度経度などの情報が表示されています。

ここまでで、正確な位置情報が得られることがわかりました。

続いて、時刻合わせです

2020/06/21追記

実は Virtual GPSというプログラムが初期状態で動いていて、これがGPSDと競合してるんですね。

Otherwise GPSD service will simultaneously use location from two sources i.e. GPS and Virtual GPS.

https://www.astroberry.io/docs/index.php?title=Astroberry_Server#GPS_device
astroberry@astroberry:~ $ sudo systemctl stop virtualgps
astroberry@astroberry:~ $ sudo systemctl disable virtualgps

ここまでしてやっと位置情報がスムーズに得られるようになったようです。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください