El núcleo ESP8266 y el módulo Wi-Fi (xChip CW01) permiten a los usuarios enviar datos de los xChips modulares de XinaBox a la nube. Estos datos se pueden monitorear de forma remota en Ubidots, donde los usuarios pueden aprovechar su gama de herramientas de IoT.
El sensor avanzado de clima xChip SW01 (Bosch BME280) mide la temperatura, la humedad y la presión atmosférica, a partir de los cuales también se puede calcular la altitud, la base de las nubes y el punto de rocío.
En este tutorial utilizamos el protocolo HTTP para enviar datos del sensor a Ubidots. Esto también se podría hacer utilizando el protocolo MQTT.
Al final de esta guía, podrás monitorear y medir las condiciones climáticas en tu dispositivo XinaBox desde cualquier lugar de forma remota utilizando Ubidots.
Requisitos
Pasos a Paso
Configuración de Hardware
Configurando el Arduino IDE
Entendiendo el código
Iniciar sesión en Ubidots
Crear Dashboards en Ubidots
Resumen
1. Configuración de Hardware
Conecta CW01, SW01 e IP01 juntos utilizando los conectores XC10 xBUS. Puedes conectarlo como se muestra en el diagrama a continuación. Por favor, consulta esta guía sobre cómo ensamblar xChips en general.
Luego, conecta tu dispositivo y PC a través del USB de IP01. Para esto, necesitarás usar el software xFlasher para cargar el código una vez que esté listo. Consulta esta guía sobre cómo usar el xFlasher.
2. Configurando el Arduino IDE
1. Instala Arduino IDE 1.8.8
2. Instala estas bibliotecas en Arduino: ESP8266 Arduino, Ubidots ESP8266, xCore, xSW01.
NOTA: Si no estás familiarizado con cómo instalar bibliotecas, por favor consulta el siguiente enlace: Instalando bibliotecas de Arduino
3. Con la plataforma ESP8266 instalada, selecciona el dispositivo ESP8266 con el que estás trabajando. En este caso, estamos trabajando con un “CW01( módulo ESP12F)”. Para seleccionar tu placa desde el Arduino IDE, selecciona Herramientas > Placa “NodeMCU 1.0( módulo ESP12E)”.
NOTA: ESP12F y ESP12E son intercambiables para este propósito.
3. Entendiendo el código
Incluyendo bibliotecas:
#include "UbidotsESPMQTT.h"#include <xSW01.h>#include <xCore.h>
Ingresa tus credenciales de Wi-Fi y Ubidots:
#define TOKEN "Your-Token" // Pon aquí tu TOKEN de Ubidots#define WIFISSID "Your-SSID" // Pon aquí tu SSID de Wi-Fi#define PASSWORD "password-of-ssid" // Pon aquí tu contraseña de Wi-Fi
Tu TOKEN de Ubidots único se obtiene de tu cuenta de Ubidots. Consulta el siguiente enlace para aprender dónde encontrar tu TOKEN de Ubidots.
Define la etiqueta del dispositivo Ubidots y las etiquetas de las variables:
#define DEVICE_LABEL "xinabox-cw01-sw01" // Etiqueta del Dispositivo Ubidots #define VARIABLE_LABEL_1 "altitude" // Etiqueta de Variables Ubidots#define VARIABLE_LABEL_2 "pressure"#define VARIABLE_LABEL_3 "humidity"#define VARIABLE_LABEL_4 "temperature-c"#define VARIABLE_LABEL_5 "temperature-f"
Configuración única, consulta los comentarios para autoexplicación:
void setup() { // pon tu código de configuración aquí, para ejecutarse una vez: Serial.begin(115200); // Pasa un valor booleano verdadero o falso para activar mensajes de depuración client.setDebug(true); // Conectar al Punto de Acceso client.wifiConnection(WIFINAME, WIFIPASS); client.begin(callback); // Establecer los Pines I2C para CW01 #ifdef ESP8266 Wire.pins(2, 14); Wire.setClockStretchLimit(15000); #endif // Iniciar la Comunicación I2C Wire.begin(); // Iniciar el Sensor SW01 SW01.begin(); //Retraso para que el sensor se normalice delay(5000);}
Bucle de operación, para mantenerlo en funcionamiento y actualizándose continuamente:
void loop() { // pon tu código principal aquí, para ejecutarse repetidamente: if(!client.connected()){ client.reconnect(); } // Leer y calcular datos del sensor SW01 SW01.poll(); // Solicitar a SW01 que obtenga la medición de altitud y almacenar en // la variable de altitud float altitude = SW01.getAltitude(101325); // Solicitar a SW01 que obtenga la medición de presión y almacenar en // la variable de presión float pressure = SW01.getPressure(); // Solicitar a SW01 que obtenga la medición de humedad y almacenar en // la variable de humedad float humidity = SW01.getHumidity(); // Solicitar a SW01 que obtenga la medición de temperatura y almacenar en // la variable de temperatura float tempC = SW01.getTempC(); // Temperatura en Celsius float tempF = SW01.getTempF(); // Temperatura en Fahrenheit // Mostrar los datos registrados en el Monitor Serial Serial.print("Altitud: "); Serial.print(altitude); Serial.println(" m"); Serial.print("Presión: "); Serial.print(pressure); Serial.println(" Pa"); Serial.print("Humedad: "); Serial.print(humidity); Serial.println(" %"); Serial.print("Temperatura: "); Serial.print(tempC); Serial.println(" C"); Serial.print("Temperatura: "); Serial.print(tempF); Serial.println(" F"); // Guardar variables para ser enviadas a Ubidots client.add(VARIABLE_LABEL_1, altitude); client.add(VARIABLE_LABEL_2, pressure); client.add(VARIABLE_LABEL_3, humidity); client.add(VARIABLE_LABEL_4, tempC); client.add(VARIABLE_LABEL_5, tempF); // Publicar datos en Ubidots client.ubidotsPublish(DEVICE_LABEL); client.loop(); // Retraso del bucle delay(5000);}
El código completo:
/**************************************** * Incluir Bibliotecas ****************************************/#include "UbidotsESPMQTT.h"#include <xSW01.h>#include <xCore.h>/**************************************** * Definir Constantes ****************************************/#define TOKEN ".........." // Tu TOKEN de Ubidots#define WIFINAME ".........." //Tu SSID#define WIFIPASS ".........." // Tu Contraseña Wifi#define DEVICE_LABEL "xinabox-cw01-sw01" // Etiqueta del Dispositivo Ubidots #define VARIABLE_LABEL_1 "altitude" // Etiqueta de Variables Ubidots#define VARIABLE_LABEL_2 "pressure"#define VARIABLE_LABEL_3 "humidity"#define VARIABLE_LABEL_4 "temperature-c"#define VARIABLE_LABEL_5 "temperature-f"Ubidots client(TOKEN);xSW01 SW01;/**************************************** * Funciones Auxiliares ****************************************/void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Mensaje recibido ["); Serial.print(topic); Serial.print("] "); for (int i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println();}/**************************************** * Funciones Principales ****************************************/void setup() { // pon tu código de configuración aquí, para ejecutarse una vez: Serial.begin(115200); // Pasa un valor booleano verdadero o falso para activar mensajes de depuración client.setDebug(true); // Conectar al Punto de Acceso client.wifiConnection(WIFINAME, WIFIPASS); client.begin(callback); // Establecer los Pines I2C para CW01 #ifdef ESP8266 Wire.pins(2, 14); Wire.setClockStretchLimit(15000); #endif // Iniciar la Comunicación I2C Wire.begin(); // Iniciar el Sensor SW01 SW01.begin(); //Retraso para que el sensor se normalice delay(5000);}void loop() { // pon tu código principal aquí, para ejecutarse repetidamente: if(!client.connected()){ client.reconnect(); } // Leer y calcular datos del sensor SW01 SW01.poll(); // Solicitar a SW01 que obtenga la medición de altitud y almacenar en // la variable de altitud float altitude = SW01.getAltitude(101325); // Solicitar a SW01 que obtenga la medición de presión y almacenar en // la variable de presión float pressure = SW01.getPressure(); // Solicitar a SW01 que obtenga la medición de humedad y almacenar en // la variable de humedad float humidity = SW01.getHumidity(); // Solicitar a SW01 que obtenga la medición de temperatura y almacenar en // la variable de temperatura float tempC = SW01.getTempC(); // Temperatura en Celsius float tempF = SW01.getTempF(); // Temperatura en Fahrenheit // Mostrar los datos registrados en el Monitor Serial Serial.print("Altitud: "); Serial.print(altitude); Serial.println(" m"); Serial.print("Presión: "); Serial.print(pressure); Serial.println(" Pa"); Serial.print("Humedad: "); Serial.print(humidity); Serial.println(" %"); Serial.print("Temperatura: "); Serial.print(tempC); Serial.println(" C"); Serial.print("Temperatura: "); Serial.print(tempF); Serial.println(" F"); // Guardar variables para ser enviadas a Ubidots client.add(VARIABLE_LABEL_1, altitude); client.add(VARIABLE_LABEL_2, pressure); client.add(VARIABLE_LABEL_3, humidity); client.add(VARIABLE_LABEL_4, tempC); client.add(VARIABLE_LABEL_5, tempF); // Publicar datos en Ubidots client.ubidotsPublish(DEVICE_LABEL); client.loop(); // Retraso del bucle delay(5000);}
4. Iniciar sesión en Ubidots
Abre tu cuenta de Ubidots. Verás un dispositivo llamado “xinabox-cw01-sw01” con 5 variables (ver imagen a continuación).
NOTA: Si deseas enviar un nombre de dispositivo diferente, debes actualizar la etiqueta del dispositivo asignada al principio del código.
Visualización del dispositivo
Visualización de variables
5. Creando Dashboards en Ubidots
Los Dashboards (estáticos y dinámicos) son interfaces de usuario para organizar y presentar los datos de un dispositivo y los conocimientos derivados de los datos. Los Dashboards contienen widgets que muestran los datos como gráficos, indicadores, controles, tablas, gráficas y otros tamaños, formas y formatos.
Para crear un nuevo Dashboard en tu cuenta de Ubidots, consulta el siguiente tutorial de Ubidots para aprender cómo hacerlo.
Solo como referencia, una vez que tu Dashboard de Ubidots esté creado, deberías tener algo similar a la imagen a continuación:
CONSEJO PROFESIONAL: También hay una variedad de herramientas de gráficos e informes. Si deseas aprender más sobre esto, te recomendamos que consultes esta guía.
6. Resumen
En este tutorial, hemos mostrado cómo codificar y conectar una estación meteorológica XinaBox a Ubidots. Esto permite el monitoreo remoto y se puede completar en 10-15 minutos.
Otros lectores también han encontrado útil...