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
Entendido ya que pines poseen ambos componentes, realizamos el siguiente circuito.
Procedemos a realizar las siguientes conexiones entre los dispositivos:
ESP32 DEVKIT V1 | SENSOR DHT11 |
PIN 3.3V | VCC |
PIN GND | GND |
PIN DIGITAL 23 | DATA |
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
Great content! Keep up the good work!