Ir al contenido principal
Todas las coleccionesTutoriales de proyectos IoT
Construir una estación meteorológica utilizando XinaBox, conectada a Ubidots a través de MQTT
Construir una estación meteorológica utilizando XinaBox, conectada a Ubidots a través de MQTT

Aprende a crear tu propia Estación Meteorológica en Ubidots, utilizando los xChips de XinaBox (IP01, CW01 y SW01)

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

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

  • 1x CW01 - núcleo WiFi (ESP8266/ESP-12F)

  • 1x SW01 - Sensor Avanzado de Clima (BME280)

  • 1x IP01 - Interfaz de Programación USB (FT232R)

  • 1x XC10 - Paquete de 10 Conectores xBUS

  • Cuenta de Ubidots

Pasos a Paso

  1. Configuración de Hardware

  2. Configurando el Arduino IDE

  3. Entendiendo el código

  4. Iniciar sesión en Ubidots

  5. Crear Dashboards en Ubidots

  6. 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

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

  1. 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...

¿Ha quedado contestada tu pregunta?