Para subir datos a una plataforma, debemos buscar una que nos permite subir nuestros datos en el tiempo que necesitemos. Usaremos Thingspeak ya que permite subidas cada 15 segundos:
- En primer lugar, nos hacemos una cuenta en Thingspeak - https://thingspeak.com/
Rellenamos los datos y verificamos en el correo. Nos preguntaran por el uso que le daremos y seleccionaremos “Uso de Estudiante”.
Nos saldrá el apartado my Channels en blanco, debemos darle a New Channel para crear un canal donde se almacenarán los datos subidos por nuestro dispositivo IoT.
Rellenamos el apartado: Name→ Nombre del dispositivo IoT Description→ Descripción de lo que se va a medir
y ahora, crearemos los datos que subiremos en Field:
Field 1→ Luminosidad Field 2→ Valor analogico Field 3→ Valor Digital
Si queremos, podemos introducir las coordenadas GPS con ayuda del google map para que aparezca un mapa con nuestra ubicación.
Después, debemos darle a Sharing para elegir si queremos que nuestros datos sean privados, públicos o solo compartidos con un par de personas. Nosotros elegimos pública. Y ya está, eso es todo. Ya tenemos la página preparada para subir los datos.
Temperatura
Sensor Tensión
Luminosidad
Humedad
Subir datos del IoT a ThingSpeak: https://thingspeak.com/channels/public?tag=ieslafuensanta
Ahora, vamos al entorno de programacion de arduino: - En primer lugar, debemos copiar:
#include <ESP8266WiFi.h> #include <Wire.h>
- Debemos buscar en el gestor biblioteca: - ESP8266WiFi.h (Se instala las 2 primeras) - Wire.h (Se instala las que se llamen Wire) en “Herramientas/Gestionar librerías”:
Si no se encuentra las librerias que queremos, podemos buscarlas por internet y meterlas manualmente en /Este equipo/Documentos/Arduino/libraries.
- Una vez instaladas, copiaremos lo siguiente en arduino:
String apiKey = "V9Q3C4F92OMP83DP"; //Pegamos la ApiKey del ThingSpeck
- En “String apiKey” Pondremos nuestra apiKey que nos dio la pagina Thingspeak
//Credenciales para conectarse al WiFi const char* ssid = "TP-LINK_Calderon"; const char* password = "*********"; const char* server = "api.thingspeak.com"; WiFiClient client;
- Y en: const char* ssid = "TP-LINK_Calderon"; const char* password = "c@lderon14";
Pondremos el WiFi con el que tengamos acceso a internet en ssid y la contraseña en password
- En const char* server = "api.thingspeak.com"; Ponemos la dirección de la página de Thingspeak
- Después copiamos en void setup:
Serial.println(); // Serial.println(); // Serial.print("Conectando a "); // Serial.println(ssid); //
WiFi.begin(ssid, password); //
while (WiFi.status() != WL_CONNECTED) { // delay(500); // Serial.print("."); // //Fin de la conexion WiFi // } Serial.println(""); // Serial.println("WiFi Conectado"); // Serial.println("Direccion IP: "); // Serial.println(WiFi.localIP()); //
- Eso hará que mientras no esté conectado a la red WiFi, en el puerto serie se escriba un “.” y cuando se conecte, se mandará un “Conectado” Seguido de la dirección IP
- Ahora, tenemos que calcular la Luminosidad en %. Nos iremos al bloque Void Loop
Se puede sacar con una regla de tres:
//Luminosidad
lum0=((val*100)/1024); //El valor esta al contrario lum1=100-lum0; // Se hace esto para que muestre el valor de luz
Otra opción es:
//Opción 2 cálculo de la luminosidad
// if(val >= 1000){ // Serial.println(" 0% de luz"); // luminosidad=0; // } // else if((val >= 800) & (val < 1000)){ // Serial.println(" 20% de luz"); // luminosidad=20; // } // else if((val >= 600) & (val < 800)){ // Serial.println(" 40% de luz"); // luminosidad=40; // } // else if((val >= 400) & (val < 600)){ // Serial.println(" 60% de luz"); // luminosidad=60; // } // else if((val >= 200) & (val < 400)){ // Serial.println(" 80% de luz"); // luminosidad=80; // } // else{ // Serial.println(" 100% de luz"); // luminosidad=100; //}
-Añadimos este código para que lo muestre en el puerto serial.
Serial.print ("Luminosidad "); Serial.print(lum1); //Luminosidad Serial.println("%");
- Por último, declaramos que datos son los que se subirán
//Subir datos if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com String postStr = apiKey; postStr +="&field1="; postStr += String(lum1); // Luminosidad
postStr +="&field2="; postStr += String(voltios1); //Valor analogico ); //Valor analogico postStr +="&field3="; postStr += String(val); // Valor digital 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);
En el código vemos : postStr +="&field1=";
Eso hace referencia a los field que hicimos en nuestro channel del thingspeak
- Por último añadimos una espera de 15 segundo para no saturar la página
Serial.println("Esperando..."); delay(15000);
- Comprobamos en el monitor serie que todo es correcto: