Communication CANopen entre l’hôte et le Smart Display
Le contrôle d’un Smart Display nécessite une interface système et un protocole de communication. Cet article présente, du point de vue du contrôle côté hôte, un exemple pratique basé sur Arduino afin d’expliquer comment le HOST envoie des commandes pour modifier la couleur d’un indicateur sur le Smart Display. Dans cet exemple, un bouton tactile est intégré à l’interface utilisateur et un bouton physique est connecté à l’Arduino. Lorsque le bouton physique ou le bouton tactile est actionné, la couleur de l’indicateur affiché à l’écran change et la LED externe est allumée ou éteinte.
Cette application montre comment utiliser une carte de développement Arduino pour contrôler un Smart Display CAN de 3,5 pouces, notamment comment programmer le bouton physique, le bouton tactile, l’indicateur affiché à l’écran et la LED de la carte, ainsi que la manière dont le Smart Display reçoit les commandes envoyées par le HOST. Un Arduino Mega 2560 équipé d’un shield CAN Bus est utilisé comme contrôleur hôte et communique avec le Smart Display via CANopen.
Le schéma fonctionnel du système est présenté ci-dessous :

Schéma fonctionnel du système
Les composants suivants sont nécessaires pour cette application :
- Smart Display CANopen de 3,5 pouces
- Arduino Mega 2560
- Shield CAN Bus pour Arduino Mega 2560
- Dongle CAN Bus
- Bouton physique
- LED
- Smart Display GUI Builder v0.4.2 ou version ultérieure
Cette démonstration se déroule en trois étapes :
- Concevoir le projet dans GUI Builder
- Compiler et charger le projet
- Programmer l’hôte Arduino
Concevoir le projet dans GUI Builder
Commencez par créer un nouveau projet et saisissez un nom de projet. Sélectionnez ensuite le type d’appareil ; cet exemple utilise un appareil de 3,5 pouces. Sélectionnez CANopen comme protocole de communication et définissez l’orientation de l’écran sur Landscape. Sélectionnez ensuite Blank Template parmi les modèles d’interface utilisateur, puis cliquez sur Create pour créer le nouveau projet, comme illustré ci-dessous.

Une fois ces paramètres configurés, une page vierge s’affiche.

Pour cet exemple d’application, ajoutez un bouton tactile et un widget Indicator à l’espace de travail. Sélectionnez les widgets nécessaires dans le panneau de contrôle, puis faites-les glisser vers l’espace de travail, comme illustré ci-dessous.

Compiler et charger le projet
Une fois les paramètres précédents et la conception de l’interface utilisateur terminés, le projet peut être compilé et chargé. Cliquez sur Device dans la barre d’outils de GUI Builder, puis sélectionnez Device Property. Dans la fenêtre Device Property, vous pouvez conserver le débit en bauds par défaut ou le modifier en fonction des besoins de votre application. Assurez-vous que le débit en bauds configuré dans le programme Arduino correspond à celui défini dans GUI Builder. Une fois les paramètres configurés, cliquez sur Upload pour charger le projet sur le Smart Display, comme illustré ci-dessous.

Une fois le chargement du projet terminé, le message "Upload project completed" s’affiche. Cliquez sur OK pour fermer la fenêtre, comme illustré ci-dessous.

Une fois le chargement terminé, le Smart Display affiche l’écran de démarrage, comme illustré ci-dessous.

Après l’écran de démarrage, le Smart Display passe à la page de l’application chargée, indiquant que le projet a été compilé et chargé avec succès.

Programmer l’hôte Arduino
Cet exemple utilise Arduino IDE v2.0.4 pour programmer l’hôte Arduino. La bibliothèque mcp2515_can.h, ainsi que plusieurs bibliothèques complémentaires, est utilisée pour la communication CAN Bus. Pour plus de détails, reportez-vous au code Arduino. Lors de l’établissement de la communication entre l’hôte et le Smart Display, il est important de vérifier les adresses associées aux différents objets. Pour plus d’informations sur la communication CAN Bus entre l’hôte et le Smart Display, consultez le journal de communication dans GUI Builder. Les adresses des objets nécessaires sont définies dans le programme Arduino IDE, comme illustré ci-dessous.

Dans la structure CANopen, l’index du style Button correspond à 0 (0x2000), tandis que l’index du style Indicator correspond à 1 (0x2001). Il est important de relever l’index de chaque objet. Lorsque l’index d’un objet est connu, son état peut être modifié à partir du programme de l’hôte Arduino. Les index correspondant aux différents objets peuvent être identifiés dans les informations de commande du tableau des journaux de simulation ci-dessous :


Le type de données de chaque objet est défini à cet emplacement. Si d’autres objets doivent être ajoutés, leurs types de données correspondants doivent également être définis dans le programme.

La figure suivante montre comment ObjectFunCallback traite les valeurs reçues de chaque objet. Les utilisateurs peuvent modifier le code ou ajouter une logique de traitement pour d’autres objets en fonction des besoins de leur application.

Lorsque l’hôte Arduino détecte un changement d’état du bouton physique, il envoie la valeur correspondante au Smart Display via CANopen. Reportez-vous au code suivant pour identifier les ID et les sub-index utilisés dans la structure de commande. Cette partie du programme met à jour la valeur de l’Indicator (object index 2) en fonction de l’état du bouton physique.

Définissez les adresses de registre de tous les objets, configurez les modes des broches des composants externes, tels que le bouton physique et la LED, en entrée ou en sortie, puis définissez le débit en bauds, comme illustré ci-dessous :


Enfin, la logique nécessaire à ce scénario d’application est définie dans la fonction loop(). Lorsque le bouton physique ou le bouton tactile du Smart Display est actionné, le système modifie la couleur de l’Indicator affiché à l’écran et allume ou éteint la LED externe.

Après avoir vérifié et chargé avec succès le programme à l’aide d’Arduino IDE, une pression sur le bouton physique ou sur le bouton tactile du Smart Display allume la LED et fait passer l’Indicator au vert. Lorsque l’Indicator est rouge et que la LED est éteinte, cela signifie que ni le bouton physique ni le bouton tactile n’est actionné, comme illustré ci-dessous.

Le programme décrit ci-dessus peut être téléchargé via le lien GitHub. Les exemples contiennent également des fichiers et des informations complémentaires concernant ce projet de démonstration. La configuration matérielle réelle est présentée ci-dessous.

Une fois ces étapes terminées, le bouton physique ou le bouton tactile du Smart Display peut être utilisé pour contrôler l’état de l’Indicator affiché à l’écran ainsi que la LED externe, ce qui complète cette démonstration de communication CANopen avec le Smart Display.
Conclusion
Cet exemple présente le fonctionnement et l’utilisation de GUI Builder tout en permettant aux utilisateurs de comprendre comment développer des applications de contrôle côté hôte via CAN Bus. Il montre également comment l’hôte envoie et reçoit des commandes pour contrôler le Smart Display. Cet exemple permet ainsi aux développeurs de mieux comprendre la communication et le contrôle CANopen entre l’hôte et le Smart Display et peut servir de référence pour le développement de futures applications Smart Display.