はじめに
自分の位置を予測する方法についての記事を書いたら、収集する方法についての問い合わせがあったので、収集方法についての記事を書きます。
データの利用例は以下のURLをご参照下さい。
GPSで取得した位置情報のログを学習し、数分後に自分がどこにいるのかを予測する
準備
OSインストール
以下のURLよりOSのイメージをダウンロード
以下のソフトウェアを使ってmicroSDに書き込む
microSDをラズパイに挿して電源を投入し、しばらく待ったらログイン画面が出るので、pi、raspberryと入力してログイン。
GPS関連の設定
初期設定
設定プログラムを実行。
sudo raspi-config
「5 Interfacing Option」ー「P6 Serial」を選択し、有効化。
プログラムのインストール
以下のコマンドを実行。
sudo apt-get -y install gpsd gpsd-clients python-gps
起動設定の変更
sudo nano /boot/cmdline.txt
「console=serial0,115200」を削除
gpsd設定変更
sudo nano /etc/default/gpsd
以下の二箇所を修正。
USBAUTO="false"
DEVICES="/dev/serial0"
設定後、以下のコマンドを実行。
sudo shutdown -h now
GPSモジュールの接続
下図のとおり接続。
接続後、電源を投入。
動作確認
以下のコマンドを実行し、正しくデータが収集できていることを確認。
gpsmon
データ収集
以下のスクリプトで取得した位置情報をSQLiteに保存。
getGPS.py
#!/usr/bin/env python
from gps import *
import sqlite3
from datetime import datetime, timedelta
if __name__ == '__main__':
dbname = "gpslog.db"
conn = sqlite3.connect(dbname)
c = conn.cursor()
session = gps()
session.stream(WATCH_ENABLE|WATCH_NEWSTYLE)
dt_buff = ""
for report in session:
if report['class'] == "TPV":
dt = datetime.strptime(report['time'].replace('T', ' ')[:19],'%Y-%m-%d %H:%M:%S')
dt = str(dt + timedelta(hours=9))
lon = report['lon']
lat = report['lat']
if dt != dt_buff:
sql = "INSERT INTO log VALUES('{}',{},{})".format(dt[:19], lon, lat)
c.execute(sql)
dt_buff = dt
time.sleep(1)
上記スクリプトを以下のコマンドで実行。
chmod a+x getGPS.py
./getGPS.py
自動起動
起動時に自動実行されるように設定。
sudo nano /etc/rc.local
以下の一行を「exit 0」の前に追記。
/home/pi/getGPS.py &
以上。