Comunicazione CANopen tra host e Smart Display
Per controllare uno Smart Display sono necessari un'interfaccia di sistema e un protocollo di comunicazione. In questo articolo viene presentato un esempio pratico con Arduino, dal punto di vista del controllo lato host, per mostrare come l'HOST possa inviare comandi e modificare il colore di un Indicator sullo Smart Display. In questo esempio, nell'interfaccia UI viene inserito un pulsante touch e ad Arduino viene collegato un pulsante fisico. Premendo il pulsante fisico o il pulsante touch, il colore dell'Indicator visualizzato sullo schermo cambia e il LED esterno viene acceso o spento.
Questa applicazione mostra come utilizzare una scheda di sviluppo Arduino per controllare uno Smart Display CAN da 3,5 pollici, inclusa la programmazione del pulsante fisico, del pulsante touch, dell'Indicator visualizzato sullo schermo e del LED presente sulla scheda, oltre alla modalità con cui lo Smart Display riceve i comandi dall'HOST. Come controller host viene utilizzato un Arduino Mega 2560 dotato di CAN Bus Shield, che comunica con lo Smart Display tramite CANopen.
Lo schema a blocchi del sistema è riportato di seguito:

Schema a blocchi del sistema
Per questa applicazione sono necessari i seguenti componenti:
- Smart Display CANopen da 3,5 pollici
- Arduino Mega 2560
- CAN Bus Shield per Arduino Mega 2560
- CAN Bus Dongle
- Pulsante fisico
- LED
- Smart Display GUI Builder v0.4.2 o versione successiva
La demo è suddivisa in tre parti:
- Progettazione del progetto in GUI Builder
- Build e upload del progetto
- Programmazione dell'host Arduino
Progettazione del progetto in GUI Builder
Per prima cosa, creare un nuovo progetto e inserire il nome del progetto. Selezionare quindi il tipo di dispositivo; in questo esempio viene utilizzato un dispositivo da 3,5 pollici. Selezionare CANopen come protocollo di comunicazione e impostare l'orientamento del display su Landscape. Successivamente, selezionare Blank Template tra i template UI e fare clic su Create per creare il nuovo progetto, come mostrato di seguito.

Una volta completate queste impostazioni, viene visualizzata una pagina vuota.

Per questo esempio applicativo, aggiungere all'area di lavoro un pulsante touch e un widget Indicator. Selezionare i widget necessari dal pannello dei controlli e trascinarli nell'area di lavoro, come mostrato di seguito.

Build e upload del progetto
Dopo aver completato le impostazioni precedenti e la progettazione dell'interfaccia UI, il progetto è pronto per essere compilato e caricato. Fare clic su Device nella barra degli strumenti di GUI Builder e selezionare Device Property. Nella finestra Device Property è possibile utilizzare il baud rate predefinito oppure modificarlo in base ai requisiti dell'applicazione. Assicurarsi che il baud rate impostato nel programma Arduino corrisponda a quello configurato in GUI Builder. Una volta completate le impostazioni, fare clic su Upload per caricare il progetto sullo Smart Display, come mostrato di seguito.

Al termine dell'upload del progetto viene visualizzato il messaggio "Upload project completed". Fare clic su OK per chiudere la finestra, come mostrato di seguito.

Al termine dell'upload, sullo Smart Display viene visualizzata la schermata di avvio, come mostrato di seguito.

Dopo la schermata di avvio, lo Smart Display passa alla pagina dell'applicazione caricata, indicando che il progetto è stato compilato e caricato correttamente.

Programmazione dell'host Arduino
In questo esempio viene utilizzato Arduino IDE v2.0.4 per programmare l'host Arduino. Per la comunicazione CAN Bus vengono utilizzate la libreria mcp2515_can.h e altre librerie di supporto. Per maggiori dettagli, fare riferimento al codice Arduino. Per stabilire la comunicazione tra l'host e lo Smart Display, è importante verificare gli indirizzi associati agli oggetti. Per ulteriori informazioni sulla comunicazione CAN Bus tra l'host e lo Smart Display, consultare il log di comunicazione in GUI Builder. Gli indirizzi degli oggetti necessari sono definiti nel programma Arduino IDE, come mostrato di seguito.

Nella struttura CANopen, l'index dello stile Button corrisponde a 0 (0x2000), mentre l'index dello stile Indicator corrisponde a 1 (0x2001). È importante tenere conto dell'index associato a ciascun oggetto. Se si conosce l'index di un oggetto, è possibile modificarne lo stato tramite il programma dell'host Arduino. Gli index corrispondenti agli oggetti possono essere individuati nelle informazioni dei comandi riportate nella tabella del log di simulazione mostrata di seguito:


Qui viene definito il tipo di dati di ciascun oggetto. Se è necessario aggiungere altri oggetti, nel programma devono essere definiti anche i relativi tipi di dati.

La figura seguente mostra come ObjectFunCallback gestisce i valori ricevuti da ciascun oggetto. In base ai requisiti dell'applicazione, è possibile modificare il codice o aggiungere la logica necessaria per gestire ulteriori oggetti.

Quando l'host Arduino rileva una variazione dello stato del pulsante fisico, invia il valore corrispondente allo Smart Display tramite CANopen. Fare riferimento al codice seguente per gli ID e i sub-index utilizzati nella struttura dei comandi. Questa parte del programma aggiorna il valore dell'Indicator (object index 2) in base allo stato del pulsante fisico.

Definire gli indirizzi dei registri per tutti gli oggetti, configurare le modalità dei pin per i componenti esterni, come il pulsante fisico e il LED, impostandoli come ingressi o uscite, e configurare il baud rate, come mostrato di seguito:


Infine, in loop() viene definita la logica necessaria per eseguire lo scenario previsto dall'applicazione. Quando viene premuto il pulsante fisico oppure il pulsante touch sullo Smart Display, il sistema modifica il colore dell'Indicator visualizzato sullo schermo e accende o spegne il LED esterno.

Dopo aver verificato e caricato correttamente il programma tramite Arduino IDE, premendo il pulsante fisico oppure il pulsante touch sullo Smart Display si accende il LED e il colore dell'Indicator diventa verde. Quando l'Indicator è rosso e il LED è spento, significa che non è premuto né il pulsante fisico né il pulsante touch, come mostrato di seguito.

Il programma descritto sopra può essere scaricato dal link GitHub. Negli esempi sono inoltre disponibili ulteriori file e informazioni relativi a questo progetto demo. La configurazione hardware effettiva è mostrata di seguito.

Una volta completati questi passaggi, è possibile utilizzare il pulsante fisico oppure il pulsante touch sullo Smart Display per controllare lo stato dell'Indicator visualizzato sullo schermo e il LED esterno, completando così questa demo di comunicazione CANopen con Smart Display.
Conclusione
Questo esempio illustra il funzionamento e l'utilizzo di GUI Builder e consente agli utenti di comprendere come sviluppare applicazioni di controllo lato host tramite CAN Bus. Mostra inoltre come l'host invia e riceve comandi per controllare lo Smart Display. Attraverso questo esempio, gli sviluppatori possono comprendere meglio la comunicazione CANopen e le modalità di controllo tra l'host e lo Smart Display, utilizzandole come riferimento per lo sviluppo di applicazioni basate su Smart Display.