Requisitos
Kit de prototipo SenseCAP K1100 de Seeed Studio
Una red Wi-Fi estable
Arduino IDE instalado
1. Actualizando el firmware de SenseCAP K1100
Ve a la página de Github de Seeed Studio y descarga el archivo “SenseCraft-v0.2.uf2” o el firmware más reciente. Mantén un registro de dónde descargaste este archivo para uso futuro.
Conecta el Wio Terminal a la PC usando el cable USB-C.
Haz que el Wio Terminal entre en “Modo Bootloader” siguiendo el siguiente procedimiento:
Consejo Profesional: Puedes confirmar que el Wio Terminal está en modo Bootloader cuando el LED azul comienza a parpadear de una manera diferente a solo parpadear.
Abre tu explorador de archivos y verifica si hay un dispositivo etiquetado como “Arduino”. Si no está listado, entonces el dispositivo no está en “Modo Bootloader”. Repite el paso anterior.
Usando tu explorador de archivos, copia y pega el archivo “SenseCraft-v0.2.uf2” en el dispositivo “Arduino” .
Cuando el proceso de copia haya terminado, el Wio Terminal se reiniciará automáticamente (espera a que lo haga).
2. Configurando el Arduino IDE
Lanza el Arduino IDE.
Haz clic en “Archivo” → “Preferencias” y copia la siguiente URL en el campo “URLs adicionales del gestor de placas” :
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
Haz clic en “Herramientas” → “Placa” → “Gestor de placas”, dirígete a la barra de búsqueda y escribe “Wio Terminal”. Instala la versión más reciente de “Seeed SAMD Boards”.
Espera a que la descarga termine y luego haz clic en el botón “Cerrar”.
Selecciona tu placa yendo a “Herramientas” → “Placa” → “Seeed SAMD (32-bits ARM Cortex-M0+ y Cortex-M4) Boards” → “Seeeduino Wio Terminal”.
Selecciona el puerto al que está conectada tu placa. Ve a “Herramientas” → “Puerto” y selecciona tu dispositivo de los disponibles.
Consejo Profesional: En sistemas operativos Windows, es más probable que los dispositivos se enumeren como “COM1”, “COM2”, etc., mientras que en sistemas operativos basados en Linux, los dispositivos se enumerarán como “/dev/ttyACM0”, “/dev/ttyACM1”, etc.
Dirígete a los siguientes repositorios de GitHub y descarga los archivos .zip:
Ve al Arduino IDE → “Sketch” → “Incluir biblioteca” → “Agregar biblioteca .ZIP...”
Agrega las bibliotecas que acabas de descargar de GitHub.
Ve a “Sketch” → “Incluir biblioteca” → “Administrar bibliotecas...”, busca e instala las siguientes bibliotecas:
“Seeed Arduino rcpWIFi”
“Seeed Arduino rcpUnified”
“Seeed Arduino mbedtls”
“Seeed Arduino FS”
“Seeed Arduino SFUD”
“PubSubClient”
3. Preparando las Credenciales de Conexión
Dirígete a tu cuenta de Ubidots y copia tu Token de Ubidots para uso posterior. En este enlace puedes aprender cómo obtener tu Token de Ubidots.
Ve a este sitio web y genera una cadena aleatoria según la siguiente configuración. Este será el nombre del cliente MQTT en los pasos posteriores.
Mantén ambos valores a mano porque los necesitarás para la siguiente sección.
4. Subiendo el Código al Wio Terminal
Ve al Arduino IDE, elimina todo el código y pega lo siguiente, reemplazando cada campo “#define” según corresponda:
WIFISSID: Tu SSID de Wi-Fi
PASSWORD: Tu contraseña de Wi-Fi
TOKEN: Tu Token de Ubidots
VARIABLE_LABEL1..., VARIABLE_LABEL5: Puedes dejar las opciones predeterminadas, sin embargo, puedes cambiarlas para que se ajusten a tus necesidades
DEVICE_LABEL: Puedes dejar la opción predeterminada. En ese caso, tu dispositivo se mostrará como “wio-terminal” en la plataforma de Ubidots, sin embargo, puedes cambiarlo para que se ajuste a tus necesidades
MQTT_CLIENT_NAME: la cadena aleatoria generada en la sección anterior
#include <PubSubClient.h>#include <rpcWiFi.h>#include <TFT_eSPI.h>#include"LIS3DHTR.h" LIS3DHTR<TwoWire> lis; //Información requerida#define WIFISSID "<YOUR-WIFISSD>" // Pon tu WifiSSID aquí#define PASSWORD "<YOUR-WIFI-PASSWORD" // Pon tu contraseña de wifi aquí#define TOKEN "<YOUR-UBIDOTS-TOKEN>" // Pon tu TOKEN de Ubidots#define VARIABLE_LABEL1 "light" // Asigna la etiqueta de la variable#define VARIABLE_LABEL2 "IMUx"#define VARIABLE_LABEL3 "IMUy"#define VARIABLE_LABEL4 "IMUz"#define VARIABLE_LABEL5 "sound"#define DEVICE_LABEL "wio-terminal" // Asigna la etiqueta del dispositivo#define MQTT_CLIENT_NAME "r6y1ax7mq8875jf" // Nombre del cliente MQTT const long interval = 100;unsigned long previousMillis = 0; TFT_eSPI tft; char mqttBroker[] = "industrial.api.ubidots.com"; WiFiClient wifiClient;PubSubClient client(wifiClient); //valores del sensorstatic int lightValue = 0;static float imuxValue = 0;static float imuyValue = 0;static float imuzValue = 0;static int soundValue = 0; // Espacio para almacenar valores a enviarstatic char str_light[6];static char str_imux[6];static char str_imuy[6];static char str_imuz[6];static char str_sound[6];char payload[700];char topic[150]; 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); } }} //Leyendo valores del sensor incorporadovoid read_builtin(){ lightValue = analogRead(WIO_LIGHT); Serial.print("Luz = "); Serial.println(lightValue); imuxValue = lis.getAccelerationX(); Serial.print("IMU_x = "); Serial.println(imuxValue); imuyValue = lis.getAccelerationY(); Serial.print("IMU_y = "); Serial.println(imuyValue); imuzValue = lis.getAccelerationZ(); Serial.print("IMU_z = "); Serial.println(imuzValue); soundValue = analogRead(WIO_MIC); Serial.print("Sonido = "); Serial.println(soundValue);} //Enviando datos a Ubidotsvoid send_data(){ dtostrf(lightValue, 4, 0, str_light); dtostrf(imuxValue, 4, 3, str_imux); dtostrf(imuyValue, 4, 3, str_imuy); dtostrf(imuzValue, 4, 3, str_imuz); dtostrf(soundValue, 4, 0, str_sound); if (!client.connected()) { reconnect(); } // Construye el tema sprintf(topic, "%s", ""); // Limpia el contenido del tema sprintf(topic, "%s%s", "/v2.0/devices/", DEVICE_LABEL); //Construye la carga útil sprintf(payload, "%s", ""); // Limpia la carga útil sprintf(payload, "{\"%s\":", VARIABLE_LABEL1); // Agrega la etiqueta de la variable sprintf(payload, "%s%s", payload, str_light); // Agrega el valor sprintf(payload, "%s}", payload); // Cierra los corchetes del diccionario client.publish(topic, payload); delay(500); sprintf(payload, "%s", ""); // Limpia la carga útil sprintf(payload, "{\"%s\":", VARIABLE_LABEL2); // Agrega la etiqueta de la variable sprintf(payload, "%s%s", payload, str_imux); // Agrega el valor sprintf(payload, "%s}", payload); // Cierra los corchetes del diccionario client.publish(topic, payload); delay(500); sprintf(payload, "%s", ""); // Limpia la carga útil sprintf(payload, "{\"%s\":", VARIABLE_LABEL3); // Agrega la etiqueta de la variable sprintf(payload, "%s%s", payload, str_imuy); // Agrega el valor sprintf(payload, "%s}", payload); // Cierra los corchetes del diccionario client.publish(topic, payload); delay(500); sprintf(payload, "%s", ""); // Limpia la carga útil sprintf(payload, "{\"%s\":", VARIABLE_LABEL4); // Agrega la etiqueta de la variable sprintf(payload, "%s%s", payload, str_imuz); // Agrega el valor sprintf(payload, "%s}", payload); // Cierra los corchetes del diccionario client.publish(topic, payload); delay(500); sprintf(payload, "%s", ""); // Limpia la carga útil sprintf(payload, "{\"%s\":", VARIABLE_LABEL5); // Agrega la etiqueta de la variable sprintf(payload, "%s%s", payload, str_sound); // Agrega el valor sprintf(payload, "%s}", payload); // Cierra los corchetes del diccionario client.publish(topic, payload); delay(500); client.loop();} void setup() { Serial.begin(115200); lis.begin(Wire1); pinMode(WIO_MIC, INPUT); pinMode(WIO_LIGHT, INPUT); tft.begin(); tft.setRotation(3); tft.setTextSize(2); tft.fillScreen(TFT_BLACK); lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Tasa de salida de datos lis.setFullScaleRange(LIS3DHTR_RANGE_2G); // while(!Serial); // Establecer WiFi en modo estación y desconectar 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); WiFi.begin(WIFISSID, PASSWORD); } tft.fillScreen(TFT_BLACK); tft.drawString("Conectado a la WiFi",20,120); delay(1000); client.setServer(mqttBroker, 1883); client.setCallback(callback); } void loop() { read_builtin(); //Leyendo valores del sensor incorporado send_data(); //Enviando datos a Ubidots delay(5000);}
Sube el código al dispositivo “Wio Terminal” presionando el botón “Subir” en el Arduino IDE:
5. Visualiza los Datos en Ubidots
Ve a tu cuenta de Ubidots → “Dispositivos” y podrás ver un nuevo dispositivo etiquetado como “wio-terminal”.