Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Raspberry Pi3でGPSを扱う

More than 3 years have passed since last update.

はじめに

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の電波状況が良い場所で動作確認することをお勧めします。

t2hk
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away