Que tal amigos..
Quisiera pedir apoyo en este tema... ya que he estado leyendo antes de poder solicitar apoyo pero sigo sin resultados..
mi proyectos consiste en enviar datos de un sensor a una base de datos.. todo bien hasta aqui...
lo que pretendo hacer es poder usar la respuesta del camando:
(("AT+CIPSTART="TCP","192.86.34.17","2020""))
para encender un led indicando si mi arduino ha conectado con el servidor..
para esto cuando mi arduino conecta al servidor, la lectura del serial es CONNECT OK
quisiera usar esta respuesta para hacer una comparativa en alguan variable almacenando la lectura del serial y asi poder encender el led...
he estado trabajadno con la funcion STRSTR el cual se encarga de buscar una palabra dentro de una cadena de caracteres segun lo que entendi... como dije sigo sin poder tener exito en ello..
void LEDSTATUS()
{
while(Icomsat.available()!=0)
lecserial=Icomsat.read();
//Serial.println(lecserial);
if (strstr(lecserial,"CONNECT OK")) //comprueba la palabra para encender led
{
digitalWrite(ledstatus,HIGH);
}
}
este es el codigo que uso para la conexion.. a mi servidor .. este codigo es de prueba ya que realizo la conexion en el setup() solo para porbar la conexion y que encienda mi led..
#include <SoftwareSerial.h> // libreria de comunicacion serial
#include <String.h> // liberia de texto
SoftwareSerial Icomsat(6, 7); // Declaracion de pines 6(TX) y 7(RX) para comunicacion serial
String cliente= "2";
String consumo= "12564";
char lecserial;
char Status;
int ledpower = 9;
int ledstatus= 4;
void setup()
{
pinMode(ledpower, OUTPUT); // Establece pin 9 como salida para encendido automatico
pinMode(ledstatus, OUTPUT);
Icomsat.begin(9600); // Velocidad de transmision GPRS
Serial.begin(9600); // Velocidad de transmision arduino
delay(3000);
Icomsatpower();
Serial.println("DATALOGGER IACE LISTO"" \r");
lecserial=Serial.read();
delay(1000); // retraso para establecer comunicacion a servidor
CONEXSOCKET(); // funcion para comunicacion a servidor (socket)
}
void CONEXSOCKET()
{
//comando para comprobar dispositivo
Icomsat.println("AT");
delay(1000);
SHOWDATA();
// comando para saber si la sim esta de alta en la red (TELCEL)
Icomsat.println("AT+CREG?");
delay(1000);
SHOWDATA();
//comando para saber si ya esta conectado a la red (TELCEL) Registrarse en una red (TELCEL)
Icomsat.println("AT+CGATT?");
delay(1000);
SHOWDATA();
Icomsat.println("AT+CIPSHUT");//comoando para cerrar conexion a red 3G
delay(2000);
SHOWDATA();
//comando para establecer el modo de conexion 0 = single 1 = multi
Icomsat.println("AT+CIPMUX=0");
delay(3000);
SHOWDATA();
//comando para configurar APN del servicio GSM (TELCEL)
Icomsat.println("AT+CSTT=\"internet.itelcel.com\",\"webgprs\",\"webgprs2003\"");
delay(3000);
SHOWDATA();
//inicia conexion a la red 3G de telcel para intercambio de informacion
Icomsat.println("AT+CIICR");
delay(2000);
SHOWDATA();
// Comando para solicitar IP asignada de la red 3G (TELCEL)
Icomsat.println("AT+CIFSR");
delay(2000);
SHOWDATA();
// comando para comprobar el estado de la ip de la red 3G (TELCEL)
Icomsat.println("AT+CIPSTATUS");
delay(3000);
SHOWDATA();
//Comando para establecer conexion al servidor(socket) con su puerto en esepcifico
Icomsat.println("AT+CIPSTART=\"TCP\",\"196.42.34.85\",\"2020\"");
delay(3000);
SHOWDATA();
LEDSTATUS(); // LLAMAR FUNCION DEPUES DE CONECTAR A SERVIDOR
//Comando para solicitar iniciacion para envio de datos a servidor
//(el modulo regresara ">") si la peticion es exitosa [[ envio maximo de 1352 bytes]]
Icomsat.println("AT+CIPSEND"); // se retiro "\r"
delay(2000);
SHOWDATA();
//Mensaje para enviar a servidor
Icomsat.println(cliente + "|" + consumo);
delay(1000);
SHOWDATA();
// comando para enviar mensaje (como el enter en el chat)
Icomsat.println("\x1A");
delay(3000);
SHOWDATA();
Icomsat.println("AT+CIPCLOSE");//Comando para terminar conexion a servidor (TCP/IP)
delay(1000);
SHOWDATA();
Icomsat.println("AT+CIPSHUT");//comoando para cerrar conexion a red 3G
delay(1000);
SHOWDATA();
}
void SHOWDATA()
{
while(Icomsat.available()!=0)
Serial.write(Icomsat.read());
}
void LEDSTATUS()
{
while(Icomsat.available()!=0)
lecserial=Icomsat.read();
//Serial.println(lecserial);
if (strstr(lecserial,"CONNECT OK")) //comprueba la palabra para encender led
{
digitalWrite(ledstatus,HIGH);
}
}
// Encendido por software del SIM900, es equivalente a precionar el boton de encendido
void Icomsatpower()
{
digitalWrite(ledpower, HIGH);
delay(1000);
digitalWrite(ledpower, LOW);
delay(5000);
}
void loop()
{
}