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);
}