search
LoginSignup
15
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Raspberry Pi3でGPSを扱う

はじめに

Raspberry Pi3にGPSデバイスを搭載し、PythonでGPSデータを取得してみます。

環境

以下の環境を使用します。

環境 バージョン
Raspberry Pi3 Model B -
RASPBIAN STRETCH WITH DESKTOP November 2017
Python3 3.6.3
GLOBALSAT BU-353S4 USB GPSレシーバー -

環境構築

GPSデバイスを使用するために必要なソフトウェアのインストール等を行います。

まず、USBポートにGPSデバイスを差し込み、デバイスが認識されたことを確認します。

$ dmesg | grep Prolific
usb 1-1.3: Manufacturer: Prolific Technology Inc.

$ ls /dev/ttyUSB*
/dev/ttyUSB0

続いて、GPSデーモンのgpsdやクライアント等をインストールします。

$ sudo apt-get install gpsd gpsd-clients python-gps
$ sudo apt-get install cu

gpsdの設定を行います。デバイス名やgpsd実行時のオプションを指定します。

$ vi /etc/default/gpsd

# 以下の2行を修正する。
DEVICES="/dev/ttyUSB0"
GPSD_OPTIONS="-n"

gpsdサービスの自動起動設定等を行います。

$ sudo systemctl enable gpsd.socket
$ sudo systemctl start gpsd.socket

ここでRaspberry Piを再起動します。

PythonでGPSのデータを取得してみる

PythonでGPSを使用するために、gpsモジュールをインストールします。

$ pip3.6 install gps3

以下はPythonのソースコードです。
GPSの電波状況が良い場所で実行して下さい。

from gps3 import gps3

gps_socket = gps3.GPSDSocket()
data_stream = gps3.DataStream()
gps_socket.connect()
gps_socket.watch()

for new_data in gps_socket:
  if new_data:
    data_stream.unpack(new_data)
    print('time : ', data_stream.TPV['time'])
    print('lat : ', data_stream.TPV['lat'])
    print('lon : ', data_stream.TPV['lon'])
    print('alt : ', data_stream.TPV['alt'])
    print('speed : ', data_stream.TPV['speed'])

以下のように繰り返し表示されます。

time : 2017-12-11T14:58:33.040Z
lat : xx.xxxxxxxxx
lon : xxx.xxxxxxxxx
alt : 44.832
speed : 0.0
・・・

おわりに

備忘録的にRaspberry PiでGPSモジュールを扱う方法を記しました。

電波状況が良くないとGPSからのデータを取得できず正常に動作しないことが多いです。
設定が間違っているのか、プログラムが間違っているのか、GPSの受信状況が良くないのか、原因の切り分けがやっかいなので、GPSの電波状況が良い場所で動作確認することをお勧めします。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
15
Help us understand the problem. What are the problem?