fbpx

Obtendo latitude e longitude de GPS, com o Esp32 LoRa e NEO-6M.

Neste artigo você aprenderá como usar um módulo GPS em conjunto com o módulo WiFi LoRa 32 da Heltec, para obter coordenadas de localização geográfica (latitude e longitude) e enviá-las para a internet.

Antes de começarmos é importante entender o que é e como funciona um GPS. O GPS, do inglês Global Positioning System, é um sistema desenvolvido pelo Departamento de Defesa dos EUA com função primordial de identificar o posicionamento de um receptor, na superfície terrestre, usando para isso sinais emitidos por satélites.

Os satélites GPS transmitem sinais de radiofrequência para um equipamento receptor, onde estes sinais são decodificados e deles são extraídas informações precisas de posição, velocidade e tempo. Os receptores de GPS precisam de uma visão desobstruída do céu, por isso geralmente não funcionam bem dentro de ambientes fechados, perto de prédios altos ou áreas florestais.

Os módulos da série NEO-6M, fabricados pela empresa suíça u-blox, são módulos GPS próprios para o uso em conjunto a um microcontrolador, como o ESP32 LoRa.  Neste artigo usaremos a placa GY-NEO6MV2, que tem como núcleo um módulo NEO-6M-0-001 e tem as especificações listadas abaixo:

  • Tensão de alimentação: 3.3V – 5V;
  • Antena externa;
  • Memória EEPROM;
  • Interface: TTL (TX/RX).

Mostraremos a seguir o passo a passo para conectar o GY-NEO6MV2 ao ESP32 LoRa, como criar um código para receber as medições de latitude e longitude do GPS e transmitir os dados recebidos para a Nuvem.

Para este projeto você precisará de:

  • 2 Placas ESP32 LoRa (WiFi LoRa 32);
  • 1 Módulo GPS GY-NEO6MV2;
  • 4 Jumpers Macho/ Macho;
  • Protoboard.

Siga o esquemático abaixo para conectar o GY-NEO6MV2 ao ESP32 LoRa.

Passo 1 – Cadastro na Plataforma EasyIot

Entre no site da Plataforma EasyIot. Caso ainda não esteja cadastrado, faça o seu cadastro gratuitamente.

Usaremos a plataforma para visualizar os dados dos sensores que serão enviados para a Nuvem.

Passo 2 – Configuração da IDE

Se você já configurou a IDE do Arduino para que ela de suporte a placa ESP32 LoRa da Heltec, pule para o Passo 3.

Abra a IDE do Arduino e entre em Arquivo >> Preferências:

Procure por URLs Adicionais para Gerenciadores de Placas e copie o link abaixo na caixa de diálogo:

https://dl.espressif.com/dl/package_esp32_index.json

Vá em Ferramentas >> Placa >> Gerenciador de Placas:

Procure por esp32, selecione o pacote esp32 by Espressif Systems e clique em instalar.

Verifique se o ESP32 foi adicionado à lista de placas em Ferramentas >> Placa:

Agora em Ferramentas >> Placa >> Gerenciador de Placas procure por LoRa e instale a biblioteca Heltec ESP32 Dev-Boards by Heltec Automation:

Por fim, instale a biblioteca do display oled indo novamente em Ferramentas >> Placa >> Gerenciador de Placas procure por Adafruit SSD1306 by Adafruit e clique em instalar:

Em seguida, novamente em Ferramentas >> Placa >> Gerenciador de Placas procure e instale Adafruit GFX by Adafruit:

Passo 3: Biblioteca Easyiot-LoRa

Acesse a Plataforma EasyIoT, clique em Bibliotecas e baixe as bibliotecas EasyIoT-LoRa-ESP32 e LoRa.

Com a IDE do Arduino aberta, entre em Sketch >> Incluir Biblioteca >> Adicionar biblioteca .ZIP e inclua os as dois arquivos Zip baixados.

Passo 4: Programação do Gateway

O EasyGateway será a ponte entre os seus dispositivos LoRa e a Nuvem, por isso o configuraremos primeiro.

Baixe o código do EasyGateway e abra o código com a IDE do Arduino.

#include <Easyiot-LoRa.h>

const char*  ssid = "MEU_SSID"; // <-- Digite aqui o nome da sua rede WiFi
const char* password = "MINHA_SENHA"; // <-- Digite aqui a senha da sua rede WiFi
unsigned long inicio;

void setup() {
  int timeout = 0;
  
  Serial.begin(115200);
  display_logo();
  delay_lora(5000);
  Serial.print(F("Conectando a "));
  Serial.print(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while ((WiFi.status() != WL_CONNECTED) || (timeout < 10)) {
    Serial.print(".");
    timeout++;
    delay_lora(1000);
    if(timeout == 30){
        timeout = 0;
        Serial.println();
        Serial.println(F("Falha na conexão, verifique os dados da sua WiFi!"));
        Serial.println(F("Tentando conectar novamente"));
        Serial.println();
        Serial.print(F("Conectando a "));
        Serial.print(ssid); 
    }
  }
  Serial.println();
  Serial.println(F("WiFi conectado"));
  Serial.println();
  
  pinMode(pinBUTTON, INPUT_PULLUP);
  pinMode(led, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(pinBUTTON), handleButtonInterrupt, CHANGE);
  registro_gateway();
  display_gateway();
  _start_LoRa();
  inicio = millis();
}


void loop() {

  interrupcao();
  receive_lora();
  if((millis() - inicio) > 300000) {
    inicio = millis();
    _start_LoRa();  
  }
  
}
 
 
 
 

No código substitua MEU_SSID e MINHA_SENHA, nas linhas 3 e 5, pelo login e senha da sua rede WiFi.  

Execute o programa e abra o monitor serial da IDE.

O Easy Token é o código de registro do seu EasyGateway na Plataforma EasyIoT. Para obter seu Easy Token acesse a Plataforma e vá em Dispositivos >> Dispositivos Cadastrados e adicione um novo dispositivo.

Crie uma aplicação e clique em Continuar.

Selecione ESP32 e clique em Continuar.

Copie o Easy Token da sua aplicação.

Cole o Easy Token no monitor serial e digite Enter.

Copie o RX-ID e salve. Esse é o código de identificação do seu gateway, que deverá ser passado para todos os dispositivos LoRa conectados ao gateway.  Esse código também será exibido no display OLED.

Passo 5: Programação do GPS LoRa

Baixe o código do EasyGPS e abra o código com a IDE do Arduino.

#include <Easyiot-LoRa.h>
#include <TinyGPS++.h>

TinyGPSPlus gps;

#define GPSECHO false
#define tempo_gps 30000

uint32_t timer;
static const int RXPin = 12, TXPin = 13;

int cont = 0;

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);
  hardware_serial = true;
  delay_lora(5000);
  pinMode(pinBUTTON, INPUT_PULLUP);
  pinMode(led, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(pinBUTTON), handleButtonInterrupt, CHANGE);
  registro_device();
  _start_LoRa();
  timer = millis();

}

void gpsSend() {
  double aux;
  int aux2, aux3;
  
  if( ((millis() - timer) > tempo_gps) &amp;&amp; (gps.location.isValid()) &amp;&amp; (gps.date.isValid()) &amp;&amp; (gps.time.isValid()) ) {
    payload = "Latitude: [";
    aux = gps.location.lat();
    aux2 = gps.location.lat(); 
    aux = (aux - aux2) * 1000000;
    aux3 = (int)abs(aux);
    payload = payload + aux2;
    payload = payload + ".";
    payload = payload + aux3;
    payload = payload + "] Longitude: [";
    aux = gps.location.lng();
    aux2 = gps.location.lng();
    aux = (aux - aux2) * 1000000;
    aux3 = (int)abs(aux);
    payload = payload + aux2;
    payload = payload + ".";
    payload = payload + aux3 + "]";
    send_lora();
    Serial.println(F("Payload enviado (visualize os dados na plataforma)"));
    payload = "";
    timer = millis();  
  }
}

void loop() {
  
  interrupcao();
  while (Serial2.available() > 0)
    if (gps.encode(Serial2.read()))
      gpsSend();

  if (millis() > 15000 &amp;&amp; gps.charsProcessed() < 10) {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }

}
 
 
  
 

 

Execute o código e abra o painel da Plataforma EasyIot.

Passo 6: Criando um mapa no dashboard

Na Plataforma EasyIot entre no menu Dashboard e adicione um novo dashboard.

De um nome ao dashboard, defina o tipo como sendo Mapa e selecione a aplicação, criada anteriormente, para enviar os dados de latitude e longitude do GPS.

Agora será necessário adicionar 2 pontos de análise. Um ponto de análise é a parte da mensagem, enviada pelo dispositivo, onde se encontra a informação que se deseja exibir no dashboard. Essa informação deve aparecer na mensagem entre colchetes, para que o dashboard a identifique como um ponto relevante.

Primeiro crie um ponto de análise para a informação de Latitude.

Selecione o tipo de dado como sendo String, de o nome lat ao ponto de análise e selecione a posição do dado no payload como sendo 1. Salve o ponto de análise.

Crie um segundo ponto de análise para a Longitude. Selecione o tipo de dado como sendo String, de o nome lng ao ponto de análise e selecione a posição do dado no payload como sendo 2. Salve o ponto de análise.

Pronto, os dados de localização do GPS já estão disponíveis no mapa.