Saludes a todos, os tengo una duda acerca de como podría leer la info de un dht11 en la plataforma de thingspeak. He logrado enviar un valor constante haciendo uso de esta sentencia
char direccion[] = "GET /update?api_key=P4W9GZ5VKKQ3KQQW&field1=9 HTTP/1.1\r\nHost: api.thingspeak.com\r\nConnection: close\r\n\r\n";
el valor constante llega sin problemas, pero ahora he tratado de enviar la lectura del dht11 y no me llega nada a la plataforma.
Este es el código el cual estoy usando.
#include <SoftwareSerial.h>
#include "DHT.h"
SoftwareSerial SIM900(10, 11); // Configura el puerto serial para el SIM900. Para el Arduino MEGA utilizar pines 10 y 11
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int respuesta;
char aux_str[80];
char direccion[] = "GET /update?api_key=P4W9GZ5VKKQ3KQQW&field1=float(humedad) HTTP/1.1\r\nHost: api.thingspeak.com\r\nConnection: close\r\n\r\n";
void setup()
{
SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
dht.begin();
delay(1000);
Serial.println("Iniciando...");
iniciar();
}
void loop()
{
}
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()
{
enviarAT("AT+CPIN?", "OK", 6000);
Serial.println("Conectando a la red...");
delay (5000);
//Espera hasta estar conectado a la red movil
enviarAT("AT+CSQ", "OK", 3000); // Medir la calidad de la senal, 15 a mas, es muy buena.
while ( enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 0 )
{
}
Serial.println("Conectado a la red.");
enviarAT("AT+CGATT?", "OK", 2000); //Iniciamos la conexión GPRS
enviarAT("AT+CGATT=1\r", "OK", 2000); //Iniciamos la conexión GPRS
enviarAT("AT+CGCLASS?", "OK", 10000); //Iniciamos la conexión GPRS
enviarAT("AT+CSTT=\"web.emovil\",\"webemovil\",\"webemovil\"", "OK", 3000);
enviarAT("AT+CSTT=\"CMNET\"", "OK", 3000);
enviarAT("AT+CIICR", "OK", 3000); //Activamos la conexion inalambrica
enviarAT("AT+CIFSR", "", 4000); //Se obitene la direccion IP local
PeticionHttp();
}
//////////////////////////////////////////////////////////////////////////////
void PeticionHttp()
{
float humedad = dht.readHumidity();
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 6000) == 1) //Comprueba la conexion a la red
{
enviarAT("AT+CIPSTART=\"TCP\",\"184.106.153.149\",\"80\"", "CONNECT OK", 5000); //Inicia una conexión TCP
// Envíamos datos a través del TCP
sprintf(aux_str, "AT+CIPSEND=%d", strlen(direccion));
if (enviarAT(aux_str, ">", 20000) == 1)
{
enviarAT(direccion, "OK", 10000);
enviarAT("AT+CIPCLOSE", "OK", 10000);
enviarAT("AT+CIPSHUT\r", "OK", 10000);
delay(5000);
Serial.println("Concluido");
delay(5000);
}
}
else
{
Serial.println("Error en el envio");
}
}
}
Toda sugerencia es bienvenida y de antemano agradezco vuestra atención.
Saludes y quedo atento a vuestras observaciones....