前回、前々回でラズパイからAWSへ温湿度と画像データのアップロードができたので今度は位置情報の公開にチャレンジします。
以前購入したGPSモジュールで座標を取得してCSVでAWSへアップロード、Googleマップにピンを入れるようにします。
→GPSモジュールのセットアップについての記事は
こちら ↑こんな感じです
まずはラズパイ上に位置情報CSVを作成します。
micropyGPSだけは
ここからmicropyGPS.pyをダウンロードして同じディレクトリにいれてください。
import serial
import micropyGPS
import threading
import time
import math
import csv
gps = micropyGPS.MicropyGPS(9, 'dd')
def rungps():
s = serial.Serial('/dev/serial0', 9600, timeout=10)
s.readline()
while True:
sentence = s.readline().decode('utf-8')
if sentence[0] != '$':
continue
for x in sentence:
gps.update(x)
gpsthread = threading.Thread(target=rungps, args=())
gpsthread.daemon = True
gpsthread.start()
#logger_latitude = 3540.8061
decimal, integer = math.modf(gps.timestamp[1]/100.0)
gps_latitude = integer + decimal / 60.0 * 100.0
decimal2, integer2 = math.modf(gps.timestamp[2]/100.0)
gps_latitude2 = integer2 + decimal2 / 60.0 * 100.0
while True:
if gps.clean_sentences > 20:
h = gps.timestamp[0] if gps.timestamp[0] < 24 else gps.timestamp[0] - 24
print('%2d:%02d:%04.1f' % (h, gps.timestamp[1], gps.timestamp[2]))
print('緯度経度: %2.8f, %2.8f' % (gps.latitude[0], gps.longitude[0]))
print('海抜: %f' % gps.altitude)
print(gps.satellites_used)
print('衛星番号: (仰角,方位角, SN比)')
for k, v in gps.satellite_data.items():
print('%d: %s' % (k, v))
print(gps.latitude[0])
if gps.latitude[0] > 0:
with open('gps.csv','a') as f:
writer = csv.writer(f)
#writer.writerow([h,gps.timestamp[1],gps.timestamp[2],gps.latitude[0],gps.longitude[0]])
writer.writerow([h, gps.timestamp[1], gps.timestamp[2],gps.latitude[0],gps.longitude[0]])
time.sleep(3.0)
これでCSVが作成されます。
GPSがつかまらない場合は追記しません。 if gps.latitude[0] > 0: としています。
あとは
この記事を参照にAWSのS3へアップロードしていきます。
ブラウザでGPSのデータを読み込むのにjavascriptを使う必要があります。
CSV値の後ふたつの値をとります。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>test</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
html,body {
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<a id="map">地図</a>
<script type="text/javascript">
function getCSV(){
var req = new XMLHttpRequest();
req.open("get", "gps.csv", true);
req.send(null);
req.onload = function(){
convertCSVtoArray(req.responseText);
}
}
function convertCSVtoArray(str){
var tmp = str.split("\n");
var val = tmp.slice(-2)[0];
var lat = val.split(',').slice(-2)[0];
var lng = val.split(',').slice(-1)[0];
var link = document.getElementById('map');
link.setAttribute('href', 'https://maps.google.co.jp/maps?q='+lat+','+lng);
}
getCSV();
</script>
</body>
</html>
位置がずれたりちょっと不安定な動きをしますが、屋外にラズパイをもっていくとGooglmap
ピンがささり、位置情報を公開することができました。
ちなみに・・。
モバイルバッテリーは必須です!! wi-fiはテザリングでなんとかなりますが…