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

この Grove - GPS モジュールは、SIM28(旧バージョンは u-blox 6)とシリアル通信構成を備えた、コスト効率が高くフィールドプログラム可能なデバイスです。22トラッキング / 66アクイジションチャンネルのGPS受信機を搭載しています。トラッキングとアクイジションの感度はどちらも-160dBmに達し、個人用ナビゲーションプロジェクトや位置情報サービスに最適で、同価格帯の製品の中でも優れた選択肢となっています。
Seeed GPS Modules Selection Guideを公開しました。これにより、あなたのニーズに最適なGPSモジュールを選択する手助けができます。
バージョン
製品バージョン | 変更点 | リリース日 |
---|---|---|
Grove - GPS V1.2 | 初期バージョン | 2015年10月 |
特徴
- NMEAおよびu-blox 6プロトコルをサポート。(2014年1月10日まで、それ以降はSIM28に変更)
- 低消費電力
- ボーレート設定可能
- Grove互換インターフェース
Groveモジュールの詳細については、Grove Systemを参照してください。
仕様
パラメータ | 範囲/値 |
---|---|
入力電圧 | 3.3/5V |
ボーレート | 4800 - 57600(u-bloxバージョン) |
ボーレート | 9600 - 115200(SIM28バージョン) |
デフォルトボーレート | 9600 |
対応プラットフォーム
Arduino | Raspberry Pi | |||
---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
上記で対応プラットフォームとして記載されているものは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能です。そのため、ユーザー自身でソフトウェアライブラリを作成する必要があります。
はじめに
Arduinoを初めて使用する場合は、開始する前に[Arduinoの使い方](https://wiki.seeedstudio.com/ja/Getting_Started_with_Arduino/)をご覧になることを強くお勧めします。
Arduinoで遊ぶ
このサンプルは、ソフトウェアシリアルを使用してGPSからデータを読み取り、それをシリアルポートに送信する簡単なものです。
ハードウェア
- ステップ 1. 以下のものを準備してください:
Seeeduino V4.2 | Base Shield | Grove - GPS |
---|---|---|
![]() | ![]() | ![]() |
今すぐ購入 | 今すぐ購入 | 今すぐ購入 |
- ステップ 2. Grove - GPSをGrove-Base ShieldのポートD2に接続します。
- ステップ 3. Grove - Base ShieldをSeeeduinoに差し込みます。
- ステップ 4. USBケーブルを使用してSeeeduinoをPCに接続します。
Grove Base Shieldがない場合は、以下のようにGrove - GPSをSeeeduinoに直接接続することもできます。
Seeeduino | Grove - GPS |
---|---|
5V | 赤 |
GND | 黒 |
D3 | 白 |
D2 | 黄色 |
ソフトウェア
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 pi | GrovePi_Plus | Grove - 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モジュールが使用しているシリアルポートを選択します。
回路図オンラインビューア
リソース
- [Eagle] Grove-GPS Eagleファイル
- [PDF] GPS回路図(PDF)
- [データシート] E-1612-UBデータシート
- [データシート] U-Blox6受信機説明プロトコル仕様
- [ソフトウェア] U-Blox u-center GPS評価ソフトウェア
- [ドキュメント] SIM28_DATA_File
- [ドキュメント] SIMCom_GPS_DEMO_V1.07
プロジェクト
GPS/GPRSトラッカーのプロジェクト: この新しいプロジェクトでは、GPRS技術とMQTTプロトコルを使用して接続されたGPSトラッカーを紹介します。
技術サポートと製品ディスカッション
弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。