以下に、GPSモジュールの利用に有効なGPSDサービスプログラムおよびGPS関連のユーティリティプログラムのパッケージインストール手順を示す。
0.準備作業として、前提となるGPSモジュールを接続してシリアルポートの信号受信を確認
1)シリアルポートのデバイスファイルの確認
pi@raspberrypi:/boot $ ls -l /dev/* |grep serial lrwxrwxrwx 1 root root 5 Jan 3 00:52 /dev/serial0 -> ttyS0 lrwxrwxrwx 1 root root 7 Jan 3 00:52 /dev/serial1 -> ttyAMA0 pi@raspberrypi:/boot $
2)シリアルポートの設定確認
# vi /boot/cmdline.txt dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo # vi /boot/config.txt enable_uart=1
3)以上から、下記コマンドを実行して、シリアルポートの信号受信を確認。
$ sudo cat /dev/serial0 <出力内容は省略するが、NMEAフォーマットのデータが表示されることを確認>
※NMEAフォーマットデータについては、こちらを参照のこと。
以上、GPSモジュールが接続され正しく動作し、その出力がラズパイに届いていることを確認できたら、ここから本題のGPSDの導入作業に移る。
1.GPSモジュールを接続したラズパイにて下記コマンドを実行して、gpsd及びそのクライアントパッケージをインストールする。
pi@raspberrypi:/boot $ sudo apt-get install gpsd gpsd-clients Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libgps21 python-gps The following NEW packages will be installed: gpsd gpsd-clients libgps21 python-gps 0 upgraded, 4 newly installed, 0 to remove and 11 not upgraded. Need to get 524 kB of archives. After this operation, 1,079 kB of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libgps21 armhf 3.11-3 [208 kB] Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main gpsd armhf 3.11-3 [93.4 kB] ・・・・・・・ <一部省略> ・・・・・・・ Setting up gpsd-clients (3.11-3) ... Processing triggers for libc-bin (2.19-18+deb8u10) ... Processing triggers for systemd (215-17+deb8u7) ... pi@raspberrypi:/boot $
2.インストール直後にプロセスが上がるとのことなので、確認する。
pi@raspberrypi:/boot $ ps aux|grep gps gpsd 2572 0.0 0.7 13924 7204 ? S<s 22:09 0:00 /usr/sbin/gpsd -N
3.これを以下の手順で停止させる。
1)サービス名の確認と停止
# systemctl --all | grep gps gpsd.service loaded active running GPS (Global Positioning System) Daemon gpsd.socket loaded active running GPS (Global Positioning System) Daemon Sockets # service gpsd stop
2)Defaultサービスのスタートアップ無効化
root@raspberrypi:~# systemctl disable gpsd.socket Removed symlink /etc/systemd/system/sockets.target.wants/gpsd.socket. root@raspberrypi:~#
4.スタートアップスクリプト/etc/default/gpsdにて、下記の通り追加修正する。
USBAUTO=”true” =>"false"に変更 DEVICES="" =>”/dev/serial0”に変更 GPSD_OPTIONS="" =>"-n"に変更 下記の一文を追加 GPSD_SOCKET=/var/run/gpsd.sock"
5.GPSDデーモンを起動させる。(上記設定の確認も含めて)
# service gpsd start # ps -ef|grep gps gpsd 2671 1 3 19:54 ? 00:00:00 /usr/sbin/gpsd -N -n /dev/serial0
参考)GPSD起動中にpsコマンドでプロセスを確認すると、上記ファイル内のGPSD_OPTIONSの値に記述されていないくても、デフォルトでgpsdのオプションとして”-N”が指定されているが、これは /lib/systemd/system/gpsd.service内にて、記述されているためである。
6.gpsmonを実行して動作確認を図る。
$> sudo gpsmon [q]<RET>で、CUI画面を終了させることができる。
7.GPSDデーモンのスタートアップ起動の有効化
$ sudo insserv -d gpsd または $ sudo systemctl enable gpsd Synchronizing state for gpsd.service with sysvinit using update-rc.d... Executing /usr/sbin/update-rc.d gpsd defaults Executing /usr/sbin/update-rc.d gpsd enable Created symlink from /etc/systemd/system/sockets.target.wants/gpsd.socket to /lib/systemd/system/gpsd.socket. $ 本来なら、上記のいずれかでスタートアップが有効になるはずだが、 下記のコマンドを実施しないと、OS起動時に自動起動してくれない。 $ sudo ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/
以上により、端末起動後、GPSDからGPSモジュールの測位データをいつでも取得できる状態となった。
以上