Actividad 4: Transmisión de datos con ThingSpeak

Actividad 4: 


Transmisión de datos con ThingSpeak

Para realizar esta actividad, utilizaremos la plataforma de ioT ThingSpeak que ya hemos visto con anterioridad, ya que nos permite recopilar, analizar y visualizar datos de sensores en tiempo real, así como automatizar algunas acciones en función de condiciones predefinidas.

De esta manera, crearemos gráficos en tiempo real, para poder visualizar con precisión la variación de los datos obtenidos por los sensores.

                        Recuerda que, para realizar esta actividad, debes crearte una cuenta que puedes utilizar gratuitamente
                        desde el siguiente enlace:

                        Crea un nuevo canal y define los campos que almacenarás. Por ejemplo:

                      1. Field 1: Sensor de lluvia.
                      2. Field 2: Humedad del suelo.
                      3. Field 3: Sensor de luz.
                      4. Field 4: Temperatura.
                      5. Field 5: Humedad del aire.
                      6. Dirígete a la pestaña "API Keys" dentro del canal creado, y copia la "Write API Key", la cual necesitaremos
                        para vincular nuestro kit de riego con ThingSpeak.

                        // API Key de ThingSpeak (reemplaza VYMTXLTC8LG8074J por tu "Write API key")
                        String apiKey = "VYMTXLTC8LG8074J";
                        Puedes establecer un envío de datos para graficarlos cada cierto tiempo (mínimo 15 segundos).

                              static unsigned long previousMillis = 0;
                              const long interval = 15000;
                              unsigned long currentMillis = millis();

                        Además, recuerda establecer a qué gráfica corresponde cada uno de los datos.

                              HTTPClient http;
                              String url = "http://api.thingspeak.com/update?api_key=" + apiKey;
                              url += "&field1=" + String(lecturaLluvia);
                              url += "&field2=" + String(lecturaHumedadSuelo);
                              url += "&field3=" + String(lecturaLuz);
                              url += "&field4=" + String(lecturaTemperatura);
                              url += "&field5=" + String(lecturaHumedad);
                             
                              http.begin(url);
                             
                              http.end();

                         

                         

                        A continuación, se muestra cómo queda la página web y las gráficas en tiempo real creadas en ThingSpeak, que han sida diseñadas con este código:




                                                           

                                                           

                                                          Puedes ver y/o descargar el código completo en el siguiente bloque desplegable:

                                                          /**
                                                           * Servidor Web ESP32 básico con conexión con ThingSpeak.
                                                           *
                                                           * Se crea una interfaz web con estilo básico para visualizar datos de sensores
                                                           * (lluvia, humedad del suelo, luz, temperatura y humedad), así como se muestran
                                                           * gráficas en ThingSpeak con la variación de los datos captados con los sensores.
                                                           */

                                                          #include <WiFi.h>
                                                          #include <HTTPClient.h>
                                                          #include <DHT.h>

                                                          // Configuración de WiFi
                                                          const char* ssid = "NOMBREDEMIWIFI"; const char* password = "CLAVEDEMIWIFI";

                                                          // Configuración del Servidor Web y del sensor DHT
                                                          WiFiServer server(80);
                                                          DHT sensorDHT(17, DHT22);

                                                          // Pines para relé y sensores analógicos
                                                          const int rele = 4;
                                                          const int sensorLluvia = 32;
                                                          const int sensorHumedadSuelo = 33;
                                                          const int sensorLuz = 34;

                                                          // Contador de conexión WiFi y variable para el HTTP header
                                                          int contconexion = 0;
                                                          String header;

                                                          // API Key de ThingSpeak (reemplaza VYMTXLTC8LG8074J por tu "Write API key")
                                                          String apiKey = "VYMTXLTC8LG8074J";
                                                          //declaramos la función para clear la página web
                                                          String crearPaginaWeb(int lecturaLluviaint lecturaHumedadSueloint lecturaLuzfloat lecturaTemperaturafloat lecturaHumedad);

                                                          void setup() {
                                                            Serial.begin(115200);
                                                            pinMode(sensorLluvia, INPUT);
                                                            pinMode(sensorHumedadSuelo, INPUT);
                                                            pinMode(sensorLuz, INPUT);
                                                            pinMode(rele, OUTPUT);
                                                            digitalWrite(rele, LOW);
                                                            sensorDHT.begin();
                                                            
                                                            WiFi.begin(ssid, password);
                                                            Serial.print("Conectando a WiFi");
                                                            while (WiFi.status() != WL_CONNECTED && contconexion < 50) {
                                                              contconexion++;
                                                              delay(500);
                                                              Serial.print(".");
                                                            }
                                                            if (WiFi.status() == WL_CONNECTED) {
                                                              Serial.println("\nWiFi conectado");
                                                              Serial.println("IP: " + WiFi.localIP().toString());
                                                              server.begin();
                                                            } else {
                                                              Serial.println("\nError de conexión al WiFi");


                                                            }
                                                          }

                                                          String crearPaginaWeb(int lecturaLluviaint lecturaHumedadSueloint lecturaLuzfloat lecturaTemperaturafloat lecturaHumedad) {
                                                            // Aquí va la implementación completa de la función, por ejemplo:
                                                            String pagina = "<!DOCTYPE html><html><head><meta charset='utf-8'><title>Sistema de Riego Inteligente</title></head><body>";
                                                            pagina += "<h1>Datos del Sistema</h1>";
                                                            pagina += "<p>Lluvia: " + String(lecturaLluvia) + "%</p>";
                                                            pagina += "<p>Humedad del Suelo: " + String(lecturaHumedadSuelo) + "%</p>";
                                                            pagina += "<p>Luz: " + String(lecturaLuz) + "%</p>";
                                                            pagina += "<p>Temperatura: " + String(lecturaTemperatura) + "ºC</p>";
                                                            pagina += "<p>Humedad: " + String(lecturaHumedad) + "%</p>";
                                                            pagina += "</body></html>";
                                                            return pagina;
                                                          }

                                                          void loop() {
                                                            // Enviar datos a ThingSpeak cada 15 segundos (mínimo permitido)
                                                            static unsigned long previousMillis = 0;
                                                            const long interval = 15000;
                                                            unsigned long currentMillis = millis();

                                                            // Leer sensores
                                                              int lecturaLluvia = map(analogRead(sensorLluvia)040951000);
                                                              int lecturaHumedadSuelo = map(analogRead(sensorHumedadSuelo)040951000);
                                                              int lecturaLuz = map(analogRead(sensorLuz)040951000);
                                                              float lecturaTemperatura = sensorDHT.readTemperature();
                                                              float lecturaHumedad = sensorDHT.readHumidity();
                                                            
                                                            if (currentMillis - previousMillis >= interval) {
                                                              previousMillis = currentMillis;
                                                              
                                                              

                                                              // Enviar datos a ThingSpeak
                                                              if(WiFi.status() == WL_CONNECTED) {
                                                                HTTPClient http;
                                                                String url = "http://api.thingspeak.com/update?api_key=" + apiKey;
                                                                url += "&field1=" + String(lecturaLluvia);
                                                                url += "&field2=" + String(lecturaHumedadSuelo);
                                                                url += "&field3=" + String(lecturaLuz);
                                                                url += "&field4=" + String(lecturaTemperatura);
                                                                url += "&field5=" + String(lecturaHumedad);
                                                                
                                                                http.begin(url);
                                                                int httpResponseCode = http.GET();
                                                                if(httpResponseCode > 0){
                                                                  Serial.print("Datos enviados a ThingSpeak, código: ");
                                                                  Serial.println(httpResponseCode);
                                                                } else {
                                                                  Serial.print("Error al enviar a ThingSpeak: ");
                                                                  Serial.println(httpResponseCode);
                                                                }
                                                                http.end();
                                                              }
                                                            }

                                                            // Aquí sigue el código para la funcionalidad del servidor web, control de relé y generación de la página web
                                                            // ...
                                                            
                                                            // (Mantener la funcionalidad original de lectura y respuesta HTTP)
                                                            WiFiClient client = server.available();
                                                            if (client) {
                                                              Serial.println("Nuevo Cliente.");
                                                              String currentLine = "";
                                                              while (client.connected()) {
                                                                if (client.available()) {
                                                                  char c = client.read();
                                                                  Serial.write(c);
                                                                  header += c;
                                                                  if (c == '\n') {
                                                                    if (currentLine.length() == 0) {
                                                                      client.println("HTTP/1.1 200 OK");
                                                                      client.println("Content-type:text/html");
                                                                      client.println("Connection: close");
                                                                      client.println();
                                                                      if (header.indexOf("GET /on") >= 0) {
                                                                        Serial.println("Relé Encendido");
                                                                        digitalWrite(rele, HIGH);
                                                                      } else if (header.indexOf("GET /off") >= 0) {
                                                                        Serial.println("Relé Apagado");
                                                                        digitalWrite(rele, LOW);
                                                                      }
                                                                      // Generar y enviar la página web (incluye diseño en tonos azules y alertas)
                                                           
                                                                      String paginaWeb = crearPaginaWeb(lecturaLluvia, lecturaHumedadSuelo, lecturaLuz, lecturaTemperatura, lecturaHumedad);
                                                                      client.println(paginaWeb);
                                                                      client.println();
                                                                      break;
                                                                    } else {
                                                                      currentLine = "";
                                                                    }
                                                                  } else if (c != '\r') {
                                                                    currentLine += c;
                                                                  }
                                                                }
                                                              }
                                                              header = "";
                                                              client.stop();
                                                              Serial.println("Cliente desconectado.");
                                                              Serial.println("");
                                                            }
                                                          }


                                                          Pincha en el siguiente icono para descargar este código:



                                                          Has Terminado, ¡Bien hecho!

                                                          100% Completado
                                                          Vistas
                                                          1 Número de vistas
                                                          1 Vistas de miembros
                                                          0 Vistas públicas
                                                          Acciones
                                                          0 Gustos
                                                          0 No me gusta
                                                          0 Comentarios
                                                          Compartir en redes sociales
                                                          Compartir enlace
                                                          Compartir por correo

                                                          Por favor iniciar sesión para compartir esto webpage por correo.