Arduino + GY-GPS6MV2 + 0.91 OLED

mainДанное устройство задумывалось как часы точного времени со спутников GPS, но потом было расширено показывать координаты LAT/LNG, высоту, скорость и направление движения. Схема подключения модулей, листинг скетча для Arduino IDE внутри статьи далее.
Для работы скетча устанавливаем библиотеки: TinyGPSPlus (для работы модуля GPS) и Adafruit SSD1306 (для OLED дисплея).

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define WIRE Wire

#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &WIRE);

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
  ss.begin(GPSBaud);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  display.clearDisplay();
  display.setCursor(0,0);
  display.print(gps.date.day());
  display.print("/");
  display.print(gps.date.month());
  display.print("/");
  display.print(gps.date.year());
  display.print(" ");
  display.print(gps.time.hour());
  display.print(":");
  display.print(gps.time.minute());
  display.print(":");
  display.println(gps.time.second());


  // координаты LAT/LNG
  if(gps.location.isValid()){
    display.print("LAT: ");
    display.println(gps.location.lat());
    display.print("LNG: ");
    display.println(gps.location.lng());
  }

  // высота
  if(gps.altitude.isValid()){
    display.print("ALT: ");
    display.print(gps.altitude.meters());
  }

  // направление движения
  if(gps.course.isValid()){
    display.setCursor(65,8);
    display.print("CRS: ");
    display.print(gps.course.deg());
  }
  
  // скорость движения
  if(gps.speed.isValid()){
    display.setCursor(65,16);
    display.print("SPD: ");
    display.print(gps.speed.kmph());
  }

  // количество спутников
  if(gps.satellites.isValid()){
    display.setCursor(105,24);
    display.print("[");
    display.print(gps.satellites.value());
    display.print("]");
  }
  
  digitalWrite(LED_BUILTIN, HIGH);
  delay(50);
  digitalWrite(LED_BUILTIN, LOW);
  delay(25);
  yield();
  display.display();
  smartDelay(1000);
}

static void smartDelay(unsigned long ms){
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

Схема подключения модулей GPS и OLED к Arduino Pro Minischeme

Запись опубликована в рубрике «Начинающим», C++, Программирование, Радиолюбитель с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий