Comunicación CANopen entre el host y el Smart Display
El control de un Smart Display requiere una interfaz de sistema y un protocolo de comunicación. Desde la perspectiva del control mediante el host, este artículo presenta un ejemplo práctico con Arduino para mostrar cómo el HOST envía comandos que permiten cambiar el color de un indicador en el Smart Display. En este ejemplo, se incorpora un botón táctil en la interfaz de usuario y se conecta un botón físico al Arduino. Al pulsar el botón físico o el botón táctil, cambia el color del indicador mostrado en pantalla y se enciende o apaga el LED externo.
Esta aplicación muestra cómo utilizar una placa de desarrollo Arduino para controlar un Smart Display CAN de 3,5 pulgadas, incluida la programación del botón físico, el botón táctil, el indicador en pantalla y el LED de la placa, así como la forma en que el Smart Display recibe los comandos enviados por el HOST. Como controlador host se utiliza un Arduino Mega 2560 equipado con una placa de expansión CAN Bus, que se comunica con el Smart Display mediante CANopen.
El diagrama de bloques del sistema se muestra a continuación:

Diagrama de bloques del sistema
Para esta aplicación se necesitan los siguientes componentes:
- Smart Display CANopen de 3,5 pulgadas
- Arduino Mega 2560
- Placa de expansión CAN Bus para Arduino Mega 2560
- Dongle CAN Bus
- Botón físico
- LED
- Smart Display GUI Builder v0.4.2 o posterior
Esta demostración se divide en tres partes:
- Diseñar el proyecto en GUI Builder
- Compilar y cargar el proyecto
- Programar el host Arduino
Diseñar el proyecto en GUI Builder
En primer lugar, cree un nuevo proyecto e introduzca un nombre para el proyecto. A continuación, seleccione el tipo de dispositivo; en este ejemplo se utiliza un dispositivo de 3,5 pulgadas. Seleccione CANopen como protocolo de comunicación y configure la orientación de la pantalla como Landscape. Después, seleccione Blank Template entre las plantillas de interfaz de usuario y haga clic en Create para crear el nuevo proyecto, tal como se muestra a continuación.

Una vez completados estos ajustes, se abrirá una página en blanco.

Para este ejemplo de aplicación, añada un botón táctil y un widget Indicator al área de trabajo. Seleccione los widgets necesarios en el panel de controles y arrástrelos al área de trabajo, tal como se muestra a continuación.

Compilar y cargar el proyecto
Una vez completados los ajustes anteriores y el diseño de la interfaz de usuario, el proyecto estará listo para compilarse y cargarse. Haga clic en Device en la barra de herramientas de GUI Builder y seleccione Device Property. En la ventana Device Property, puede utilizar la velocidad de transmisión (baud rate) predeterminada o ajustarla según los requisitos de la aplicación. Asegúrese de que el baud rate configurado en el programa Arduino coincida con el establecido en GUI Builder. Una vez completada la configuración, haga clic en Upload para cargar el proyecto en el Smart Display, tal como se muestra a continuación.

Cuando finalice la carga del proyecto, aparecerá el mensaje "Upload project completed". Haga clic en OK para cerrar la ventana, tal como se muestra a continuación.

Una vez finalizada la carga, el Smart Display mostrará la pantalla de inicio, tal como se muestra a continuación.

Después de la pantalla de inicio, el Smart Display pasará a la página de la aplicación cargada, lo que indica que el proyecto se ha compilado y cargado correctamente.

Programar el host Arduino
En este ejemplo se utiliza Arduino IDE v2.0.4 para programar el host Arduino. Para la comunicación mediante CAN Bus se emplean la biblioteca mcp2515_can.h y varias bibliotecas auxiliares. Para obtener más información, consulte el código de Arduino. Al establecer la comunicación entre el host y el Smart Display, es importante comprobar las direcciones asociadas a los distintos objetos. Para obtener más información sobre la comunicación CAN Bus entre el host y el Smart Display, consulte el registro de comunicación de GUI Builder. Las direcciones de los objetos necesarias están definidas en el programa de Arduino IDE, tal como se muestra a continuación.

En la estructura CANopen, el índice del estilo Button corresponde a 0 (0x2000), mientras que el índice del estilo Indicator corresponde a 1 (0x2001). Es importante tener en cuenta el índice de cada objeto. Si se conoce el índice de un objeto, es posible modificar su estado mediante el programa del host Arduino. Los índices correspondientes a cada objeto pueden consultarse en la información de los comandos que aparece en la tabla del registro de simulación que se muestra a continuación:


Aquí se define el tipo de datos de cada objeto. Si es necesario añadir otros objetos, también deberán definirse en el programa sus correspondientes tipos de datos.

La siguiente figura muestra cómo ObjectFunCallback procesa los valores recibidos de cada objeto. El usuario puede modificar el código o añadir lógica adicional para el tratamiento de otros objetos según los requisitos de la aplicación.

Cuando el host Arduino detecta un cambio en el estado del botón físico, envía el valor correspondiente al Smart Display mediante CANopen. Consulte el siguiente código para ver los ID y subíndices utilizados en la estructura de comandos. Esta parte del programa actualiza el valor del Indicator (object index 2) en función del estado del botón físico.

Defina las direcciones de registro de todos los objetos, configure los modos de los pines de los componentes externos, como el botón físico y el LED, como entradas o salidas, y establezca el baud rate, tal como se muestra a continuación:


Por último, en loop() se define la lógica necesaria para ejecutar esta aplicación. Cuando se pulsa el botón físico o el botón táctil del Smart Display, el sistema cambia el color del Indicator mostrado en pantalla y enciende o apaga el LED externo.

Después de verificar y cargar correctamente el programa mediante Arduino IDE, al pulsar el botón físico o el botón táctil del Smart Display se enciende el LED y el Indicator cambia a color verde. Cuando el Indicator aparece en rojo y el LED está apagado, significa que no se está pulsando ni el botón físico ni el botón táctil, tal como se muestra a continuación.

El programa descrito anteriormente puede descargarse desde el enlace de GitHub. En los ejemplos también se incluyen archivos e información adicionales sobre este proyecto de demostración. La configuración real del hardware se muestra a continuación.

Una vez completados estos pasos, se puede utilizar el botón físico o el botón táctil del Smart Display para controlar el estado del Indicator mostrado en pantalla y el LED externo, completando así esta demostración de comunicación CANopen con el Smart Display.
Conclusión
Este ejemplo muestra el funcionamiento y la aplicación de GUI Builder y permite comprender cómo desarrollar aplicaciones de control desde el host mediante CAN Bus. También muestra cómo el host envía y recibe comandos para controlar el Smart Display. A través de este ejemplo, los desarrolladores pueden comprender mejor la comunicación y el control mediante CANopen entre el host y el Smart Display y utilizarlo como referencia para el desarrollo de futuras aplicaciones con Smart Display.