Documentación — Arduino Controller
Arduino Controller es una aplicación Android para gestionar, monitorizar y controlar dispositivos embebidos, como placas Arduino y otras compatibles.
Desde la app puedes registrar tus dispositivos, observar en tiempo real lo que envían, mandarles comandos y automatizar consultas periódicas, todo desde un mismo lugar. La comunicación puede establecerse por tres vías, según lo que mejor encaje con cada proyecto:
- USB, para dispositivos conectados directamente al terminal.
- TCP/IP, para dispositivos accesibles a través de la red (local o remota).
- Bluetooth, para dispositivos emparejados de forma inalámbrica.
Aunque nació orientada a placas Arduino, la aplicación funciona con cualquier dispositivo embebido que cumpla los requisitos de comunicación admitidos. En el caso de USB, esto incluye dispositivos que implementan la especificación USB CDC-ACM y conversores USB a TTL basados en CP210x. Mientras el dispositivo respete el canal y los parámetros configurados, Arduino Controller puede trabajar con él aunque no sea una placa Arduino.
La app se organiza en torno a cuatro funcionalidades principales:
1. Dispositivos
Registro y gestión de dispositivos y su configuración de comunicación.
2. Monitor Serie
Lectura del flujo de datos en tiempo real y envío manual de comandos.
3. Dashboard
Panel de control visual compuesto con widgets interactivos a medida.
4. Procesos TCP/IP
Tareas asíncronas que consultan el dispositivo en segundo plano.
Las tres últimas funcionalidades operan sobre un dispositivo concreto y se abren desde su pantalla de detalle, a través de la barra de navegación inferior.
1. Dispositivos
Un dispositivo en Arduino Controller es la configuración guardada que representa a una placa física y, sobre todo, la forma de comunicarse con ella. Registrar un dispositivo es el punto de partida de la aplicación: una vez dado de alta, queda disponible de forma permanente para monitorizarlo, controlarlo desde su dashboard o asignarle procesos en segundo plano.
Esta funcionalidad reúne todo el ciclo de vida del dispositivo: listarlo, crearlo, consultarlo, editarlo y eliminarlo.
Listado de dispositivos
Es la pantalla inicial de la aplicación y muestra todos los dispositivos que has registrado. Funciona como centro de navegación: desde aquí accedes al detalle de cualquier dispositivo para gestionarlo, y dispones también de la opción de dar de alta uno nuevo.
Para los dispositivos configurados por TCP/IP con la autocomprobación de conexión activada, el listado muestra un indicador visual con su estado actual (conectado / no conectado), de modo que puedas ver de un vistazo cuáles están accesibles sin entrar en cada uno.
Alta de dispositivos
Permite registrar un dispositivo nuevo. El proceso arranca con los datos comunes a cualquier tipo de dispositivo y continúa con los campos propios del canal de comunicación elegido.
Datos generales
- Alias del dispositivo: nombre identificador con el que aparecerá en el listado y en el resto de pantallas. Conviene que sea descriptivo, sobre todo si vas a gestionar varios dispositivos.
Tipo de comunicación
Al seleccionar el tipo de comunicación, la pantalla muestra los parámetros específicos que necesita cada uno.
Pensada para dispositivos conectados físicamente al terminal Android.
- Driver UART, a elegir según el chip del dispositivo:
- USB ACM, para dispositivos que implementan la especificación USB CDC-ACM.
- Conversor CP210x, para dispositivos que usan conversores USB a TTL basados en CP210x.
- Parámetros de comunicación serie, que deben coincidir con los del dispositivo:
- Velocidad del puerto (baudrate)
- Bits de datos
- Bits de parada
- Bits de paridad
Pensada para dispositivos accesibles a través de la red, en la red local o de forma remota.
- Host: dirección IP o nombre del servidor del dispositivo.
- Puerto: puerto por el que se establece la conexión.
- Autocomprobación de conexión (activada por defecto): la app verifica automáticamente si el dispositivo está accesible y refleja su estado mediante indicadores visuales en distintas pantallas, como el listado. Es también el tipo de comunicación necesario para usar la funcionalidad de Procesos.
Pensada para dispositivos emparejados de forma inalámbrica con el terminal.
- Si el dispositivo ya está emparejado con el sistema, aparecerá directamente disponible para seleccionarlo.
- Si no está emparejado, se usa el botón "Descubrir dispositivo" para buscarlo, emparejarlo y asignarlo al registro que estás creando.
Detalles del dispositivo
Al pulsar sobre un dispositivo del listado se abre su pantalla de detalle, que actúa como centro de operaciones. Desde aquí se accede al resto de funcionalidades a través de la barra de navegación inferior —Monitor Serie, Dashboard y Procesos (este último solo en dispositivos TCP/IP)— y se gestiona el propio dispositivo:
- Editar: abre la misma pantalla que el alta, pero con los datos ya cargados para modificarlos. Es lo que usarás cuando cambie la IP o el puerto de un dispositivo de red, para ajustar los parámetros serie de una conexión USB o simplemente para renombrar el alias. Los cambios se aplican al dispositivo existente, sin crear uno nuevo.
- Eliminar: borra el registro de forma permanente, incluida su configuración asociada. Conviene asegurarse antes de confirmar, porque para volver a usar ese dispositivo habría que darlo de alta de nuevo.
2. Monitor Serie
El Monitor Serie es la herramienta de interacción directa y en tiempo real con el dispositivo. Reproduce la experiencia de un monitor serie tradicional: muestra tal cual el flujo de datos que emite el dispositivo y te permite enviarle comandos manualmente. Es la funcionalidad idónea para depurar, comprobar el comportamiento de una placa, leer la salida de sensores o probar comandos antes de automatizarlos en el dashboard o en un proceso.
Se abre desde la barra de navegación inferior de la pantalla de detalle del dispositivo.
Conexión y captura de datos
El flujo de trabajo básico es el siguiente:
- Pulsa el botón "Conectar" para establecer la comunicación con el dispositivo.
- Una vez conectado, la app inicia automáticamente la captura de datos y va mostrando en la pantalla de log todo lo que el dispositivo envía.
- Puedes detener la captura en cualquier momento con el botón "Parar captura de datos", sin cerrar la conexión.
Envío de comandos
Además de leer, el monitor permite enviar comandos al dispositivo escribiéndolos y transmitiéndolos desde la propia pantalla. Para que el dispositivo los interprete correctamente, puedes definir la terminación de línea que se añade al enviarlos:
- Sin ajuste
- Nueva línea (
\n) - Retorno de carro (
\r) - Ambos (
\r\n— NL & CR)
La opción adecuada depende de cómo espere recibir los datos el firmware del dispositivo.
Gestión del log
Durante la sesión, el monitor ofrece utilidades para trabajar con la información recibida:
- Limpiar los logs para vaciar la pantalla y empezar una lectura limpia.
- Compartir el log con otras aplicaciones del sistema, por ejemplo para guardarlo, enviarlo por correo o analizarlo fuera de la app.
3. Dashboard
El Dashboard es un panel de control visual y personalizable para cada dispositivo. En lugar de escribir comandos manualmente en el monitor serie, compones tu propia interfaz añadiendo widgets interactivos, cada uno asociado a un comando que se envía al dispositivo al utilizarlo. Así puedes crear mandos a medida para cada proyecto: encender y apagar salidas, regular valores, disparar acciones o mostrar información, con una interfaz clara y reutilizable.
Se abre desde la barra de navegación inferior de la pantalla de detalle del dispositivo, y cada dispositivo mantiene su propio dashboard de forma independiente. Al igual que en el monitor serie, el dispositivo debe estar conectado para que los widgets envíen comandos y reciban datos.
Composición del panel
El dashboard dispone de un modo de edición desde el que se compone y organiza el panel:
- Añadir widgets al panel.
- Configurar cada widget según su tipo: nombre, plantillas de envío o recepción y sus valores.
- Ordenar o reubicar los widgets según convenga.
- Eliminar los que ya no necesites.
Una vez guardada, la configuración queda asociada al dispositivo y lista para su uso.
Datos de un widget
Al dar de alta un widget se solicitan una serie de datos. Algunos son comunes a todos los tipos y otros dependen del tipo elegido y de cómo se relacione el widget con el dispositivo: hay widgets actuadores (envían comandos), widgets que reflejan lecturas de sensores (reciben datos) y widgets que hacen ambas cosas.
- Tipo de widget: determina el comportamiento y la apariencia del widget. Puede ser Botón, Interruptor (Switch), Control deslizante (Slider) o Visor de texto. (todos)
- Nombre del widget: etiqueta identificativa que se muestra en el panel. (todos)
- Plantilla de envío: patrón de texto con el que se compone el mensaje que se envía al dispositivo. El comodín
$VALmarca la posición donde se inserta el valor del widget antes de enviarlo (el valor del deslizante o, en el interruptor, el valor activo o inactivo según la posición). Solo en los widgets actuadores. (Botón, Switch, Slider) - Ajuste de línea: permite seleccionar un carácter de fin de línea al enviar un comando. Solo en los widgets actuadores. (Botón, Switch, Slider)
- Plantilla de recepción: patrón de texto que la app utiliza para localizar y extraer un dato dentro del mensaje que envía el dispositivo. El comodín
$VALmarca la posición del valor que se quiere extraer. Solo en los widgets que representan lecturas de sensores. (Switch, Slider, Visor de texto) - Valor mínimo y Valor máximo: límites del rango que puede seleccionar el control. (Slider)
- Valor activo: valor que representa semánticamente el estado "Encendido". (Switch)
- Valor inactivo: valor que representa semánticamente el estado "Apagado". (Switch)
El comodín $VAL. Tanto en envío como en recepción, $VAL representa el valor con el que trabaja el widget: en recepción indica qué parte del texto recibido debe extraerse; en envío, dónde colocar el valor que se transmite. El resto del patrón es texto literal que sirve de referencia para situar ese valor.
Por ejemplo, si el dispositivo emite:
TEMP: 34º, HUM: 56%
una plantilla de recepción TEMP: $VAL extrae la temperatura (34) y una plantilla HUM: $VAL extrae la humedad (56). De este modo, dos widgets distintos pueden leer cada uno su dato a partir del mismo mensaje.
La siguiente tabla resume qué campos aplican a cada tipo de widget:
| Campo | Botón | Interruptor | Deslizante | Visor de texto |
|---|---|---|---|---|
| Tipo de widget | ✓ | ✓ | ✓ | ✓ |
| Nombre del widget | ✓ | ✓ | ✓ | ✓ |
| Plantilla de envío | ✓ | ✓ | ✓ | — |
| Ajuste de línea | ✓ | ✓ | ✓ | — |
| Plantilla de recepción | — | ✓ | ✓ | ✓ |
| Valor mínimo / Valor máximo | — | — | ✓ | — |
| Valor activo / Valor inactivo | — | ✓ | — | — |
Tipos de widgets
Botón Actuador
Envía un mensaje puntual cada vez que se pulsa, definido en su plantilla de envío. Idóneo para acciones concretas: reiniciar la placa, disparar un evento o ejecutar una rutina.
- Nombre del widget
- Plantilla de envío: mensaje que se envía al pulsarlo (normalmente texto fijo, sin
$VAL). - Ajuste de línea
Interruptor (Switch) Actuador + sensor
Estado de dos posiciones (encendido / apagado): al cambiarlo envía el mensaje de su plantilla de envío y, además, puede reflejar el estado real del dispositivo mediante su plantilla de recepción. Útil para salidas de encendido/apagado, como un relé o un LED.
- Nombre del widget
- Plantilla de envío:
$VALse sustituye por el valor activo o inactivo según la posición. - Ajuste de línea
- Plantilla de recepción: patrón con
$VALpara extraer del mensaje el dato que refleja el estado. - Valor activo: valor asociado al estado "Encendido".
- Valor inactivo: valor asociado al estado "Apagado".
Control deslizante (Slider) Actuador + sensor
Envía un valor dentro de un rango definido (valor mínimo y máximo) mediante su plantilla de envío y, opcionalmente, refleja un valor recibido del dispositivo a partir de su plantilla de recepción. Adecuado para magnitudes continuas: intensidad de luz, velocidad de un motor o posición de un servo.
- Nombre del widget
- Plantilla de envío:
$VALse sustituye por el valor seleccionado. - Ajuste de línea
- Plantilla de recepción: patrón con
$VALpara extraer del mensaje el valor que refleja. - Valor mínimo y Valor máximo: límites del rango.
Visor de texto Sensor
Widget de solo lectura: muestra información recibida del dispositivo —como la lectura de un sensor o un estado— interpretándola según su plantilla de recepción.
- Nombre del widget
- Plantilla de recepción: patrón con
$VALque indica qué dato del mensaje recibido se muestra.
Uso del dashboard
Con el dispositivo conectado, basta con interactuar con los widgets: al pulsar un botón se envía su plantilla de envío, al cambiar un interruptor se envía el mensaje de la nueva posición, y al mover un deslizador se transmite el valor seleccionado. Además, los widgets con plantilla de recepción (interruptor, deslizante y visor de texto) reflejan la información que llega del dispositivo, de modo que el panel puede mostrar el estado real de lo que controla. Así, el dashboard añade una capa de control y monitorización visual sobre el mismo canal de comunicación (USB, TCP/IP o Bluetooth) que emplea el resto de la aplicación.
Próximas mejoras
4. Procesos Solo TCP/IP
Los Procesos permiten lanzar tareas asíncronas que se ejecutan en segundo plano, consultando al dispositivo de forma periódica sin necesidad de mantener la aplicación abierta. Una vez iniciado, el proceso funciona de manera autónoma, lo que lo hace idóneo para monitorizar o recopilar lecturas de un dispositivo a lo largo del tiempo sin depender de tener la app en primer plano.
Se accede desde la barra de navegación inferior de la pantalla de detalle del dispositivo, igual que el monitor serie y el dashboard, y cada dispositivo gestiona sus propios procesos.
Disponibilidad
Esta funcionalidad está disponible exclusivamente para dispositivos con comunicación TCP/IP. Los dispositivos por USB o Bluetooth no admiten procesos, ya que dependen de una conexión física o de proximidad que no puede mantenerse de forma autónoma en segundo plano. La conexión de red, en cambio, sí permite que la tarea siga operando aunque la app no esté en primer plano.
Configuración de un proceso
Al crear un proceso se define la consulta que se realizará al dispositivo mientras el proceso esté activo.
Cada proceso admite además una opción de auto-reconexión para dar robustez a la tarea: si la comunicación con el dispositivo falla, el proceso intenta restablecer la conexión de forma automática hasta un límite de intentos configurable. Si se alcanza ese límite sin éxito, el proceso deja de reintentar.
Ejecución en segundo plano
Los procesos se lanzan bajo demanda. Una vez iniciado, el proceso:
- Comienza a ejecutarse en segundo plano.
- Consulta los datos del dispositivo de forma periódica, según la configuración establecida.
- Continúa su ejecución aunque se cierre la aplicación, gracias a la conexión TCP/IP.
- Ante un fallo de comunicación, reintenta la reconexión automáticamente hasta agotar el límite de intentos configurado.