忍者ブログ

設備のマニアどっとこむ

IoT開発、設備・DIYのブログ!

AWSでラズパイの位置情報を公開する

前回、前々回でラズパイから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はテザリングでなんとかなりますが…










拍手[0回]

PR

コメント

翻訳(Translate)

プロフィール

HN:
佐々木 雅史
性別:
男性
自己紹介:
2021年 ラズパイ、M5stackを用いたIoT開発を専門で受注するアルティメンテを設立。代表を務める。
・2020年ラズパイコンテスト優良賞受賞
・設備系資格多数(電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトなど)

AD

カレンダー

02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31