Test di controllo della posizione con GPS.
Test con : NodeMCU ESP8266 ESP-12F WiFi Lolin V3 (solo dati georeferenziali)
Programma: (le coordinate inserite non rispecchiano la realtà)
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
static const int RXPin = 2, TXPin = 3;
//**Collegamenti GPS sull'ESP8266 ESP-12F D6(GPIO12 TX) e D7(GPO13 RX) ***
static const uint32_t GPSBaud = 9600;
static const double WAYPOINT_LAT = 41.839116, WAYPOINT_LON = 14.278210;
//** Collegamenti OLED sull'ESP8266 ESP-12F D1(GPIO5) SCL D2(GPIO4) SDA ***
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
void setup()
{
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Acoptex GPS-Timing");
display.println("Check for more");
display.println("DIY projects on");
display.println("http://acoptex.com");
delay(3000);
ss.begin(GPSBaud);
}
void displayinfo()
{
display.setCursor(0, 0);
display.print("DATA : ");
display.print(gps.date.day());
display.print("-");
display.print(gps.date.month());
display.print("-");
display.println(gps.date.year());
//*****************************************
display.print("ORA : ");
display.print(gps.time.hour());
display.print(":");
display.print(gps.time.minute());
display.print(":");
display.println(gps.time.second());
//*****************************************
display.print("LATITUDE : ");
display.println(gps.location.lat(), 6);
display.print("LONGITUDE: ");
display.println(gps.location.lng(), 6);
//*****************************************
display.print("H. s.l.m.: ");
display.print(gps.altitude.meters(), 2);
display.println(" m");
//*****************************************
//display.print(gps.altitude.feet(), 2);
//display.println(" ft");
display.print("DISTANZA : ");
//display.println(gps.satellites.value());
display.println("65 cm. ");
display.print("SGANCIO : ");
display.println("OFF ");
unsigned long distanceKmToWaypoint =
(unsigned long)TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
WAYPOINT_LAT,
WAYPOINT_LON) / 1000;
display.print("m. da WPT: ");
display.println(distanceKmToWaypoint);
delay(100);
}
void loop()
{
displayinfo();
smartDelay(500);
if (millis() > 5000 && gps.charsProcessed() < 10)
{
display.clearDisplay();
display.setCursor(0, 0);
display.println("No GPS detected:");
display.println(" check wiring.");
display.println("More projects are");
display.println(" on Acoptex.com");
}
}
static void smartDelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}//*************************************************