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