El ESP-WROOM-32 (ESP32) Core y el módulo Wi-Fi, Bluetooth (CW02) permiten a los usuarios enviar datos desde xChips modulares de XinaBox a la nube y controlar el dispositivo de acuerdo con los datos obtenidos.
El xCHIP OC06 utiliza el DRV8825 Controlador de Motor Paso a Paso para conducir y controlar con precisión un motor paso a paso conectado. El DRV8825 se conecta a través de I2C mediante un PCA9554A I/O Expander que proporciona todas las señales de control necesarias.
Al final de esta guía, podrás controlar el motor paso a paso con funcionalidad básica para mover el motor hacia adelante o hacia atrás de forma remota utilizando Ubidots y Xinabox xChips IP01, CW02 y OC06.
Requisitos
1. Configuración de Hardware
Conecta CW02, OC06 y 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.
2. Configuración del Arduino IDE
1. Instala Arduino IDE 1.8.8.
2. Instala estas bibliotecas/núcleos en Arduino:
NOTA: Si no estás familiarizado con cómo instalar bibliotecas, consulta el siguiente enlace: Instalando bibliotecas de Arduino
3. Con el núcleo ESP32 instalado, selecciona el dispositivo ESP32 con el que estás trabajando. En este caso, estamos trabajando con un “CW02(módulo ESP32)”. Para seleccionar tu placa desde el Arduino IDE, selecciona Herramientas > Placa “XinaBox CW02”.
3. Modificar la Biblioteca Ubidots ESP MQTT
La Biblioteca Ubidots ESP MQTT está hecha por defecto para ESP8266. Se deben realizar algunas modificaciones dentro de la UbidotsESPMQTT biblioteca para que sea utilizable para ESP32.
Abre UbidotsESPMQTT.h
, desde <ubicación del sketch>\libraries
con Notepad o Notepad++ (preferido):
Comenta o elimina #include <ESP8266WiFi.h>
, y agrega estas dos líneas:
#include <Arduino.h>#include <WiFi.h>
Reemplaza la siguiente línea:
#define SERVER "things.ubidots.com"
con:
#define SERVER "industrial.ubidots.com"
El código final puede verse así:
4. Crear Botón de Interruptor
1. Inicia sesión en tu cuenta de Ubidots:
2. Crea un nuevo dispositivo. Para crear un nuevo dispositivo, haz clic en el icono "+" en la esquina superior derecha de la sección de Dispositivos de tu cuenta. Luego, asigna “OC06” como nombre del dispositivo.
Una vez que se crea el dispositivo, aparecerá listado en la sección de dispositivos:
3. Ingresa al dispositivo creado y agrega una nueva variable en bruto presionando el icono "+". La variable debe llamarse “estado”:
Una vez que se crea la variable, deberías tener el siguiente resultado:
NOTA IMPORTANTE: Para poder establecer la comunicación, la etiqueta del dispositivo y variable asignada en la plataforma debe ser la misma que se asigna en el código. Para aprender más sobre Dispositivos y Etiquetas de Variables, consulta el siguiente artículo.
4. Ve a la sección dashboard ("Datos > Dashboards") para crear un nuevo widget de control. Para crear un nuevo widget de control en el Dashboard, haz clic en el icono “+” en la esquina superior derecha de la interfaz de usuario del dashboard. Luego, selecciona "Interruptor" como tipo de widget y asigna el dispositivo y la variable creados anteriormente.
Una vez que se crea el widget, deberías tener el siguiente resultado:
4. Codificación
Incluyendo bibliotecas:
#include "UbidotsESPMQTT.h"#include <xOC06.h>#include <xCore.h>
Ingresa tus credenciales de Wi-Fi y TOKEN de Ubidots, donde se indica:
#define TOKEN "" // Pon aquí tu TOKEN de Ubidots#define WIFINAME "" //Pon aquí tu SSID de WiFi#define WIFIPASS "" // Pon aquí tu contraseña de Wifi
Definiendo constantes:
#define DEVICE "oc06" // Pon aquí la etiqueta de tu dispositivo de Ubidots#define VARIABLE "degrees" // Pon aquí la etiqueta de tu variable de Ubidots
NOTA IMPORTANTE: Asegúrate de que la ETIQUETA del Dispositivo y Variable estén asignadas respectivamente.
Creando Variables y Objetos:
Ubidots client(TOKEN,"esp32");xOC06 OC06;float value;
Ubidots MQTT necesita que se le asigne una función de callback que se llame cada vez que se detecte un cambio en la variable.
void callback(char* topic, byte* payload, unsigned int length) { //Imprimir carga útil del tema suscrito Serial.print("Mensaje recibido ["); Serial.print(topic); Serial.print("] "); for (int i=0;i<length;i++) { Serial.print((char)payload[i]); } //Convertir carga útil de byte a float value=atof((char*)payload); /*Rotar hacia adelante si el interruptor está ENCENDIDO, de lo contrario mover hacia atrás if(value==1) { OC06.move(400, 200, FORWARD); delay(20); }else{ OC06.move(400, 200, REVERSE); delay(20); }}
Configuración única:
void setup() { //Serial.begin(115200); //Elimina el comentario para habilitar la depuración serial client.setDebug(true); // Pasa un valor booleano verdadero o falso para activar //mensajes de depuración //Conectar al Punto de Acceso Wi-Fi especificado client.wifiConnection(WIFINAME, WIFIPASS); //Conectar a Ubidots MQTT con la función “callback” client.begin(callback); //Iniciar comunicación I2C Wire.begin(); //Iniciar OC06 OC06.begin(); //Habilitar OC06 OC06.enable(); value=0;}
Operación de bucle, sigue ejecutándose y actualizándose una y otra vez
void loop() { //Reconectar a Ubidot MQTT si no está conectado if(!client.connected()){ client.reconnect(); //Suscribirse al DISPOSITIVO y VARIABLE especificados client.ubidotsSubscribe(DEVICE,VARIABLE); } //Seguir rastreando Ubidots MQTT client.loop();}
El código completo:
#include "UbidotsESPMQTT.h"#include <xOC06.h>#include <xCore.h>#define TOKEN "" // Pon aquí tu TOKEN de Ubidots#define WIFINAME "" //Pon aquí tu SSID de WiFi#define WIFIPASS "" // Pon aquí tu contraseña de Wifi#define DEVICE "oc06" // Pon aquí la etiqueta de tu dispositivo de Ubidots#define VARIABLE "degrees" // Pon aquí la etiqueta de tu variable de Ubidots void callback(char* topic, byte* payload, unsigned int length) { //Imprimir carga útil del tema suscrito Serial.print("Mensaje recibido ["); Serial.print(topic); Serial.print("] "); for (int i=0;i<length;i++) { Serial.print((char)payload[i]); } //Convertir carga útil de byte a float value=atof((char*)payload); /*Rotar hacia adelante si el interruptor está ENCENDIDO, de lo contrario mover hacia atrás if(value==1) { OC06.move(400, 200, FORWARD); delay(20); } else { OC06.move(400, 200, REVERSE); delay(20); }}void setup() { //Serial.begin(115200); //Elimina el comentario para habilitar la depuración serial client.setDebug(true); // Pasa un valor booleano verdadero o falso para activar //mensajes de depuración //Conectar al Punto de Acceso Wi-Fi especificado client.wifiConnection(WIFINAME, WIFIPASS); //Conectar a Ubidots MQTT con la función “callback” client.begin(callback); //Iniciar comunicación I2C Wire.begin(); //Iniciar OC06 OC06.begin(); //Habilitar OC06 OC06.enable(); value=0;}void loop() { //Reconectar a Ubidot MQTT si no está conectado if(!client.connected()){ client.reconnect(); //Suscribirse al DISPOSITIVO y VARIABLE especificados client.ubidotsSubscribe(DEVICE,VARIABLE); } //Seguir rastreando Ubidots MQTT client.loop();}
5. Compilar y Subir el código
Ahora usarás Arduino IDE para compilar y luego subir el código al CW02, asegurándote de haber seleccionado la placa CW02 y de estar conectado al puerto USB correcto.
El motor rota hacia adelante cuando el interruptor está ENCENDIDO, y se mueve hacia atrás cuando el interruptor está apagado:
6. Resumen
En este tutorial, hemos aprendido cómo controlar un motor paso a paso utilizando CW02/OC06/IP01 con Ubidots de forma remota desde cualquier lugar. Con XinaBox y Ubidots, ahora puedes enviar impresiones 3D a una impresora 3D de forma remota desde cualquier lugar. El tutorial fue bastante simple y puede tomar entre 20 y 25 minutos.
Otros lectores también han encontrado útil...