Skip to main content

Grove - GPS

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

この Grove - GPS モジュールは、SIM28(旧バージョンは u-blox 6)とシリアル通信構成を備えた、コスト効率が高くフィールドプログラム可能なデバイスです。22トラッキング / 66アクイジションチャンネルのGPS受信機を搭載しています。トラッキングとアクイジションの感度はどちらも-160dBmに達し、個人用ナビゲーションプロジェクトや位置情報サービスに最適で、同価格帯の製品の中でも優れた選択肢となっています。

tip

Seeed GPS Modules Selection Guideを公開しました。これにより、あなたのニーズに最適なGPSモジュールを選択する手助けができます。

バージョン

製品バージョン変更点リリース日
Grove - GPS V1.2初期バージョン2015年10月

特徴

  • NMEAおよびu-blox 6プロトコルをサポート。(2014年1月10日まで、それ以降はSIM28に変更)
  • 低消費電力
  • ボーレート設定可能
  • Grove互換インターフェース
tip

Groveモジュールの詳細については、Grove Systemを参照してください。

仕様

パラメータ範囲/値
入力電圧3.3/5V
ボーレート4800 - 57600(u-bloxバージョン)
ボーレート9600 - 115200(SIM28バージョン)
デフォルトボーレート9600

対応プラットフォーム

ArduinoRaspberry Pi
caution
上記で対応プラットフォームとして記載されているものは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能です。そのため、ユーザー自身でソフトウェアライブラリを作成する必要があります。

はじめに

note
Arduinoを初めて使用する場合は、開始する前に[Arduinoの使い方](https://wiki.seeedstudio.com/ja/Getting_Started_with_Arduino/)をご覧になることを強くお勧めします。

Arduinoで遊ぶ

このサンプルは、ソフトウェアシリアルを使用してGPSからデータを読み取り、それをシリアルポートに送信する簡単なものです。

ハードウェア

  • ステップ 1. 以下のものを準備してください:
Seeeduino V4.2Base ShieldGrove - GPS
画像説明を入力してください画像説明を入力してください画像説明を入力してください
今すぐ購入今すぐ購入今すぐ購入
  • ステップ 2. Grove - GPSをGrove-Base ShieldのポートD2に接続します。
  • ステップ 3. Grove - Base ShieldをSeeeduinoに差し込みます。
  • ステップ 4. USBケーブルを使用してSeeeduinoをPCに接続します。

note

Grove Base Shieldがない場合は、以下のようにGrove - GPSをSeeeduinoに直接接続することもできます。

SeeeduinoGrove - GPS
5V
GND
D3
D2黄色

ソフトウェア

note
u-centerソフトウェアはWindows専用ですのでご注意ください。
  • ステップ 1. u-centerソフトウェアをインストールします。
  • ステップ 2. 以下のコードをArduino IDEにコピーしてアップロードします。コードのアップロード方法がわからない場合は、コードのアップロード方法をご確認ください。
#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 3);
unsigned char buffer[64]; // シリアルポート経由で受信するデータ用のバッファ配列
int count=0; // バッファ配列のカウンター
void setup()
{
SoftSerial.begin(9600); // SoftSerialのボーレート
Serial.begin(9600); // Arduinoのシリアルポートのボーレート
}

void loop()
{
if (SoftSerial.available()) // ソフトウェアシリアルポートからデータが来ている場合
{
while(SoftSerial.available()) // データを文字配列に読み込む
{
buffer[count++]=SoftSerial.read(); // 配列にデータを書き込む
if(count == 64)break;
}
Serial.write(buffer,count); // データ送信が終了していない場合、バッファをハードウェアシリアルポートに書き込む
clearBufferArray(); // 配列に保存されたデータをクリアする関数を呼び出す
count = 0; // whileループのカウンターをゼロに設定
}
if (Serial.available()) // ハードウェアシリアルポートにデータがある場合(PCまたはノートブックからデータが来ている場合)
SoftSerial.write(Serial.read()); // SoftSerialシールドにデータを書き込む
}


void clearBufferArray() // バッファ配列をクリアする関数
{
for (int i=0; i<count;i++)
{
buffer[i]=NULL;
} // 配列のすべてのインデックスをNULLでクリア
}
  • ステップ 3. U-centerを開きます。

  • ステップ 4. Receiver -> Portをクリックし、Arduinoが使用しているCOMポートを選択します。

  • ステップ 5. Receiver -> Baudrateをクリックし、9600が選択されていることを確認します。

  • ステップ 6. View -> Text Consoleをクリックすると、NMEAデータがストリームされるウィンドウが表示されます。

  • ステップ 7. シリアルモニターを開くと、以下のように表示されます:

Google Earthでデータを表示することもできます:

  • ステップ 1. File -> Database Export -> Google Earth KMLをクリックします。

  • ステップ 2. これにより、u-centerでキャプチャされた履歴を含むGoogle Earthが起動します。

  • ステップ 3. または、ツールバーの赤い丸を押してデータを記録し、保存先を指定することができます。

  • ステップ 4. 十分なデータをキャプチャしたら、黒い四角をクリックして記録を停止します。

  • ステップ 5. 生成された.ubxファイルをGPSVisualizerにアップロードしてKMLに変換することができます。

Raspberry Piで遊ぶ

ハードウェア

  • ステップ 1. 以下のものを準備してください:
Raspberry piGrovePi_PlusGrove - GPS
画像説明を入力してください画像説明を入力してください画像説明を入力してください
今すぐ購入今すぐ購入今すぐ購入
  • ステップ 2. GrovePi_PlusをRaspberryに差し込みます。
  • ステップ 3. Groveケーブルを使用してセンサーをGrovePi+のソケットRPISERに接続します。
  • ステップ 4. USBケーブルを使用してRaspberryをPCに接続します。

ソフトウェア

  • ステップ 1. ソフトウェアの設定に従って開発環境を構成します。

  • ステップ 2. デモディレクトリに移動します:

cd ~
git clone https://github.com/DexterInd/GrovePi.git
cd GrovePi/Software/Python/grove_gps
  • ステップ 3. コードを確認します:
nano grove_gps_data.py   # "Ctrl+x"で終了 #
import serial, time
import smbus
import math
import RPi.GPIO as GPIO
import struct
import sys
#import ir_receiver_check

enable_debug=1
enable_save_to_file=0

#if ir_receiver_check.check_ir():
# print("Disable IR receiver before continuing")
# exit()

ser = serial.Serial('/dev/ttyAMA0', 9600, timeout = 0) # 9600ボーレートでシリアルポートを開く
ser.flush()

def cleanstr(in_str):
out_str = "".join([c for c in in_str if c in "0123456789.-" ])
if len(out_str)==0:
out_str = "-1"
return out_str

def safefloat(in_str):
try:
out_str = float(in_str)
except ValueError:
out_str = -1.0
return out_str

class GPS:
# 使用するGPSモジュールはGrove GPSモジュール https://www.seeedstudio.com/depot/Grove-GPS-p-959.html
inp=[]
# SIM28 NMEA仕様ファイルを参照 https://www.seeedstudio.com/wiki/images/a/a0/SIM28_DATA_File.zip
GGA=[]


# GPSからデータを読み取る
def read(self):
while True:
GPS.inp=ser.readline()
if GPS.inp[:6] =='$GPGGA': # GGAデータ、パケット1、必要なすべてのデータが含まれる
break
time.sleep(0.1) # コマンドがないとプログラムがクラッシュする
try:
ind=GPS.inp.index('$GPGGA',5,len(GPS.inp)) # 時々複数のGPSデータパケットがストリームに入る。最後の'$GPGGA'の後のデータのみを取得する
GPS.inp=GPS.inp[ind:]
except ValueError:
print ("")
GPS.GGA=GPS.inp.split(",") # ストリームを個々の部分に分割する
return [GPS.GGA]

# データを個々の要素に分割する
def vals(self):
if enable_debug:
print(GPS.GGA)

time=GPS.GGA[1]

if GPS.GGA[2]=='': # 緯度。技術的には浮動小数点
lat =-1.0
else:
lat=safefloat(cleanstr(GPS.GGA[2]))

if GPS.GGA[3]=='': # これはNまたはSであるべき
lat_ns=""
else:
lat_ns=str(GPS.GGA[3])

if GPS.GGA[4]=='': # 経度。技術的には浮動小数点
long=-1.0
else:
long=safefloat(cleanstr(GPS.GGA[4]))

if GPS.GGA[5]=='': # これはWまたはEであるべき
long_ew=""
else:
long_ew=str(GPS.GGA[5])

fix=int(cleanstr(GPS.GGA[6]))
sats=int(cleanstr(GPS.GGA[7]))

if GPS.GGA[9]=='':
alt=-1.0
else:
# strに変更(浮動小数点ではなく)
# 27"1は有効な値のようです
alt=str(GPS.GGA[9])
return [time,fix,sats,alt,lat,lat_ns,long,long_ew]

# 十進度に変換する
def decimal_degrees(self, raw_degrees):
try:
degrees = float(raw_degrees) // 100
d = float(raw_degrees) % 100 / 60
return degrees + d
except:
return raw_degrees


if __name__ == "__main__":
g=GPS()
if enable_save_to_file:
f=open("gps_data.csv",'w') # データをログに記録するファイルを開く
f.write("name,latitude,longitude\n") # ファイルの上部にヘッダーを書き込む
ind=0
while True:
time.sleep(0.01)
try:
x=g.read() # GPSから読み取る
[t,fix,sats,alt,lat,lat_ns,longitude,long_ew]=g.vals() # 個々の値を取得する

# 十進度に変換する
if lat !=-1.0:
lat = g.decimal_degrees(safefloat(lat))
if lat_ns == "S":
lat = -lat

if longitude !=-1.0:
longitude = g.decimal_degrees(safefloat(longitude))
if long_ew == "W":
longitude = -longitude

# print ("Time:",t,"Fix status:",fix,"Sats in view:",sats,"Altitude",alt,"Lat:",lat,lat_ns,"Long:",long,long_ew)
try:
print("Time\t\t: %s\nFix status\t: %d\nSats in view\t: %d\nAltitude\t: %s\nLat\t\t: %f\nLong\t\t: %f") %(t,fix,sats,alt,lat,longitude)
except:
print("Time\t\t: %s\nFix status\t: %s\nSats in view\t: %s\nAltitude\t: %s\nLat\t\t: %s\nLong\t\t: %s") %(t,str(fix),str(sats),str(alt),str(lat),str(longitude))

s=str(t)+","+str(safefloat(lat)/100)+","+str(safefloat(longitude)/100)+"\n"

if enable_save_to_file:
f.write(s) # ファイルに保存する
time.sleep(2)
except IndexError:
print ("読み取り不可")
except KeyboardInterrupt:
if enable_save_to_file:
f.close()
print ("終了")
sys.exit(0)
  • ステップ 4. デモを実行します。
sudo python grove_gps_data.py

注意

GPSは屋外で使用するのが望ましいです。ラズベリーパイを窓の外や屋外の場所に置くことをお勧めします。

SIM28モジュールに関する注意事項

  • ステップ 1. Grove-GPSは、元のバージョンと同じフットプリントを持つSIM28モジュールに変更されました。
  • ステップ 2. SIM28モジュールのデータを受信するために、"SIMCom GPS DEMO"ツールを使用する必要があります。
  • ステップ 3. SIMCom_GPS_DEMOツールを開き、Module->properties->module->select SIM28に進みます。
  • ステップ 4. SIMCom_GPS_DEMO_V1.07はWindows専用です。

  • ステップ 5. SIMCom_GPS_DEMOツールを開き、Module->connectに進みます。GPSモジュールが使用しているシリアルポートを選択します。

回路図オンラインビューア

リソース

プロジェクト

GPS/GPRSトラッカーのプロジェクト: この新しいプロジェクトでは、GPRS技術とMQTTプロトコルを使用して接続されたGPSトラッカーを紹介します。

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...