domingo, 11 de junio de 2017

Tutorial #3 – Enviar Temperatura a ThingSpeak con ESP8266 (NodeMCU)

En este tutorial vamos a ver una aplicación de de IOT (internet de las cosas), cómo enviar la temperatura que mide un sensor LM35 a ThingSpeak.com usando un ESP8266 (NodeMCU)




Código Fuente:

#include <ESP8266WiFi.h>

//-------------------VARIABLES GLOBALES--------------------------
int contconexion = 0;

const char *ssid = "----";
const char *password = "----";

unsigned long previousMillis = 0;

const char* server = "184.106.153.149";
String apiKey ="1Q2DYZ62GG1CE03K";

//----Función para Enviar Datos a Thingspeak----

void enviarTempTS(float temp)
{  
   WiFiClient client;
  
   if (client.connect(server, 80)) { // usar 184.106.153.149 ó api.thingspeak.com
   Serial.println("WiFi Client connected ");
   
   String postStr = apiKey;
   postStr += "&field1=";
   postStr += String(temp);
   postStr += "\r\n\r\n";
   
   client.print("POST /update HTTP/1.1\n");
   client.print("Host: api.thingspeak.com\n");
   client.print("Connection: close\n");
   client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
   client.print("Content-Type: application/x-www-form-urlencoded\n");
   client.print("Content-Length: ");
   client.print(postStr.length());
   client.print("\n\n");
   client.print(postStr);
   delay(1000);
   
   }
 client.stop();
}

//-------------------------------------------------------------------------

void setup() {

  // Inicia Serial
  Serial.begin(115200);
  Serial.println("");

  // Conexión WIFI
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { //Cuenta hasta 50 si no se puede conectar lo cancela
    ++contconexion;
    delay(500);
    Serial.print(".");
  }
  if (contconexion <50) {
      //para usar con ip fija
      IPAddress ip(192,168,1,156); 
      IPAddress gateway(192,168,1,1); 
      IPAddress subnet(255,255,255,0); 
      WiFi.config(ip, gateway, subnet); 
      
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
  }
}

//--------------------------LOOP--------------------------------
void loop() {

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 5000) { //envia la temperatura cada 5 segundos
    previousMillis = currentMillis;
    int analog = analogRead(17);
    float temp = analog*0.322265625;
    enviarTempTS(temp);
  }
}

9 comentarios:

  1. Hola Alejandro Alomar, he estado viendo sus tutoriales, soy neófito en todo esto de Arduino y NodeMCU, pero con sus explicaciones tan fáciles de asimilar he comprendido DEMASIADO sobre NodeMCu, solo una pregunta, he seguido este video al pie de la letra (al giual el código - copiar y pegar) pero en thigspeak no me sale como si estubiera leyendo temperatura,es decir los grados centigrados del sensor, simplemente son lecturas desde 1 en adelante... si es tan amable me podria explicar que falta para que salga como esta el suyo... GRACIAS...

    ResponderEliminar
    Respuestas
    1. Se nota que copiaste y pegaste, jaja, porque se actualizaron los datos en mi página. Lo que comentás probablemente sea un problema de hardware. Primero agregale una línea para que te imprima la temperatura por la terminal serial así descartamos otras cosas. Después de enviarTempTS(temp); poné: Serial.println (temp);

      Eliminar
  2. Hola Ale, muchas gracias por compartir tus tutoriales como estudiante de ingeniería informática me han sido de mucha ayuda. Te hago una pregunta como podría hacer para exportar los datos que se muestran en ThingSpeak a una app Android? Es decir como puedo recibir los datos en Android Studio para a partir de éstos realizar acciones en mi app. Gracias desde ya!

    ResponderEliminar
    Respuestas
    1. ThingSpeak te da un iframe para ver los datos de la página (tal cual lo tengo hecho en esta entrada del blog), a lo mejor podés hacer un WebView en Android Studio y de ahí tomar los datos. Saludos.

      Eliminar
  3. Hola que tal, soy muy nuevo en eso del esp8266 (NodeMCU) segui tus pasos tal cual, solo que en vez de mandar el valor de la temperatura mando un valor fijo solo para comprobar si hay conexion a thingspeak, en el monitor serial si se ve cada 6 segundos el valor que mando pero en la grafica no me aparece nada. Me podrias apoyar? Gracias.

    ResponderEliminar
  4. GRACIAS POR EL APORTE: SALUDOS DESDE LIMA

    ResponderEliminar
  5. me gustaria saber si podria explicarme como enviar datos almacenados en thinkspeak hacia mi correo

    ResponderEliminar
  6. gracias, soy Brasileiro.. estudante de ENGENHARIA MECÂNICA... parabéns... very good

    ResponderEliminar