Raspberry Pi で時刻をスタンドアロンでGPSと同期するなら、RTCモジュールとセットが良い

[投稿日] 2015年9月4日
[最終更新] 2016年8月11日

Raspberry Pi(RPi)はスタンドアロンで使いたい需要も大きいハードウェアでしょう。しかし、バッテリーがないためにハードウェアクロックが存在しません。したがって、スタンドアロンで動かした場合、一度電源を落とすと正確な時刻が保持できなくなります。具体的には、次回起動時は前回シャットダウン時の時刻となります。

スポンサーリンク

スタンドアロンでGPSと同期したときの問題

しかし、GPSを使っているのであれば、システムクロックをGPSと同期させればそれで問題ないじゃないか、とは至極もっともな話です。実際私もそのように考えていたのですが、どういうわけか、時刻のずれが大きくなると、GPSと同期を開始しなくなってしまいました。インターネットに繋いで、ネットワーク上に公開されているNTPサーバーと繋げば、即座に同期を開始して、またその後GPSと同期をしてくれるようになるのですが、GPSのみだと、どういうわけか同期しない。GPSのデータは受信し続けていることから、恐らくntpの問題だとは思うので、あれこれすればなんとかなる手段はあると思うものの、私の知識ではそれも覚束ない。なお、ntpはバージョン4.2.8p3を使用しています。

参考までに、私が使用しているGPSはAdafruitのUltimate GPSです(Adafruit Ultimate GPS Breakout – 66 channel w/10 Hz updates [Version 3] ID: 746 – $39.95 : Adafruit Industries, Unique & fun DIY electronics and kits)。これはスイッチサイエンスでも販売しており、スイッチサイエンスのHPからでも(Adafruit Ultimate 66チャンネル10Hz GPSモジュール Version 3 – スイッチサイエンス)、またAmazonからでも購入することができます。

RTCモジュールを用いてハードウェアクロックと同期させると良い

インターネットに繋がっていれば問題ないわけですが、わざわざGPSと同期させているのは、精度の問題のみならずそもそもインターネットに繋がるような環境ではない、というケースもあります。あるいは電源を落とさなければ問題ないとは言えるかもしれません。それはそうでしょう。しかしそれではあまりに不安です。

そこで使えるのがRTC(Real-Time Clock)モジュールです。これを用いれば、ハードウェアクロックの問題は解決します。起動時に、システムクロックをハードウェアクロックに同期してやれば、スタンドアロンでも正確な時刻を保持することができるので、少なくとも時刻の大きなずれは避けられるはず。実際、導入してみると、通常ならばGPSと同期が始まらないだけ時刻のずれがあっても、ハードウェアクロックにシステムクロックを同期させた時点で、GPSとの同期を再開するようになりました。RTCとGPSのセットは、スタンドアロンでRPiを使用する際、できるだけ正確な時刻がほしい場合は有用と言えそうです。

RPiでRTCモジュールを使用する方法は、「Raspberry Pi 2 で RTC を使いスタンドアロンで時刻を保持 : 或る阿呆の記」にまとめました。

なお、システムクロックを手動でそれらしい時刻になおしても、GPSとの同期は再開されるのではないかと思ったのですが、実際にやってみるとこれはうまくいきませんでした。ハードウェアクロックと同期させる場合と何が違うのかよくわかりませんが…。

まとめ

  • スタンドアロンでRPiを使用すると、バッテリーがないため時刻を保持できない
  • ntpでGPSと同期させるようにしても、時刻のずれが大きくなると、GPSと同期しなくなる
  • RTCを導入し、ハードウェアクロックにシステムクロックを同期させると、GPSと同期を再開する

それにしても、ntpの仕組みというのはよくわからないものです。インターネット上のNTPサーバーとはいつでも同期するのに、どうしてGPSとはなかなか同期してくれないのか…今回も、原理的なところが理解できていないばかりに対症療法的になってしまいました。難しい。

関連コンテンツ

関連記事

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。