GPSモジュールを取り付けたRaspberry Piの現在位置を、Google Map上に表示してみたいと思います。地図を拡大するとこのような感じです。gpsdのTCPソケット通信機能を有効にすれば、1つのデスクトップで複数のRaspberry Piの位置を表示することも可能なようです。
ただし、表示はWeb版のGoogle Mapではなく、Linux用のFoxtrotGPSを使用させて頂きました。
設定方法を記録しておこうと思います。
目次
FoxtrotGPSによる位置情報表示設定手順
Raspbianインストール
OSはRaspbianを使用させて頂きました。
初期設定は、宜しければこちらの記事を御覧ください。
GPSモジュールの取り付けとgpsdサービスの有効化
こちらの記事の内容に従って、GPSモジュールを取り付けてgpsdサービスを有効化しました。
Webブラウザによるデスクトップへアクセス有効化
こちらの記事の内容に従って、noVNCを有効にすることで、スマートフォンや他のPCからWebブラウザでデスクトップへのアクセスが可能になります。
スマートフォンや他のPCでRaspberry Piの現在位置を表示したい場合、基本的にこちらの方法をお勧め致します。
他の方法としまして、Linux PCでFoxtrotGPSを起動、gpsdへTCPソケット接続する方法もあります。そちらの方法は後述致します。
FoxtrotGPSのインストール
aptコマンドでFoxtrotGPSをインストールしました。
sudo apt install foxtrotgps
FoxtrotGPS設定
画面左上の電球アイコンから、各種情報の表示と設定変更が可能のようです。画面右側の情報表示欄の「←」「→」ボタンをクリックすると、位置情報(トラック)の記録/ロード機能や設定(Configuration)の変更が可能のようです。地図はGoogle Mapsの他、OSMやMaps-for-free.com等の切換が可能のようです。
gpsdのTCPソケット通信有効化設定
FoxtroGPSやgpsmon等TCPソケット通信に対応したgpsdクライアントは、他のPCのgpsdの情報を表示する事が可能です。
そのためには、gpsd(サーバ)側のTCPソケットを有効にする必要があります。次の手順になります。
- /lib/systemd/system/gpsd.socketファイルを編集します。
sudo vi /lib/systemd/system/gpsd.socket
ListenStream行を変更します。たとえば特定のセグメントに公開する場合は192.168.0.0等の公開対象のIPアドレス、すべてのネットワークに公開する場合は0.0.0.0に変更します。
- /etc/default/gpsdファイルを編集し、gpsdの-Gオプションを有効にします。
sudo vi /etc/default/gpsd
GPSD_OPTIONS行を変更します。
GPSD_OPTIONS="-n -G"
- gpsd.socket, gpsd.serviceを再起動します。
sudo systemctl daemon-reload sudo systemctl restart gpsd.socket sudo systemctl restart gpsd.service
以上の設定変更で、他のPCからgpsmonやFoxtrotGPSで接続できるようになりました。
gpsmon <gpsdが動作しているRaspberry PiのIPアドレス>:2947
foxtrotgps <gpsdが動作しているRaspberry PiのIPアドレス>:2947
Google Mapを使用させて頂く都合上、地図を表示するためには、インターネットに常時接続する必要があります。
GPS付きのRaspberry Piを車載した場合など、インターネット接続できないオフライン環境になる場合、地図が正しく表示できなくなる場合があります。
その場合、FoxtrotGPSのトラッキング(位置情報の記録)機能を使用するか、または地図表示はインターネット接続可能なPCを使用しつつ、Raspberry Piとの通信はgpsdのソケット通信を併用することで、オフラインの状態を補えるかと思います。
このあたりは、使用する状況に応じて、いろいろと設定を調整されると宜しいかと思います。
インターネットが無い環境で地図を表示する記事はこちらになります。