3. Código del ESP8266 y GPS Neo 6M - JanAlvaro/DoggyPoppy GitHub Wiki

Código del ESP8266 y GPS Neo 6M

Instalacion del driver ESP8266 en el ARDUINO IDE

Para cargar el código en el ESP8266 es necesario instalar el driver en el ARDUINO IDE, en el siguiente link se encuentra el tutorial para realizar la instalación.

Empezamos instalando las librerías necesarias para este proyecto las cuales son:

#include <TinyGPS++.h>                                  // Tiny GPS Plus Library
#include <SoftwareSerial.h>                             // Serial
#include <ESP8266WiFi.h>                                // ESP8266 Library

El siguiente código crea las constantes usadas en el proyecto

const char* ssid     = "WILLIAM CRUZ";      // Nombre de la red 
const char* password = "A1B2C3D4";      // Contraseña de la red
const char* host = "192.168.0.28";  // IP del servidor( CHIP Pro)
const int   port = 8080;            // El puerto donde se encuentra el servidor
const int   watchdog = 5000;        // La frecuencia con la que se envía datos al servidor 
unsigned long previousMillis = millis(); 

static const int RXPin = 12, TXPin = 13;                // Pines para la conexión con el modulo GPS
static const uint32_t GPSBaud = 9600;                   // Tasa de Baudios para conectarse con el gps (9600)
//
const double Home_LAT = 4.632060;                      // Latitud de la posición del servidor
const double Home_LNG = -74.082119;                     //Longitud de la posición del servidor

double lati = 0;
double longi = 0;

TinyGPSPlus gps;                                        // Crea una instancia del objeto GPS
SoftwareSerial ss(RXPin, TXPin);                        // La conexión serial con el GPS

Realizamos la conexión a la red WIFI e inicializamos el serial

void setup() {

  ss.begin(GPSBaud);                                    // Comunicación serial a 9600 baudios para el gps
  
  Serial.begin(115200);                                 //Comunicación serial a 115200 para la consola
  Serial.print("Connecting to ");                       //imprimimos la red a la cual vamos a conectarnos
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);                          //Nos conectamos a la red 
  while (WiFi.status() != WL_CONNECTED) {              //Probamos la conexión 
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");                   // Imprimimos la dirección IP local
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

En esta sección se crea la conexión con el servidor y se procede a enviar los datos tomados por el GPS

void loop() {

  smartDelay(500);                                  // Energizamos el GPS
  
  unsigned long currentMillis = millis();                        //Tiempo de datos
 
  if ( currentMillis - previousMillis > watchdog ) {
    previousMillis = currentMillis;                             //Conectarse al  server cada cierto tiempo
    WiFiClient client;
  
    if (!client.connect(host, port)) {                           //Avisa cuando se desconecta del server
      Serial.println("connection failed");
      return;
    }

   lati = gps.location.lat();                                  //Variables donde guardamos la latitud
   longi = gps.location.lng();                                 //Variables donde guardamos la longitud

  

    String url = "/location?command=location&uptime=";          //Creamos una URL para conectarnos al server
    url += String(millis());                                    
    url += "&ip=";
    url += WiFi.localIP().toString();                           //Agregamos la IP del perro
    url += "&lat=";
    url += String(lati,8);                                      //Agregamos la latitud del perro
    url += "&long=";
    url += String(longi,8);                                     //Agregamos la longitud del perro

    Serial.println(gps.location.lat(),5);                       //Imprimimos la latitud en consola
    Serial.println(gps.location.lng(),5);                       //Imprimimos la longitud en consola
    Serial.println(gps.satellites.value());                     //Imprimimos la satelites en consola

    

    // Enviamos una solicitud (REQUEST) con la información
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
      if (millis() - timeout > 5000) {
        Serial.println(">>> Client Timeout !");  //Si la comunicación con el server no es posible se desconecta
        client.stop();
        return;
      }
    }
  
    // Read all the lines of the reply from server and print them to Serial
    while(client.available()){
      String line = client.readStringUntil('\r');    //Si la comunicación con el server es posible imprime en consola 
      Serial.print(line);
    }
  }
}

Esta función mantiene energizado el GPS

static void smartDelay(unsigned long ms)                //Este código asegura que el gps siempre este energizado
{
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}