ENVÍO DE DATOS A THINGSPEAK USANDO ESP32

INTRODUCCIÓN

En el mundo del Internet de las Cosas, hay que tener en cuenta un punto muy importante, como lo es la elección de la plataforma a la cual se enviarán los datos medidos. Existen muchísimas opciones en la web, y en esta oportunidad veremos la conexión a ThingSpeak, una plataforma SaaS para IoT definida para el envío y recepción de datos, desarrollada por la empresa The MathWorks. Se realizará un circuito sencillo, y con las credenciales necesarias, podremos hacer una conexión hacia ThingSpeak para enviar los datos de nuestro sensor DHT11, para medición de temperatura y humedad.

Las plataformas SaaS IoT ofrecen conectividad y funcionalidad de recopilación de datos en su núcleo. Si deseas conocer un poco más de este tipo de plataformas, puedes visitar este sitio: https://kryptonsolid.com/las-plataformas-saas-iot-impulsan-el-desarrollo-de-aplicaciones-iot/

MOMENTO DE REALIZAR NUESTRO CIRCUITO

Para la realización de este proyecto, vamos a necesitar los siguientes componentes:

  • ESP32 DevKit V1
  • Sensor de Temperatura y Humedad DHT11
  • Cable USB-Micro USB
  • Cables Jumper Male-Male
  • Protoboard

Ahora, procedemos a revisar el diagrama de PinOut del ESP32 DevKit v1 y del sensor DHT11 para realizar las conexiones.

  • ESP32 DevKit V1

  • Sensor DHT11 de Temperatura y Humedad
  • Entendido ya que pines poseen ambos componentes, realizamos el siguiente circuito.

    Procedemos a realizar las siguientes conexiones entre los dispositivos:

    ESP32 DEVKIT V1SENSOR DHT11
    PIN 3.3VVCC
    PIN GNDGND
    PIN DIGITAL 23DATA

    ANTES DE PROGRAMAR…

    Tenemos que tener instalado la librería para usar el sensor DHT11, y la librería para hacer la conexión hacia la plataforma ThingSpeak.

    Instalamos primero, la librería del sensor DHT11.

    Ahora, procedemos a instalar la librería de ThingSpeak a usar con el ESP32 DevKit.

    Como último paso previo, debemos ingresar a la plataforma ThingSpeak y debemos crearnos una cuenta; el enlace es el siguiente: https://thingspeak.com/login?skipSSOCheck=true ; en este caso, el Email a registrar puede ser de una cuenta educacional. El intervalo de envío de datos es de 15 segundos. Si se desea conocer más, puede visitar el siguiente enlace: https://thingspeak.com/prices/thingspeak_student

    Una vez creada la cuenta, procedemos a crear un canal nuevo, como se muestra en la imagen.

    Ahora, procederemos a llenar solo los campos de Nombre del Canal, y los Field que serán las variables a enviar desde nuestro microcontrolador.

    Una vez creado el canal, nos mostrará la interfaz a continuación. Ahora, nos movemos hacia el punto API Keys

    Una vez allí, copiamos el Channel ID y el Write API Key, que utilizaremos en nuestro código en el IDE de Arduino.

    REALIZAMOS NUESTRO CÓDIGO

    Para realizar la programación del microcontrolador, usaremos el Arduino IDE, por la facilidad y lo sencillo que es programar con dicho programa.

    El código a cargar en ESP32 DevKit es el siguiente:

    /*
     * El ejemplo de esta semana es una conexión hacia la plataforma ThingSpeak para proyectos 
     * de Internet de las Cosas (IoT)
     * Realizado por: Sebastian Carranza - Equipo TodoMaker
     * Propiedad y Derechos: Equipo TodoMaker
     * Para esta semana, necesitamos lo siguiente:
     * ESP32 Dev Kit
     * Sensor DHT11
     * Cables Jumper Male - Female
     * Cable USB a MicroUSB
     * Una red WiFi existente en nuestro hogar, lugar de trabajo, etc.
     * 
     * No habrá una conexión física con algún componente extra.
     */
    /*Incluimos primero las librerías*/
    #include <WiFi.h>
    #include <ThingSpeak.h>
    #include "DHT.h"
    /*Definimos que el Pin de Datos del sensor estará conectado al pin 2 del Arduino UNO*/
    #define DHTPIN  23      
    /*Definimos que el tipo de sensor que estamos utilizando es un DHT11*/
    #define DHTTYPE DHT11// DHT 11
    /*Se actualizan algunos parámetros del DHT11 con los puntos definidos anteriormente*/ 
    DHT dht(DHTPIN, DHTTYPE);
    /*Definimos como constantes Char las credenciales de acceso a la red WiFi*/
    const char* ssid="WIFI_SSID";
    const char* password="WIFI_PASSWORD";
    /*Definimos las credenciales para la conexión a la plataforma*/
    unsigned long channelID = CHANNEL_ID;
    const char* WriteAPIKey ="WRITE_API_KEY";
    /*Definimos el cliente WiFi que usaremos*/
    WiFiClient cliente;
    
    /*Iniciamos la función Setup()*/
    void setup() {
      /*Iniciamos el terminal Serial a una velocidad de 115200, junto a un retardo de 1 segundo*/
      Serial.begin(115200);
      delay(1000);
      /*Imprimimos una frase, e iniciamos nuestro sensor DHT*/
      Serial.println("Sensores Instalados y listos");
      dht.begin();
      /*Iniciamos la conexión a la red WiFi, y se imprimirán caracteres indicando el tiempo que tarda la conexión*/
      WiFi.begin(ssid,password);
      while(WiFi.status() != WL_CONNECTED){
        delay(500);
        Serial.print(".");
      }
      /*Una vez conextado, se imprimirá una frase y se iniciará la conexión a la Plataforma usando el cliente definido anteriormente*/
      Serial.println("Conectado al WiFi");
      ThingSpeak.begin(cliente);
      delay(5000);
    }
    
    /*Iniciamos la función Loop*/
    void loop() {
      /*Usamos un retardo de 5 segundos, y utilizamos la función Medición para la lectura de los sensores*/
      delay(5000);
      medicion();
      /*Hacemos la conexión y envío de datos a la plataforma, utilizando las credenciales definidas anteriormente*/
      ThingSpeak.writeFields(channelID,WriteAPIKey);
      /*Imprimimos una frase indicando el envío, y agregamos un retardo de 10 segundos*/
      Serial.println("Datos enviados a ThingSpeak!");
      delay(10000);
      
    }
    /*Definimos la función Medición*/
    void medicion(){
      /*Realizamos la lectura de Temperatura y Humedad del sensor*/
      float temperatura= dht.readTemperature();
      float humedad = dht.readHumidity();
      /*Imprimimos los valores obtenidos en el terminal Serial*/
      Serial.print("Temperatura registrada: ");
      Serial.print(temperatura);
      Serial.println("°C");
      Serial.print("Humedad registrada: ");
      Serial.print(humedad);
      Serial.println("%");
      Serial.println("-----------------------------------------");
      /*Indicamos el orden de envío por campos o Field, en el orden definido de la plataforma, junto a los valores del sensor*/
      ThingSpeak.setField(1,temperatura);
      ThingSpeak.setField(2,humedad);
    }

    La explicación del código se muestra a continuación:

    • Como primer paso (y muy importante, por cierto), debemos llamar a las librerías WiFi.h, ThingSpeak.h y DHT.h, instaladas en los incisos anteriores.
    /*Incluimos primero las librerías*/
    #include <WiFi.h>
    #include <ThingSpeak.h>
    #include "DHT.h"
    • Ahora definimos que el pin de Datos del sensor estará conectado al pin digital 23 del ESP32 DevKit V1, y que además, estamos usando el sensor DHT11.
    /*Definimos que el Pin de Datos del sensor estará conectado al pin 2 del Arduino UNO*/
    #define DHTPIN  23      
    /*Definimos que el tipo de sensor que estamos utilizando es un DHT11*/
    #define DHTTYPE DHT11// DHT 11
    /*Se actualizan algunos parámetros del DHT11 con los puntos definidos anteriormente*/ 
    DHT dht(DHTPIN, DHTTYPE);
    • Definimos como constantes char nuestras credenciales de la red WiFi a la cual se conectará la tarjeta ESP32 DevKit V1.
    /*Definimos como constantes Char las credenciales de acceso a la red WiFi*/
    const char* ssid="SSID_WIFI";
    const char* password="PASSWORD_WIFI";
    • Definimos las variables channelID y WriteAPIKey, para la conexión a la plataforma. Ambos los obtuvimos en el inciso anterior a la programación.
    /*Definimos las credenciales para la conexión a la plataforma*/
    unsigned long channelID = CHANNEL_ID;
    const char* WriteAPIKey="WRITE_API_KEY";
    • Se define además que el cliente WiFi el cual usaremos, se denominará “cliente”
    /*Definimos el cliente WiFi que usaremos*/
    WiFiClient cliente;
    • Iniciamos la función Setup; iniciamos el terminal Serial a una velocidad de 115200 junto a un retardo de 1 segundo.
    /*Iniciamos la función Setup()*/
    void setup() {
      /*Iniciamos el terminal Serial a una velocidad de 115200, junto a un retardo de 1 segundo*/
      Serial.begin(115200);
      delay(1000);
    • Pasamos a imprimir una frase e iniciamos nuestro sensor DHT11
      /*Imprimimos una frase, e iniciamos nuestro sensor DHT*/
      Serial.println("Sensores Instalados y listos");
      dht.begin();
    • Iniciamos la conexión a la red WiFi, y mientras esta se realiza, se mostrarán caracteres indicando la conexión.
      /*Iniciamos la conexión a la red WiFi, y se imprimirán caracteres indicando el tiempo que tarda la conexión*/
      WiFi.begin(ssid,password);
      while(WiFi.status() != WL_CONNECTED){
        delay(500);
        Serial.print(".");
      }
    • Realizado la conexión, se mostrará la frase “Conectado a WiFi”, y se iniciará la conexión a la plataforma usando el cliente WiFi definido líneas arriba, todo seguido de un retardo de 5 segundos.
      /*Una vez conextado, se imprimirá una frase y se iniciará la conexión a la Plataforma usando el cliente definido anteriormente*/
      Serial.println("Conectado al WiFi");
      ThingSpeak.begin(cliente);
      delay(5000);
    }
    • Iniciamos la función Loop(), seguido de un retardo de 5 segundos y utilizamos la función Medición para la lectura de los valores del sensor.
    /*Iniciamos la función Loop*/
    void loop() {
      /*Usamos un retardo de 5 segundos, y utilizamos la función Medición para la lectura de los sensores*/
      delay(5000);
      medicion();
    • Realizamos la conexión y envío de datos a la plataforma usando las credenciales definidas líneas arriba.
     /*Hacemos la conexión y envío de datos a la plataforma, utilizando las credenciales definidas anteriormente*/
      ThingSpeak.writeFields(channelID,WriteAPIKey);
    • Imprimimos una frase indicando el envío, y agregamos un retardo de 10 segundos.
      /*Imprimimos una frase indicando el envío, y agregamos un retardo de 10 segundos*/
      Serial.println("Datos enviados a ThingSpeak!");
      delay(10000);  
    }
    • Procedemos a indicar lo que se realiza en la función medicion(), donde se procede a hacer la lectura de Temperatura y Humedad del sensor.
    /*Definimos la función Medición*/
    void medicion(){
      /*Realizamos la lectura de Temperatura y Humedad del sensor*/
      float temperatura= dht.readTemperature();
      float humedad = dht.readHumidity();
    • Imprimimos los valores obtenidos en el terminal Serial.
    /*Imprimimos los valores obtenidos en el terminal Serial*/
      Serial.print("Temperatura registrada: ");
      Serial.print(temperatura);
      Serial.println("°C");
      Serial.print("Humedad registrada: ");
      Serial.print(humedad);
      Serial.println("%");
      Serial.println("-----------------------------------------");
    • Indicamos el orden de los campos / Field, como lo realizamos al momento de crear el canal en la plataforma, junto a las variables del sensor.
     /*Indicamos el orden de envío por campos o Field, en el orden definido de la plataforma, junto a los valores del sensor*/
      ThingSpeak.setField(1,temperatura);
      ThingSpeak.setField(2,humedad);
    }

    HORA DE PROBAR EL CIRCUITO

    Se muestra a continuación imágenes del código en el IDE de Arduino, como del circuito realizado.

    HORA DE EJECUTAR EL PROYECTO

    Una vez hecho el circuito y subido nuestro código, obtendremos los siguientes resultados.

    CONCLUSIONES

    Una vez finalizado el ejercicio y con el envío de datos realizándose de forma continua, podemos llegar a la conclusión de que el envío de datos a las plataformas de Internet de las Cosas, es un ejercicio bastante interesante y práctico, por lo que a manera de que vayamos realizando más ejercicios y el uso constante de plataformas, el panorama para proyectos se ampliará y tendremos mucho más experiencia al momento de decidir por la plataforma a utilizar al momento de desarrollar un MVP, un ejercicio, etc.

    Te invitamos a tomar el curso de Introducción al ESP32: Introducción al ESP32 | TodoMaker’s School

    Previous Post
    Next Post

    Comments

    Tehnif Software

    Great content! Keep up the good work!