Raspberry Piに「みちびき」対応のGPSモジュールを接続して、高精度の位置情報と時刻を取得したいと思います。
Raspberry Piに「みちびき」対応GPSモジュールを接続
使用する材料
Raspberry Pi本体
[amazonjs asin=”B07BFH96M3″ locale=”JP” title=”RSコンポーネントRaspberry Pi 3 B +マザーボード”][amazonjs asin=”B0799CQCTF” locale=”JP” title=”Raspberry Pi Zero WH Starter Kit 8GB”]この記事の設定は、Wi-Fi内蔵のRaspberry Pi 3及びPi Zero W用の設定になります。Wi-Fi無しのモデル(Pi 2、Pi Zero)はUART端子の設定が異なりますのでご注意下さい。
GPSモジュール
秋月電子通商さんの『GPS受信機キット 1PPS出力付き 「みちびき」対応』を使用させて頂きました。基板へ部品実装済みですが、コネクタと電池ボックスをハンダ付けする必要がありました。
※18.3.29追記:2018年11月以降予定の4機のみちびき正式運用に対応した、新しいGPS受信機キットが発売されるようです(4機すべてに対応かどうかは未確認です)。詳細は秋月電子通商さんのページを御覧ください。既存のGPSモジュールも、ファームウェアアップデートで対応して頂けるのでしょうか?
ケーブル
[amazonjs asin=”B06Y48V9DL” locale=”JP” title=”ELEGOO 120pcs多色デュポンワイヤー、arduino用ワイヤ—ゲ—ジ28AWG オス-メス オス-オス メス –メス ブレッドボードジャンパーワイヤー”]配線は、ジャンパーワイヤーのメス-メスを使用しました。
配線図
GPSモジュールの信号線は3.3Vですが、Raspberry PiのGPIOも3.3Vですので、そのまま接続すればOKのようです。図のように、GPSモジュールをUART端子に接続しました。
1PPS端子をGPIO18に接続することで、シンプルな一直線な配線で済みました。
ジャンパーワイヤーの色は抵抗値のカラーコードになっています。茶色が1、赤が2、緑が5になりますので、その順番で配線した感じです。端子の親和性が高いおかげで配線がシンプルになりました。ありがたいですね。
時刻・位置情報の受信設定
OSはRaspbianのStretch版を使用しました。Raspbianの設定はこちらの情報を参考にさせて頂きましたが、gpsdでppsを読み込む設定など、いくつか工夫を織り込ませて頂きました。
コンソールをserial0からtty1へ変更
UARTを使用する都合から。まずは、シリアルコンソールを無効にします。
- /boot/cmdline.txtを編集し、既存のdwc_ort.lpm_enableをコメントアウトして、コンソールをserial0からtty1に変更します。
sudo nano /boot/cmdline.txt#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=2924e30a-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait - systemdの設定を変更し、シリアルコンソールを無効化します。
Pi 3, Pi Zero W:sudo systemctl stop serial-getty@ttyS0.service sudo systemctl disable serial-getty@ttyS0.service - /boot/config.txtを編集し、UARTを有効にします。
sudo nano /boot/config.txt次の1行を追加します。
enable_uart=1
タイムパルスの受信設定
Raspberry PiのGPIO端子に1PPS出力の配線を行いました。タイムパルスを受信できるように設定しましょう。
- /boot/config.txtを編集し、dtoverlay行を追加します。
sudo nano /boot/config.txt次の1行を追加します。
dtoverlay=pps-gpio,gpiopin=18※20.7.5追記:「,assert_falling_edge=true」付きが正しいとのご指摘を頂きましたため追記致します。
dtoverlay=pps-gpio,gpiopin=18,assert_falling_edge=true - /etc/modulesを編集し、pps-gpioを追加します。
sudo nano /etc/modules次の1行を追加します。
pps-gpio - 再起動すると、pps-gpioモジュールが読み込まれ、1PPS信号を受信することができます。
sudo reboot
GPS関連ツールのインストール
- gpsdとpps-toolsをインストールします。
sudo apt-get install gpsd gpsd-clients pps-tools
gpsd設定
- /etc/default/gpsdを編集し、gpsdの接続デバイスとオプションを設定します。GPSモジュールにバッテリーを接続、ポーリングは行わないため、-nオプションを有効にしました。
sudo nano /etc/default/gpsdPi 3, Pi Zero W:
START_DAEMON="true" DEVICES="/dev/ttyS0 /dev/pps0" GPSD_OPTIONS="-n" - systemdの設定を変更し、gpsd.socketを有効にします。
sudo systemctl enable gpsd.socket - 再起動すると/dev/ttyS0と/dev/pps0をターゲットデバイスとしてgpsdが起動します。
sudo reboot
GPS信号の受信確認
- 窓際など、空が直接見える位置へ、GPSモジュールを水平に(アンテナ部が天頂を向くように)配置します。
- 1PPS信号は1秒おきに出力されるようです。ppstestを実行すると、1秒おきに受信したPPS情報が表示されます。
sudo ppstest /dev/pps0 - gpsmonを起動します。位置情報が表示されるかどうか、1PPS信号を受信できているか確認します。
gpsmon
以上で、Raspberry PiにGPSモジュールを接続し、時刻・位置情報と、1PPS情報を受信できるかどうか確認が完了しました。
受信したGPS情報は、時刻同期サーバやGPSロガー等に活用することができます。
まあ、とりあえず配線と下準備が終わりましたということで・・・・活用方法は、別の記事でご紹介できればと考えています。
ではまたお会い致しましょう!













コメントを残す