Nesse pequeno projeto criei um mini rastreador com sim800, esp8266 e módulo de GPS NEO-6m-0-001
Funcionamento: O GPS pega os dados de através do SIMCard (internet) envia esses dados para algum local de sua escolha (no meu caso para um banco de dados) é possível obter latitude, longitude e velocidade.
Download do projeto completo clique aqui
IMPORTANTE:
- O sim card que utilizei foi da Operadora TIM (o da VIVO não funcionou…)
- O esquema de montagem foi feito no Fritzing e exportado tambem para PDF (download acima)
- O SIM800l foi ligado da seguinte forma no ESP8266: TX ligado na porta D2 e RX ligado na D3
- o GPS foi ligado da seguinte forma no ESP8266: Tx ligado no D1
- Tenha certeza que seu Chip (Simcard) tenha crédito e esteja navegando normalmente
- Não esqueça de ligar a antena do seu SIM800L mesmo na hora de testes
- Esteja em um local que pegue sinal de GPS (o sistema não funciona sem sinal de GPS)
- A variável que armazena a velocidade pode ser do tipo INT ao invés de String
- Não esqueça de configurar seu Baund rate* para ouvir em 19200
- A versão da biblioteca TinyGPS++ é a 13.0.0
*número de vezes que um sinal em um canal de comunicação muda seu estado, ou varia.
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
String la;
String lo;
String ve;
// ligar o SIM800: TX no D2 | RX no D3
SoftwareSerial gprsSerial(4, 0);
//ligar TX do GPS na porta D1 (5)
static const int RXPin = 5;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin);
void setup(){
Serial.println(“Iniciando GPS…”);
Serial.begin(9600);
ss.begin(GPSBaud);
gprsSerial.begin(19200);
Serial.begin(19200);
Serial.println(“Inicializando…”);
delay(1000);
Serial.println(“Prontinho…”);
gprsSerial.flush();
Serial.flush();
//inicializar o serviço GPRS
gprsSerial.println(“AT+CGATT?”);
delay(1000);
toSerial();
// Configurações da Portadora
gprsSerial.println(“AT+SAPBR=3,1,\”CONTYPE\”,\”GPRS\””);
delay(1000);
toSerial();
// Configurações da Portadora
gprsSerial.println(“AT+SAPBR=3,1,\”APN\”,\”timbrasil.br\””);
delay(1000);
toSerial();
// Configurações da Portadora
gprsSerial.println(“AT+SAPBR=0,1”);
delay(1000);
gprsSerial.println(“AT+SAPBR=1,1”);
delay(1000);
toSerial();
}
void loop(){
//////////////////////////////////////////////////////// GPS ///////////////////////////////////////////////////////////
/////// Aqui o GPS pega os dados
while (ss.available() > 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
ve = “”;
la = “”;
lo = “”;
ve = String(gps.speed.kmph());
la = String(gps.location.lat() ,6);
lo = String(gps.location.lng() ,6);
Serial.println(“——— GPS ———“);
Serial.print(“Latitude: “);
Serial.println(la);
Serial.print(“Longitude: “);
Serial.println(lo);
Serial.print(“Velocidade: “);
Serial.println(ve);
Serial.println(“—— END GPS ——–“);
delay(3000);
//////////////////////////////////////////////////////// GPRS ///////////////////////////////////////////////////////////
// Inicializando o serviço HTTP – GPRS
gprsSerial.println(“AT+HTTPINIT”);
delay(1000);
toSerial();
gprsSerial.println(“”);
String url = “AT+HTTPPARA=\”URL\”,\”http://www.seusite.com.br/index.php”;
url.concat(“?latitude=”);
url.concat(la);
url.concat(“&longitude=”);
url.concat(lo);
url.concat(“&velocidade=”);
url.concat(ve);
url.concat(“&veiculo=”);
url.concat(“FUSCA AMARELO”);
url.concat(“\””);
gprsSerial.print(url);
gprsSerial.println(“”);
delay(5000);
toSerial();
// Tipo requisição: 0=GET, 1=POST, 2=HEAD
gprsSerial.println(“AT+HTTPACTION=0”);
delay(5000);
toSerial();
// Lendo a resposta do servidor
gprsSerial.println(“AT+HTTPREAD”);
delay(5000);
toSerial();
gprsSerial.println(“”);
gprsSerial.println(“AT+HTTPTERM”);
toSerial();
delay(300);
Serial.println(“Aguardando 1 minuto…”);
//Aguardando 1 minuto
delay(60000);
}
}
}
void toSerial(){
while(gprsSerial.available()!=0){
Serial.write(gprsSerial.read());
}
}