Panel de control IoT en Arduino

El Internet de las cosas o (IoT) se refiere a la automatización de dispositivos interconectados, que son capaces de comunicarse entre sí a través de la red. Un ejemplo de un sistema IoT puede incluir sensores, dispositivos móviles, CCTV, trenes o incluso tu cafetera. Es posible realizar un panel de control IoT en Arduino de forma sencilla.

La forma más fácil de practicar IoT con Arduino, es a través del servicio web llamado Adafruit IO, que es una plataforma web gratuita de IoT creada por Adafruit Industries.

Adafruit brinda un panel de control para todo tipo de dispositivos, incluidos sensores integrados en una plataforma Arduino.

Con Adafruit IO, puedes utilizar gráficos y tablas para mostrar los datos recopilador, así como botones e interruptores para activar funciones particulares en su dispositivo.

Adafruit IO ofrece varias bibliotecas bien documentadas que puedes usar para facilitar la programación.

Las siguientes funciones son posible a través de la plataforma:

  • Visualización en línea y en tiempo real de datos.
  • Acceso a la interfaz desde cualquier lugar a través de Internet.
  • Puedes conectar tu proyecto a otros servicios web y otros dispositivos habilitados para Internet.

Proyecto de panel de control IoT en Arduino

En este proyecto usaremos el servicio de Adafruit IO y una placa Arduino Uno para mostrar los datos recopilados por un sensor de temperatura y humedad DHT22.

Para iniciar con el proyecto, primero es necesario configurar el servicio Adafruit IO.

Configuración de E/S de Adafruit

Sino te has registrado en la plataforma, primero ve al sitio web de Adafruit IO y cree una cuenta nueva.

Una vez creada, ingresa a tu cuenta y va a la página de inicio. luego crear un nuevo tablero:

Dale nombre al nuevo tablero y escribe una breve descripción, finalmente presiona Crear.

 

Ell botón azul en el lado derecho del tablero, permite crear bloques.

Los bloques del nuevo tablero serán los interruptores, botones, palancas, indicadores y todo tipo de elementos que permitan visualizar nuevos datos.

Para el proyecto de este artículo, se creará un bloque de gráfico de líneas, dos bloques indicadores para mostrar la temperatura y la humedad de la habitación y dos botones para controlar un relé.

Después de seleccionar un bloque, Adafruit te pide que elijas una secuencia.

Necesitamos dos fuentes de alimentación para mantener los valores de temperatura y humedad del sensor DHT. Cree un flujo usando el botón Crear a la derecha.

Luego configura los ajustes de bloqueo como lo desees.

Haz lo mismo con los botones de relé para que puedas controlar y monitorear ambos datos simultáneamente.

Para completar los bloques de datos, necesitará su nombre de usuario y clave, puedes obtener ambas en la página de inicio y luego haciendo clic en Clave de E/S de Adafruit.

Aparecerá una ventana que muestra su nombre de usuario y clave. Toma papel y lápiz y anótalos.

Instalación de la biblioteca IO de Adafruit en Arduino

Para instalar la biblioteca IO de Adafruit, ve a Library Manager y busca «Adafruit IO Arduino».

Selecciona la última versión y luego haz click en Instalar.

El programa te pedirá que instales otras bibliotecas que Adafruit IO Arduino necesita para funcionar correctamente.

También asegúrese de actualizar la biblioteca de su placa ESP8266. Las versiones anteriores de la tabla informan errores al descargar el código.

Montaje físico del proyecto

El diagrama siguiente describe el montaje del proyecto:

 

Código para el panel de control IoT en Arduino

#include "SerialTransfer.h"
#include <DHT.h>

#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float t,h;

SerialTransfer myTransfer;

void setup()
{
  Serial.begin(115200);
  dht.begin();
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
}

void loop()
{
  t = dht.readTemperature();
  h = dht.readHumidity();  

  myTransfer.txObj(status, sizeof
  myTransfer.sendData(sizeof
  myTransfer.txObj(status, sizeof(h));
  myTransfer.sendData(sizeof(h));
  delay(5000);
  if(myTransfer.available())
  {
    digitalWrite(7, relay1status == "ON" ? HIGH : LOW);
    digitalWrite(8, relay2status == "ON" ? HIGH : LOW);
  }
}

Código para el módulo ESP8266

#include <ESP8266WiFi.h> 
#include "AdafruitIO_WiFi.h"
#include "SerialTransfer.h"

SerialTransfer myTransfer;

#define WIFI_SSID "Wifi Name"
#define WIFI_PASS "WiFi Password"

#define IO_USERNAME "Your username"
#define IO_KEY "Your key"

AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
 
AdafruitIO_Feed *temperatureFeed = io.feed("Temperature CB");
AdafruitIO_Feed *humidityFeed = io.feed("Humidity CB");
AdafruitIO_Feed *relay1feed = io.feed("Relay Channel 1");
AdafruitIO_Feed *relay2feed = io.feed("Relay Channel 2");

void setup() 
{
  Serial.begin(115200);
  io.connect();
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  relay1feed->onMessage(relay1control);
  relay2feed->onMessage(relay2control);
  relay1feed->get();
  relay2feed->get();
  myTransfer.begin(Serial);
}

void loop() 
{
  if(myTransfer.available())
  {
    float t,h;
    myTransfer.rxObj(t, sizeof
    myTransfer.rxObj(h, sizeof(h));
    temperatureFeed->save
    delay(100);
    humidityFeed->save(h);
  }
}  
void relay1control(AdafruitIO_Data *data) 
{
   String relay1status = data->toString(); 
   Serial.print("Relay 1 is ");  Serial.println(relay1status);
   myTransfer.txObj(relay1status, sizeof(relay1status));
   myTransfer.sendData(sizeof(relay1status));
}
void relay2control(AdafruitIO_Data *data) 
{
   String relay2status = data->toString(); 
   Serial.print("Relay 2 is ");  Serial.println(relay2status);
   myTransfer.txObj(relay2status, sizeof(relay2status));
   myTransfer.sendData(sizeof(relay2status));
}

Código para NodeMCU

#include <ESP8266WiFi.h>
#include "AdafruitIO_WiFi.h"
#include <DHT.h>

#define DHTPin D5
#define DHTType DHT22
DHT dht(DHTPin, DHTType);
 
#define WIFI_SSID "wifi name"
#define WIFI_PASS "wifi password"

#define IO_USERNAME "your username"
#define IO_KEY "your key"

AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
 
AdafruitIO_Feed *temperatureFeed = io.feed("Temperature CB");
AdafruitIO_Feed *humidityFeed = io.feed("Humidity CB");
AdafruitIO_Feed *relay1feed = io.feed("Relay Channel 1");
AdafruitIO_Feed *relay2feed = io.feed("Relay Channel 2");

void setup() 
{ 
  Serial.begin(115200);
  io.connect();
  dht.begin();

  pinMode(D7, OUTPUT);
  pinMode(D8, OUTPUT);

  while(io.status() < AIO_CONNECTED) 
  {
    Serial.print(".");
    delay(500);
  }

  relay1feed->onMessage(relay1control);
  relay2feed->onMessage(relay2control);
  relay1feed->get();
  relay2feed->get();
}
 
void loop() 
{
  io.run();
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  temperatureFeed->save
  delay(100);
  humidityFeed->save(h);
 
  delay(5000);
}

void relay1control(AdafruitIO_Data *data) 
{
   String relay1status = data->toString(); 
   Serial.print("Relay 1 is ");  Serial.println(relay1status);
   digitalWrite(D7, relay1status == "ON" ? HIGH : LOW);
}
void relay2control(AdafruitIO_Data *data) 
{
   String relay2status = data->toString(); 
   Serial.print("Relay 2 is ");  Serial.println(relay2status);
   digitalWrite(D8, relay2status == "ON" ? HIGH : LOW);
}

Se usa la librería SerialTransfer.h para enviar datos desde los sensores conectados al Arduino UNO al módulo ESP y viceversa.

Aquí están las líneas importantes que usamos de la la librería:

  • SerialTransfer myTransfer – Cree una instancia de transferencia en serie llamada mytransfer.
  • myTransfer.begin(Serial) – inicia la comunicación en serie utilizando la tasa de baudios en serie.
  • myTransfer.txObj(status, sizeof(status)) – Crear un objeto especialmente diseñado para el estado.
  • myTransfer.sendData(sizeof(status)) – Envía el estado a un paquete adaptado a su tamaño.
  • myTransfer.rxObj(status, sizeof(status)) – recibe el estado del remitente.

 

Tu Arduino llenará el tablero tan pronto como se conecte al servidor Adafruit IO.

Dejé que el dispositivo envíe datos durante unos 15 minutos y luego presioné el botón del canal 1 del relé.

En la siguiente imagen verás la diferencia entre el panel creado con Adafruit y el monitor serial de Arduino:

Esperamos que este pequeño tutorial te haya mostrado como construir un panel de control IoT en Arduino.

Deja un comentario

programar en arduino logo

En este sitio aprenderas a programar en Arduino de forma gratuita a través de sencillos tutoriales y distintos proyectos.