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);
  }
}

2 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