W tym artykule przedstawię po krótce możliwości wykorzystania RV 5V TinyGPS, pozwalającego na określenia swojego położenia geograficznego na mapie. W artykule będzie również zawarty opis obsługi wyświetlacza Oled 128×128 oraz spis bibliotek do korzystania z niego. Przykład który poniżej przedstawię ma za zadanie wyświetlić długość i szerokość geograficzną naszego położenia oraz wysokość nad poziomem morza.


Spis treści
- Krótki opis
- Specyfikacja
- Przykład
- Pliki do pobrania
Krótki opis
Ten moduł TinyGPS podaje nam z jakiej ilości satelitów korzystam, określa z jaką prędkością się poruszamy, do tego możemy ustalić w jakiej jednostce chcemy żeby nam podał tę informacje, ale również może określać czas z dokładnością do centy-sekundy.
Specyfikacja
- Nazwa: Tiny GPS Module
- Napięcie wejściowe: 5V
- Antena: Antena Ceramiczna
- Formaty odbioru: GPS,GLONASS,BDS
- Wskaźnik wsparcia: 9600dps
- Protokół wyjścia: UBLOX
- Temperatura Pracy: -40℃-+85℃
- Temperatura Przechowania: -40℃-+105℃
- Wymiary: 12mm x 16mm x 6mm
- Waga: 3g
Przykład
Elementy:
- Arduino Uno lub Mega
- Oled 128×64
- TinyGPS
- *Płytka Stykowa lub szybko złączki dla wygody korzystania
Połączenie:
- Arduino – GPS
- VCC(czerwony kabel) – 5V
- GND(czarny kabel) – GND
- TX(biały kabel) – pin 10(Arduino Mega) / pin 4 (Uno)
- RX(żółty kabel) – pin 11(Arduino Mega)/ pin 3(Uno)
- Oled-arduino
- VCC – 5V
- GND – GND
- SCL – SCL(Uno – pin 5)
- SDA – SDA(Uno – pin4)

Program
!!Uwaga GPS nie może pobrać danych o lokacji będąc w pomieszczeniu
Na początku musimy zdefiniować biblioteki AdafruitSSD_1306 odpowiadająco za działanie wyświetlacza oraz TinyGPS kontrolującą moduł GPS. Użyłem również w przykładzie biblioteki SoftwareSerial, odpowiadającej za port, oprócz szeregowego, którym będą przesyłane dane z modułu GPS. W jej obiekcie ustalam piny RX i TX (Jeśli korzystasz z Uno lub Nano zmień wartości na 4,3) Jeśli chcesz dowiedzieć się jakie biblioteki będą wykorzystane i należy pobrać dla wyświetlacza Oled zachęcam do zapoznania się z tym artykułem -> Reziorek.pl – Wyświetlacze OLED 0.91, 0.96 (ajmaker.pl)
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <TinyGPSPlus.h> #include <SoftwareSerial.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) // The pins for I2C are defined by the Wire-library. // On an arduino UNO: A4(SDA), A5(SCL) // On an arduino MEGA 2560: 20(SDA), 21(SCL) // On an arduino LEONARDO: 2(SDA), 3(SCL), ... #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); TinyGPSPlus gps; SoftwareSerial SoftSerial(10, 11); // RX, TX static const uint32_t GPSBaud = 9600;
Pierwszą z funkcji jaką teraz omówię bedzie void setup(). Aktywujemy w niej porty szeregowy i danych w których ustawiamy po kolei wartości 115200 oraz 9600(ponieważ na takim baundrate działa moduł GPS).
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Show image buffer on the display hardware.
// Since the buffer is intialized with an Adafruit splashscreen
// internally, this will display the splashscreen.
SoftSerial.begin(GPSBound);Następną funkcją jest funkcja void loop(). Składa się ona z while i if. Funkcja while będzie wykonywała się do momentu gdy dane z portu będą odbierane. Natomiast warunkiem if jest poprawne działanie gps. Jeżeli tak się stanie rozpocznie się działanie funkcji DisplayInfo().
void loop() {
while (SoftSerial.available() > 0)
if (gps.encode(SoftSerial.read()))
DisplayInfo();
}Funkcja DisplayInfo() ma 3 zadania. Najpierw powinna podać nam dzisiejszą datę, jeżeli się to nie stanie wyświetli się komunikat o pojawieniu się błędu w jej miejscu. To samo stanie się jeżeli gps nie będzie w stanie odczytać wartości naszej długości i szerokości geograficznej. Ostatnim zadaniem modułu jest odczyt naszej wysokości nad poziomem morza.
void DisplayInfo() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
if(gps.date.isValid()) {
display.setCursor(60,0);
display.print(gps.date.day());
display.print("/");
display.print(gps.date.month());
display.print("/");
display.print(gps.date.year());
} else {
display.setCursor(60, 0);
display.print("Error");
}
if(gps.location.isValid()){
display.setCursor(0,20);
display.print("Dlugosc :");
display.println(gps.location.lat(), 4);
display.setCursor(0, 30);
display.print("Szerokosc :");
display.println(gps.location.lng(), 4);
if(gps.altitude.isValid()) {
display.setCursor(0, 40);
display.println("Wysokosc:");
display.println(gps.altitude.meters());
}else {
display.setCursor(0, 40);
display.print("Error");
}
} else {
display.setCursor(0, 20);
display.print("Error");
display.setCursor(0, 30);
display.print("Error");
display.setCursor(0, 40);
display.print("Error");
}
display.display();
}







