Quelle: Ebay
Anschluss-Protokoll: UART
Spannung/Level: 3-5 V kompatibel
Bezugsquelle: u.a. Ebay, z.B. http://www.ebay.de/itm/311296066259
Preis: ca. 12-14 EUR
Treiber-Library:
Serial-lib (standardmäßig in Arduino-Sketch enthalten, standardmäßig bereits eingebunden)
GPS-lib: TinyGPS++ http://arduiniana.org/libraries/tinygpsplus/
https://github.com/mikalhart/TinyGPSPlus
Anm.: auch für Raspberry Pi geeignet! https://bigdanzblog.wordpress.com/2015/ ... pberry-pi/
Hinweise:
1.) es lassen sich nicht nur geograf. Daten, sondern auch Datum, Uhrzeit, Geschwindigkeit, Kurs und Satellitendaten abfragen
2.) Üblicherweise arbeiten die Sketche für Uno und Nano mit SoftwareSerial():
Code: Alles auswählen
SoftwareSerial ss(4, 3);
void loop()
{
while (ss.available() > 0)
gps.encode(ss.read);
//...
Stattdessen lässt sich aber auch Hardware-Serial verwenden, am besten per UART1 oder UART2 auf Mega oder Due:
Code: Alles auswählen
setup(){
Serial.begin(115200); // UART0 für USB-Serial-Terminal Window
Serial1.begin(9600): // UART1 für das GPS-Modul
}
void loop()
{
while (Serial1.available() > 0)
gps.encode(Serial1.read);
//...
}
3.) Liste für die verfügbaren Daten:
Code: Alles auswählen
Serial.println(gps.location.lat(), 11); // Latitude in degrees (double)
Serial.println(gps.location.lng(), 11); // Longitude in degrees (double)
Serial.print(gps.location.rawLat().negative ? "-" : "+");
Serial.println(gps.location.rawLat().deg); // Raw latitude in whole degrees
Serial.println(gps.location.rawLat().billionths);// ... and billionths (u16/u32)
Serial.print(gps.location.rawLng().negative ? "-" : "+");
Serial.println(gps.location.rawLng().deg); // Raw longitude in whole degrees
Serial.println(gps.location.rawLng().billionths);// ... and billionths (u16/u32)
Serial.println(gps.date.value()); // Raw date in DDMMYY format (u32)
Serial.println(gps.date.year()); // Year (2000+) (u16)
Serial.println(gps.date.month()); // Month (1-12) (u8)
Serial.println(gps.date.day()); // Day (1-31) (u8)
Serial.println(gps.time.value()); // Raw time in HHMMSSCC format (u32)
Serial.println(gps.time.hour()); // Hour (0-23) (u8)
Serial.println(gps.time.minute()); // Minute (0-59) (u8)
Serial.println(gps.time.second()); // Second (0-59) (u8)
Serial.println(gps.time.centisecond()); // 100ths of a second (0-99) (u8)
Serial.println(gps.speed.value()); // Raw speed in 100ths of a knot (i32)
Serial.println(gps.speed.knots()); // Speed in knots (double)
Serial.println(gps.speed.mph()); // Speed in miles per hour (double)
Serial.println(gps.speed.mps()); // Speed in meters per second (double)
Serial.println(gps.speed.kmph()); // Speed in kilometers per hour (double)
Serial.println(gps.course.value()); // Raw course in 100ths of a degree (i32)
Serial.println(gps.course.deg()); // Course in degrees (double)
Serial.println(gps.altitude.value()); // Raw altitude in centimeters (i32)
Serial.println(gps.altitude.meters()); // Altitude in meters (double)
Serial.println(gps.altitude.miles()); // Altitude in miles (double)
Serial.println(gps.altitude.kilometers()); // Altitude in kilometers (double)
Serial.println(gps.altitude.feet()); // Altitude in feet (double)
Serial.println(gps.satellites.value()); // Number of satellites in use (u32)
Serial.println(gps.hdop.value()); // Horizontal Dim. of Precision (100ths-i32)
Einfaches Device Example :
Code: Alles auswählen
/*
This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
It requires the use of SoftwareSerial, and assumes that you have a
9600-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
Alternatively: Serial1 (RX1+TX1, pin 18+19 on Mega/Due)
*/
#include <TinyGPS++.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
double frac(double value) {
return (value - (double)trunc(value) );
}
void setup()
{
// setup Serial for USB-Monitor
Serial.begin(115200);
// setup Serial1 for GPS
Serial1.begin(GPSBaud);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2); // init LCD 1602
Serial.println(F("DeviceExample.ino"));
Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
Serial.print(F("Testing TinyGPS++ library v. "));
Serial.println(TinyGPSPlus::libraryVersion());
Serial.println(F("by Mikal Hart"));
Serial.println();
}
void loop()
{
char sbuf[128];
// This sketch displays information every time a new sentence is correctly encoded.
while (Serial1.available() > 0)
if (gps.encode(Serial1.read()))
displayInfo();
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while(true);
}
}
void displayInfo()
{
char sbuf[128];
double fLatt, fLong, fmin, fdecsec;
uint16_t decdeg, decmin,
dday, dmonth, dyear,
dhour, dmin, dsec, dcsec, nsat;
if (gps.location.isValid())
{
fLatt= (double)gps.location.lat();
fLong= (double)gps.location.lng();
sprintf(sbuf, "Lat:%+012.7f " , fLatt );
Serial.print(sbuf); lcd.setCursor(0, 0); lcd.print(sbuf);
decdeg = (int)fLatt;
fmin = ( fLatt - (float)decdeg) * 60;
decmin = (int)(fmin);
fdecsec= (fmin - (float)decmin) * 60 ;
sprintf(sbuf, "B%+04d:%02d'%7.4f ", decdeg, decmin, fdecsec);
Serial.print(sbuf); lcd.setCursor(0, 0); lcd.print(sbuf);
sprintf(sbuf, " Lng:%+012.7f ", fLong );
Serial.print(sbuf);
decdeg = (int)fLong;
fmin = ( fLong - (float)decdeg) * 60;
decmin = (int)(fmin);
fdecsec= (fmin - (float)decmin) * 60 ;
sprintf(sbuf, "L%+04d:%02d'%7.4f ", decdeg, decmin, fdecsec);
Serial.print(sbuf); lcd.setCursor(0, 1); lcd.print(sbuf);
}
else
{
Serial.print(F("Location: INVALID "));
lcd.setCursor(0, 1); lcd.print("Loc.: INVALID");
}
if (gps.date.isValid())
{
dday=gps.date.day();
dmonth=gps.date.month();
dyear=gps.date.year();
sprintf(sbuf, " Date: %02d/%02d/%04d", dday, dmonth, dyear);
Serial.print(sbuf);
}
else
{
Serial.print(F(" Date: INVALID "));
}
if (gps.time.isValid())
{
dhour=gps.time.hour();
dmin= gps.time.minute();
dsec= gps.time.second();
dcsec=gps.time.centisecond();
nsat =gps.satellites.value();
sprintf(sbuf, " Time: %02d:%02d:%02d,%03d Sat.=%02d", dhour, dmin, dsec, dcsec, nsat);
Serial.print(sbuf);
}
else
{
Serial.print(F(" Time: INVALID "));
}
Serial.println();
}