viernes, 1 de mayo de 2015

Proyecto Arduino y wifi ESP8266

En este artículo después de ver cómo conectar en artículos anteriores el módulo electrónicamente y ver cómo funciona la plataforma thingspeak, vamos a ver cómo hacer un programa que con el hardware diseñado en otros post, se conecte a la plataforma en la nube y muestre nuestros valores.





Lo primero de todo necesitamos tener el siguiente hardware para hacer funcionar el ESP8266, esto ya lo comentamos en el primer artículo que realizamos:


Recordar que antes de subirle el programa deberemos subir al arduino el primer programa que realizamos en el primer artículo, y autentificarnos en la wifi por medio de los comandos que expliqué en ese artículo.

Ahora nos queda hacer la parte del programa que tiene que hacer lo siguiente:



1.- AT+RST        RESETEAMOS EL MODULO ESPERAMOS ready

2.- AT+CIPSTART="TCP","184.106.153.149",80            esperamos Linked

3.- AT+CIPSEND=51        Esperamos el carácter >

4.- GET /update?api_key=NUESTRA KEY&field1=100         esperamos +IPD (100 es el Dato)

5.- AT+CIPCLOSE


Paso a describir los comandos básicos más importantes:

2.- Es un comando para conectar a la dirección ip de thingspeak, cuando conecta nos da linked.

3.- En este comando indicamos la longitud de cadena de la linea de abajo, para poder enviar correctamente el comando numero 4

4.- Enviamos el valor por get al servidor con nuestra key que nos han asignado en thingspeak, lo explico en un artículo anterior, y el field 1 es la variable dónde le decimos que valor vamos a darle

Otro dato a tener en cuenta es que en thingspeak tenemos que esperar 15 segundos entre cada vez que queramos actualizar los datos.

Para finalizar os dejo un programa ejemplo, recordar que previamente habéis tenido que autentificaros en la red wifi.

El programa básicamente lo que hace es enviar a nuestro servidor el dato 125, y lo intenta hasta que la subida es satisfactoria luego entra en un bucle de while y se queda ahí.



#include <SoftwareSerial.h>
#include <stdlib.h>
SoftwareSerial WIFI(7, 6); // RX | TX

String apikey = "XXXXXXXXXXXX"; //Nuestra key de thingspeak

void setup()
  {  
     Serial.begin(9600);
     WIFI.begin(9600);  
     WIFI.println("AT+RST");
     delay(5000);
  }
int subiraservidor()
  {
    String comando = "AT+CIPSTART=\"TCP\",\"";
    comando += "184.106.153.149"; // api.thingspeak.com
    comando += "\",80";  //puerto
    WIFI.println(comando);
    Serial.println(comando);
  
    if(WIFI.find("Error"))
    {
      Serial.println("Error al conectar con el servidor");
      return 1;
    }
 
 
    String cadena = "GET /update?api_key=";
    cadena += apikey;
    cadena +="&field1=";
    cadena += 125; //Ponemos valor lectura del sensor(esto debería ser dinámico)
    cadena += "\r\n\r\n";
  
  
    comando = "AT+CIPSEND=";
    comando += String(cadena.length());
    WIFI.println(comando);

 
    if(WIFI.find(">"))
    {
      WIFI.print(cadena);
      Serial.println("ENVIADO");
      if(WIFI.find("+IPD")){
      Serial.println("Recibido confirmacion de subida.");
      return 0;
    }

  }
  else
    {
      WIFI.println("AT+CIPCLOSE");
      Serial.println("Error al enviar get");
      return 1;
    } 
    
  }
  
  
void loop()
  {  
  while(subiraservidor());
  Serial.println("PARAMOS");
  while(1);
  }



Espero que os sea útil, nos vemos en el siguiente artículo.

No hay comentarios:

Publicar un comentario