Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar el Wio Terminal de Seeedstudio a Ubidots a través de MQTT
Conectar el Wio Terminal de Seeedstudio a Ubidots a través de MQTT

Aprende a conectar el Wio Terminal de Seeedstudio a Ubidots a través de MQTT.

Santiago Pachon Robayo avatar
Escrito por Santiago Pachon Robayo
Actualizado hace más de una semana

El Wio Terminal es un dispositivo IoT integrado construido por Seeedstudio. Este dispositivo de pequeño tamaño cuenta con una pantalla LCD de 2.4”, IMU, micrófono, zumbador, ranura para tarjeta microSD, sensor de luz y emisor infrarrojo, y por supuesto, conectividad WiFi y Bluetooth. Una gran ventaja es que se puede programar a través del IDE de Arduino o utilizando MicroPython.

Siguiendo esta guía, podrás PUBLICAR y SUBSCRIBIR datos a/desde Ubidots utilizando el Wio Terminal sin complicaciones.

Requisitos

1. Configuración del firmware

Para el uso correcto de este dispositivo, su firmware debe estar actualizado. Por favor, sigue los pasos presentados en la Wiki de Seeedstudio para actualizar el Wireless Core Realtek RTL8720, responsable de la conectividad WiFi y Bluetooth.

NOTA IMPORTANTE: Instala la actualización y todas las bibliotecas de dependencia para asegurar la conectividad.

2. Configuración del IDE de Arduino


Para poder trabajar con el Wio Terminal en el IDE de Arduino, necesitarás instalar la placa Wio Terminal utilizando el Administrador de Placas de Arduino. Si no estás familiarizado con cómo agregar una placa al IDE de Arduino, consulta este artículo para obtener orientación adicional.

1. Inicia Arduino y abre un ejemplo de Blink en tu IDE de Arduino desde Archivo > Ejemplos > 01.Básicos > Blink.

2. Ve a Archivo > Preferencias y copia la siguiente URL en el URL del administrador de placas adicional, como se muestra en la imagen a continuación.

https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

3. Instala la biblioteca Wio Terminal desde Herramientas > Placas > Administrador de Placas.

4. Por último, necesitarás seleccionar tu placa desde Herramientas > Placa y seleccionar el puerto COM correcto.

5. Sube el código a tu Wio Terminal para asegurarte de que está conectado correctamente. Deberías ver el LED azul parpadeando en la parte inferior del dispositivo.

3. Enviando (PUBLICAR) Datos a Ubidots

En este ejemplo, utilizaremos el sensor de luz interno ubicado en la parte posterior del Wio Terminal para obtener valores en tiempo real y enviarlos a través del método PUBLICAR a Ubidots.

Paso 1: Abre el IDE de Arduino y pega el código de ejemplo a continuación.
Paso 2: Asigna tu único TOKEN de Ubidots.
Paso 3: SSID (Nombre de WiFi) y Contraseña de la red disponible.
Paso 4: Asigna las Etiquetas de Dispositivo y Variable donde se enviarán los datos. Recuerda que si el Dispositivo o la variable no existen antes de que se envíe el primer punto, Ubidots los creará automáticamente.
Paso 5: La constante final necesaria es el MQTT_CLIENT_NAME, esto es especial porque es el ID con el que tu dispositivo será identificado por el broker, por lo que DEBE ser único. Si tu dispositivo intenta conectarse con el mismo ID que ya ha sido tomado por otro dispositivo, la conexión será rechazada. Por favor, crea tu propio MQTT_CLIENT_NAME alfanumérico de 8-12+ caracteres y colócalo en el código según corresponda.

Sugerencia: ¿Necesitas ayuda para crear un MQTT_CLIENT_NAME único? Consulta este generador de ascii aleatorio, o simplemente utiliza la dirección MAC de tu dispositivo, ya que cada dirección MAC es globalmente única.

/***************************************** Incluir Bibliotecas****************************************/#include <PubSubClient.h>#include <TFT_eSPI.h>#include <rpcWiFi.h>TFT_eSPI tft;/***************************************** Definir Constantes****************************************/#define WIFISSID "<YOUR-WIFISSD>" // Coloca tu WifiSSID aquí#define PASSWORD "<YOUR-WIFI-PASSWORD" // Coloca tu contraseña de wifi aquí#define TOKEN "<YOUR-UBIDOTS-TOKEN>" // Coloca el TOKEN de Ubidots#define VARIABLE_LABEL "light" // Asigna la etiqueta de variable#define DEVICE_LABEL "wio-terminal" // Asigna la etiqueta de dispositivo#define MQTT_CLIENT_NAME "r6y1ax7mq8" // Nombre del cliente MQTT#define LCD_BACKLIGHT (72Ul)char mqttBroker[] = "industrial.api.ubidots.com";// Espacio para almacenar valores a enviarchar str_light[6];char payload[700];char topic[150];/***************************************** Inicializar constructores para objetos****************************************/WiFiClient wifiClient;PubSubClient client(wifiClient);/***************************************** 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]);  }}void reconnect() {  // Bucle hasta que estemos reconectados  while (!client.connected()) {    Serial.println("Intentando conexión MQTT...");  // Intentar conectar  if (client.connect(MQTT_CLIENT_NAME, TOKEN,"")) {    Serial.println("conectado");  }  else {    Serial.print("fallido, rc=");    Serial.print(client.state());    Serial.println(" intenta de nuevo en 2 segundos");    // Espera 2 segundos antes de reintentar    delay(2000);    }  }}/***************************************** Funciones Principales****************************************/void setup() {  Serial.begin(115200);  tft.begin();  tft.setRotation(3);  tft.setTextSize(2);  tft.fillScreen(TFT_BLACK);  digitalWrite(LCD_BACKLIGHT, HIGH);  pinMode(WIO_LIGHT, INPUT);  // Configura WiFi en modo estación y desconéctate de un AP si estaba conectado previamente  WiFi.mode(WIFI_STA);  WiFi.disconnect();  tft.drawString("Conectando a WiFi...",20,120);  WiFi.begin(WIFISSID, PASSWORD);  while (WiFi.status() != WL_CONNECTED) {    delay(500);    tft.drawString("Conectando a WiFi...",20,0);    WiFi.begin(WIFISSID, PASSWORD);  }  tft.fillScreen(TFT_BLACK);  tft.drawString("Conectado a la red WiFi",20,120);  tft.fillScreen(TFT_BLACK);  delay(1000);  client.setServer(mqttBroker, 1883);  client.setCallback(callback);}void loop() {  float light = analogRead(WIO_LIGHT);  dtostrf(light, 4, 2, str_light);  tft.fillRect(140,110,100,15,TFT_BLACK);  tft.drawString(str_light,140,110);  if (!client.connected()) {    reconnect();  }  //***Publicar***  // Construye el tema  sprintf(topic, "%s", ""); // Limpia el contenido del tema  sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL);  //Construye la carga  sprintf(payload, "%s", ""); // Limpia la carga  sprintf(payload, "{\"%s\":", VARIABLE_LABEL); // Agrega la etiqueta de variable   sprintf(payload, "%s%s", payload, str_light); // Agrega el valor  sprintf(payload, "%s}", payload); // Cierra los corchetes del diccionario  tft.drawString("Tema",0,140);  tft.drawString(topic,0,160);  tft.drawString("Carga",0,190);  tft.fillRect(100,210,100,15,TFT_BLACK);  tft.drawString(payload,0,210);  client.publish(topic, payload);  delay(10000);  client.loop();}

Después de subir y ejecutar el código, deberías poder ver tu nuevo dispositivo “wio-terminal” en tu lista de dispositivos con valores de 0 a 1023. Puedes probar los valores apuntando una linterna o exponiendo la parte posterior del Wio Terminal a una fuente de luz.

4. Recibiendo (SUBSCRIBIR) Datos de Ubidots

Con el siguiente código de ejemplo podrás suscribirte a valores de Ubidots para comenzar a controlar cualquier activo de forma remota. En este ejemplo, simplemente haremos que la pantalla del Wio Terminal se vuelva verde o gris dependiendo del valor de una variable de Encendido/Apagado (0 para Apagar, 1 para Encender) en Ubidots.

Paso 1: Abre el IDE de Arduino y pega el código de ejemplo a continuación.
Paso 2: Asigna tu único TOKEN de Ubidots.
Paso 3: SSID (Nombre de WiFi) y Contraseña de la red disponible.
Paso 4: Por último, necesitas asignar las Etiquetas de Dispositivo y Variable a las que te suscribirás. Recuerda que en este caso, el Dispositivo y la Variable deben existir para suscribirse.
Paso 5: La constante final necesaria es el MQTT_CLIENT_NAME, esto es especial porque es el ID con el que tu dispositivo será identificado por el broker, por lo que DEBE ser único. Si tu dispositivo intenta conectarse con el mismo ID que ya ha sido tomado por otro dispositivo, la conexión será rechazada. Por favor, crea tu propio MQTT_CLIENT_NAME alfanumérico de 8-12+ caracteres y colócalo en el código según corresponda.

Sugerencia: ¿Necesitas ayuda para crear un MQTT_CLIENT_NAME único? Consulta este generador de ascii aleatorio, o simplemente utiliza la dirección MAC de tu dispositivo, ya que cada dirección MAC es globalmente única.

/***************************************** Incluir Bibliotecas****************************************/#include <PubSubClient.h>#include <TFT_eSPI.h>#include <rpcWiFi.h>TFT_eSPI tft;/***************************************** Definir Constantes****************************************/#define WIFISSID "<YOUR-WIFISSD>" // Coloca tu WifiSSID aquí#define PASSWORD "<YOUR-WIFI-PASSWORD" // Coloca tu contraseña de wifi aquí#define TOKEN "<YOUR-UBIDOTS-TOKEN>" // Coloca el TOKEN de Ubidots#define VARIABLE_LABEL "<YOUR-VARIABLE-LABEL>" // Asigna la etiqueta de variable#define DEVICE_LABEL "<YOUR-DEVICE-LABEL>" // Asigna la etiqueta de dispositivo#define MQTT_CLIENT_NAME "r6y1ax7mq8" // Nombre del cliente MQTT#define LCD_BACKLIGHT (72Ul)char mqttBroker[] = "industrial.api.ubidots.com";char payload[700];char topic[150];/***************************************** Inicializar constructores para objetos****************************************/WiFiClient wifiClient;PubSubClient client(wifiClient);/***************************************** 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]);  }  // Rutina de control  if ((char)payload[0]=='1'){    tft.fillScreen(TFT_GREEN);  }  else{    tft.fillScreen(TFT_LIGHTGREY);  }  Serial.println();}void reconnect() {  // Bucle hasta que estemos reconectados  while (!client.connected()) {    Serial.println("Intentando conexión MQTT...");    // Intentar conectar    if (client.connect(MQTT_CLIENT_NAME, TOKEN,"")) {      Serial.println("conectado");    }    else {      Serial.print("fallido, rc=");      Serial.print(client.state());      Serial.println(" intenta de nuevo en 2 segundos");      // Espera 2 segundos antes de reintentar      delay(2000);    }  }}/***************************************** Funciones Principales****************************************/void setup() {  Serial.begin(115200);  tft.begin();  tft.setRotation(3);  tft.setTextSize(2);  tft.fillScreen(TFT_BLACK);  digitalWrite(LCD_BACKLIGHT, HIGH);  pinMode(WIO_LIGHT, INPUT);  // Configura WiFi en modo estación y desconéctate de un AP si estaba conectado previamente  WiFi.mode(WIFI_STA);  WiFi.disconnect();  tft.drawString("Conectando a WiFi...",20,120);  WiFi.begin(WIFISSID, PASSWORD);  while (WiFi.status() != WL_CONNECTED) {    delay(500);    tft.drawString("Conectando a WiFi...",20,0);    WiFi.begin(WIFISSID, PASSWORD);  }  tft.fillScreen(TFT_BLACK);  tft.drawString("Conectado a la red WiFi",20,120);  tft.fillScreen(TFT_BLACK);    delay(1000);  client.setServer(mqttBroker, 1883);  client.setCallback(callback);}void loop() {  if (!client.connected()) {  reconnect();  }  // Se suscribe para obtener el valor de la variable de control en el dispositivo de luz  char topicToSubscribe[200];  sprintf(topicToSubscribe, "%s", ""); // Limpia el contenido del char  sprintf(topicToSubscribe, "%s%s", "/v1.6/devices/", DEVICE_LABEL);  sprintf(topicToSubscribe, "%s/%s/lv", topicToSubscribe, VARIABLE_LABEL);  Serial.println("suscribiéndose a:");  Serial.println(topicToSubscribe);  client.subscribe(topicToSubscribe);  client.loop();}

5. Resumen

Con este simple tutorial, puedes PUBLICAR y SUBSCRIBIR datos a/desde Ubidots con la facilidad del IDE de Arduino y un Wio Terminal. Si deseas encontrar más ejemplos para utilizar las otras partes integradas en el dispositivo, visita la Wiki de Seeedstudio aquí.

Ahora es el momento de crear Dashboards de Ubidots para visualizar tus datos y desplegar tu solución IoT!

¿Ha quedado contestada tu pregunta?