buenos dias..
estoy tratando de hacer telemetria con algunos sensores enviando los datos a un servidor web, estoy utilizando un arduino mega y un modulo sim900, ya he logrado conectarme al servidor web y enviar datos de manera manual es decir colocarle valores fijos a cada casilla, pero cuando quiero enlazar las variables en las que se guardan los datos censados a las casillas correspondientes solo toma el nombre de la variable como texto... es decir en lugar de colocar un valor en la casilla de temperatura creada en la base de datos solo me escribe "temp" que es como se llama mi variable donde guardo el valor de temperatura. esto se debe a que envió todo en una sola instrucción guardada en un char... como se puede ver a continuación
char direccion[] = "GET /xxxxxxxxx/iot.php?valor=350&valor1=100\r\nHost: xxx.xxx.xxx.xxx\r\nConnection: close\r\n\r\n";
al enviar esta cadena tal como esta me va a escribir en la base de datos 350 en valor 0 y 100 en el valor 1 tal como lo declare en el char...
pero al querer enlazar las variables como muestro acontinuacion
char direccion[] = "GET /xxxxxxxxx/iot.php?valor=temp&valor1=hum\r\nHost: xxx.xxx.xxx.xxx\r\nConnection: close\r\n\r\n";
me escribe de manera literal "temp" y "hum" en valor 0 y valor 1 en su respectivo orden... como puedo citar dichos valores dentro del char y que me envie cuanto vale cada variable... gracias
anexo el código completo que estoy utilizando.
#include <SoftwareSerial.h>
SoftwareSerial SIM900(10, 11); // Configura el puerto serial para el SIM900. Para el Arduino MEGA utilizar pines 10 y 11
char aux_str[50];
//Contenido de la dirección Http
char direccion[] = "GET /xxxxxxxx/iot.php?valor=350&valor1=100\r\nHost: xxx.xxx.xxx.xxx\r\nConnection: close\r\n\r\n";
void setup()
{
SIM900.begin(9600); //Configura velocidad del puerto serie para el SIM900
Serial.begin(9600); //Configura velocidad del puerto serie del Arduino
delay(1000);
Serial.println("Iniciando...");
iniciar();
}
void loop() {
PeticionHttp();
delay(100);
enviarAT("AT+CIPCLOSE", "CLOSE OK", 10000); //Cerramos la conexion
enviarAT("AT+CIPSHUT", "OK", 10000); //Cierra el contexto PDP del GPRS
delay(3000000);
}
int enviarAT(String ATcommand, char* resp_correcta, unsigned int tiempo)
{
int x = 0;
bool correcto = 0;
char respuesta[100];
unsigned long anterior;
memset(respuesta, '\0', 100); // Inicializa el string
delay(100);
while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada
SIM900.println(ATcommand); // Envia el comando AT
x = 0;
anterior = millis();
// Espera una respuesta
do {
// si hay datos el buffer de entrada del UART lee y comprueba la respuesta
if (SIM900.available() != 0)
{
respuesta[x] = SIM900.read();
x++;
// Comprueba si la respuesta es correcta
if (strstr(respuesta, resp_correcta) != NULL)
{
correcto = 1;
}
}
}
// Espera hasta tener una respuesta
while ((correcto == 0) && ((millis() - anterior) < tiempo));
Serial.println(respuesta);
return correcto;
}
void iniciar()
{
Serial.println("Conectando a la red...");
delay (5000);
//Espera hasta estar conectado a la red movil
while ( enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 0 )
{
}
Serial.println("Conectado a la red.");
enviarAT("AT+CGATT=1\r", "OK", 1000); //Iniciamos la conexión GPRS
enviarAT("AT+CSTT="internet.comcel.com.co","comcel","comcel"", "OK", 3000); //Definimos el APN, usuario y clave a utilizar
enviarAT("AT+CIICR", "OK", 3000); //Activamos el perfil de datos inalámbrico
enviarAT("AT+CIFSR", "", 3000); //Activamos el perfil de datos inalámbrico
}
void PeticionHttp()
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //Comprueba la conexion a la red
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //Comprueba la conexion a la red
{
enviarAT("AT+CIPSTART="TCP","xxx.xxx.xxx.xxx","80"", "CONNECT OK", 5000); //Inicia una conexión TCP
// Envíamos datos a través del TCP
Serial.println(aux_str);
sprintf(aux_str, "AT+CIPSEND=%d", strlen(direccion));
Serial.println(aux_str);
if (enviarAT(aux_str, ">", 10000) == 1)
{
enviarAT(direccion, "OK", 10000);
}
}
else
{
//reiniciar();
//iniciar();
}
}
}