GPS Tracker no Arduino MEGA + SIM908 via GPRS

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

GPS Tracker no Arduino MEGA + SIM908 via GPRS

Mensagem  Evandro Barroso Gaio em Qui 1 Out - 3:55

Olá pessoal.

Após vários testes com o módulo SIM908 no Arduino Mega, consegui fazer funcionar todo o projeto. O projeto completo tem um display touch para apresentar informações trocadas com o servidor.

Esta parte do projeto contempla somente a captura e envio das informações que são enviadas utilizando o método GET: carID, latitude e longitude. via GPRS.

A ligação do Arduino ao módulo SIM908 deve ser feita conforme o Admin apresentou. Uma ligação dos pinos dos jumpers que definem as seriais do módulo SIM908, para o Arduino Mega: pino 2 ao D16 e o 6 ao D17 utilizando a serial2 do Arduino Mega, deixando a serial0 para comunicação com a USB para Serial monitor.

É um apanhado de muitos vários recursos discutidos aqui no fórum e na internet afora.

Ótimos projetos pra todos.

____________________________________________________________________________________________________

#define BUF_LEN 200

int powerkey = 5;
int statuspin = 6;
int pinState = 0;
int verifica = 0;
String id = "sku33";
int vel = 0;
byte n;
String hora, lats1, lats2, lons1, lons2, velo, cood, ctrl, latitude, longitude, velocidade;
float lat1, lon1, lat2, lon2, lat, lon;
byte num_of_bytes;
char comm_buf[BUF_LEN];
char bufferString[10];
bool enviandoDados = false;
String inputString = "";
int firstCharacter;
bool conectado = false;

String apn = "tim.com.br";
String user = "tim";
String pass = "tim";

void setup()
{
pinMode(powerkey, OUTPUT);
pinMode(statuspin, INPUT);

Serial.begin(9600);
Serial2.begin(9600);
}

void loop()
{
pinState = digitalRead(statuspin);
if (pinState == LOW) {
digitalWrite(powerkey, HIGH); // set the LED on
delay(2000);
digitalWrite(powerkey, LOW);
}

if (Serial.available())
{
Serial2.write(Serial.read());
}
else if (Serial2.available())
{
Serial.write(Serial2.read());
}

if (verifica == 0) {
Serial2.println("AT+CGPSPWR=0");
delay(1000);
Serial2.println("AT+CGPSPWR=1");
delay(1000);
Serial2.println("AT+CGPSRST=0");
delay(1000);
verifica = 1;
Serial2.flush();
}

latitude = "";
longitude = "";
velocidade = "";
ctrl = "";
limpa_buffer();
Serial2.flush();
delay(500);
Serial2.println("AT+CGPSINF=32");
delay(4000);
leSerial();

memset(bufferString, '\0', 10);
latitude = dtostrf(lat, 6, 4, bufferString);

memset(bufferString, '\0', 10);
longitude = dtostrf(lon, 6, 4, bufferString);

if (ctrl == "S") {
Serial.println("A partir daqui sao enviados os dados pelo GPRS");
enviandoDados = true;
enviadados();
delay(3000);
}
}

void limpa_buffer()
{
memset(comm_buf, '\0', BUF_LEN);
}

void enviadados()
{
Serial2.flush();
delay(500);
Serial.println("Verifica Conexao");
Serial2.println("AT+CIFSR");
delay(200);
Serial.print("Lendo retorno de CIFSR: ");
leSerial2("AT+CIFSR");
http://Serial.println(inputString);
firstCharacter = inputString.indexOf('E');
if (inputString.startsWith("ERROR", firstCharacter)) {
Serial.println("Comando AT+CSTT");
Serial2.println("AT+CSTT=\"" + apn + "\",\"" + user + "\",\"" + pass + "\"");
leSerial2("AT+CSTT");
delay(2000);

Serial2.println("AT+CIICR");//conexao com o GPRS
delay(2000); //espera resultado na serial
leSerial2("AT+CIICR");
limpa_buffer();

Serial2.println("AT+CIFSR");//Pegar IP local
delay(2000); //espera resultado na serial
leSerial2("AT+CIFSR");
limpa_buffer();

Serial2.println("AT+CDNSCFG?");//Configuracao do dominio do servidor
delay(2000); //espera resultado na serial
leSerial2("AT+CDNSCFG?");
limpa_buffer();
conectado = true;
} else {
Serial.println("Modulo conectado");
Serial2.println("AT+CIPSTART=\"tcp\",\"dominio.com.br\",\"9080\""); //inicia conexao TCP
delay(4000); //espera resultado na serial
leSerial2("AT+CIPSTART=");
limpa_buffer();

Serial2.println("AT+CIPSEND");//inicia envio de dados
delay(4000);
leSerial2("AT+CIPSEND");
limpa_buffer();

Serial.print("User a ser enviado: ");
Serial.println(id);
Serial.print("Latitude a ser enviada: ");
Serial.println(latitude);
Serial.print("Longitude a ser enviada: ");
Serial.println(longitude);
Serial2.println("GET http://dominio.com.br/mnsshield/position?carId=" + id + "&latitude=" + latitude + "&longitude=" + longitude + "\"");
delay(3000);
leSerial2("GET ");

Serial2.write(0x0D); // ctrl+m CR - Carriage Return
delay(1000);
Serial2.write(0xaA); // ctrl+j LF - Line Feed
delay(1000);
Serial2.write(0x1A); // ctrl+z End of Message
delay(1000);

leSerial2("Hexas");
delay(1000);
Serial2.flush();
enviandoDados = false;
leSerial2("Final");
}
}

void leSerial2(String nome)
{
Serial.print("Nome do comando : ");
Serial.println(nome);
num_of_bytes = Serial2.available(); //Pega quantidade de bytes que estao na serial
delay(500);
Serial.print("Numero de bytes no metodo leSerial2: ");
Serial.println(num_of_bytes);
while (Serial2.available() > 0) //Espera ate que serial possua bytes
{
for (n = 0; n < 200; n++)
{
comm_buf[n] = Serial2.read();
}
}
Serial.println("");
Serial.println("Inicio conteudo da leSerial2: ");
for (int i = 0; i < num_of_bytes; i++) {
Serial.print(comm_buf[i]);
}
delay(500);
Serial.println("");
Serial.println("Final conteudo da leSerial2: ");
}

void leSerial()
{
num_of_bytes = Serial2.available(); //Pega quantidade de bytes que estao na serial
Serial.println("");
Serial.print("Numero de bytes na serial: ");
Serial.println(num_of_bytes);
while (Serial2.available() > 0) //Espera até️ que serial possua bytes
{
for (n = 0; n < num_of_bytes; n++)
{
comm_buf[n] = Serial2.read();
}
}
if (n == 63) {
//Se o n for menor que 63 descarta pacote
cood = comm_buf;
ctrl = cood.substring(30, 31);
hora = cood.substring(6, 11);
lats1 = cood.substring(18, 20);
lats2 = cood.substring(20, 29);
lons1 = cood.substring(32, 34);
lons2 = cood.substring(34, 43);
velo = cood.substring(46, 48);
vel = velo.toFloat();
lat1 = lats1.toFloat();
lat2 = lats2.toFloat();
lon1 = lons1.toFloat();
lon2 = lons2.toFloat();
lat = (lat1 + (lat2 / 60)) * -1;
lon = (lon1 + (lon2 / 60)) * -1;
latitude = String(lat);
longitude = String(lon);
velocidade = String(velo);
Serial.print("Coordenada: ");
Serial.print(cood);
Serial.print("\n\n");
Serial.print("Ctrl: ");
Serial.print(ctrl);
Serial.print(" <> Hora: ");
Serial.print(converterSegundoHora(hora.toInt()));
Serial.print(" <> lat: ");
Serial.print(lat, Cool;
Serial.print(",");
Serial.print(" <> lon: ");
Serial.print(lon, Cool;
Serial.print(" <> vel: ");
Serial.print(vel);
Serial.print("\n");
}
leSerial2("Metodo leSerial");
Serial2.flush(); //limpa buffer de entrada da serial
limpa_buffer();
}

void ShowSerialData()
{
while (Serial2.available() != 0)
Serial.write(Serial2.read());
}

String converterSegundoHora(long seconds)
{
int days, hours, minutes;
days = seconds / 60 / 60 / 24;
hours = (seconds / 60 / 60) % 24;
minutes = (seconds / 60) % 60;
seconds = seconds % 60;
return String(hours);
}


Evandro Barroso Gaio

Mensagens : 7
Data de inscrição : 23/06/2015
Idade : 54

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: GPS Tracker no Arduino MEGA + SIM908 via GPRS

Mensagem  Admin em Sex 16 Out - 6:53

Obrigado por compartilhar Evandro.
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 36
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Conectar GPRS

Mensagem  son.trs@gmail.com em Sab 7 Nov - 16:18

Boa noite, muito bom seu projeto, estou fazendo um semelhante com o Arduino Uno, tenho uma duvidas, com qual operadora você conseguiu enviar os dados para o server?

Obrigado

son.trs@gmail.com

Mensagens : 2
Data de inscrição : 03/11/2015

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: GPS Tracker no Arduino MEGA + SIM908 via GPRS

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum