Communication entre le PC et une carte ARDUINO

L'Arduino communique avec le PC à l’aide de ce que l’on appelle une liaison Série.
La liaison Série est un protocole de communication entre le PC et la carte Arduino via le câble USB permettant un échange d’informations entre vous et votre carte Arduino.

Le plus simple pour piloter un ARDUINO avec un PC est d'utiliser le moniteur série fourni avec l'IDE ARDUINO mais on est très vite limité.

Il est possible de piloter un ARDUINO depuis un PC avec n'importe quel logiciel qui peut émuler le bus série sur un port USB (par exemple Visual Basic, Python, Delphi, C, C++, Processing, Unity, etc...).

Dans tous les programmes que j'utilise et qui sont liés au modélisme ferroviaire, les données échangées entre un Arduino et le PC sont des octets. Un octet est un nombre compris entre 0 et 255. En informatique, un octet est un multiplet de 8 bits codant une information. Dans ce système de codage, s'appuyant sur le système binaire, un octet permet de représenter 8 bits soit 256 valeurs différentes.
Dans le programme de l'Arduino, on utilise l'objet Serial pour transmettre et recevoir des données. Pour envoyer du texte ou des données, l'instruction à utiliser est Serial.print qui permet d’envoyer des données sur la voie série (On peut par exemple envoyer un caractère, une chaine de caractères) ou Serial.println() qui a la même fonction que la précédente et permet en plus un retour à la ligne à la fin du message envoyé.
Pour transmettre un octet de l'Arduino vers le PC, il faut utiliser l'instruction Serial.write(octet)
Pour recevoir un octet envoyé par le PC, on utilise l'instruction Serial.read()

1. Utilisation du moniteur série du logiciel Arduino

Vous trouverez un mode d'emploi complet du moniteur série sur le site https://www.robot-maker.com/ouvrages/tuto-arduino/liaison-serie-com-pc-arduino/

Le moniteur série transmet les nombres codés en ASCII, ce qui n'est pas très pratique pour transmettre un octet à l'Arduino. Par exemple, pour transmettre un octet de valeur 110 à l'Arduino , il faut taper n dans la console car le code ASCII de n est 110 en décimal. On peut trouver une table de codage ASCII en cliquant ici.

2. Visual Basic

2.1 Présentation de Visual Basic

C'est le logiciel que j'utilise pour communiquer avec un Arduino. Il existe plusieurs versions de Visual Basic.
J'utilise la vieille version VB6 qui est compatible avec toutes les versions de Windows, simple à utiliser, et qui suffit largement à nos applications ferroviaires.
VB6 était payant à l'époque et n'est plus commercialisé. Mais on peut encore le télécharger en cliquant sur le lien ci-dessous:
https://vb.developpez.com/msdnvb6/

Maintenant, la firme de Redmond propose la version 2019 de Visual Studio que vous pouvez télécharger en cliquant ici.

2.2 Transmission d'un octet à l'Arduino avec VB6

Un octet est un entier compris entre 0 et 255.
Pour gérer le port série, la meilleure façon est d’utiliser le Microsoft Comm Control distribué avec n’importe quelle édition de Visual Basic. Il suffit simplement de le rajouter dans la liste des contrôles de la barre d’outils comme le montre la photo ci-dessous.



Une fois le contrôle rajouté, son icône apparaît dans la barre des contrôles. Il suffit d’en placer une instance sur la feuille pour pouvoir l’utiliser. Par défaut, ce contrôle s’appellera MSComm1, et on retiendra ce nom pour la suite de l’application :



Voici les commandes Visual Basic qui permettent d'envoyer un octet à l'Arduino

Ouverture du port COM
MSComm1.CommPort = N (N étant le numéro du port)
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True

Fermeture du port COM
MSComm1.PortOpen = False

Envoi d'un octet
Dim octet As Integer
MSComm1.Output = Chr(octet)

Côté Arduino, voici les instructions à insérer dans le programme après void loop() :
{
// reception d'un octet envoyé par le PC
if (Serial.available() > 0)
{
octet = Serial.read();
}

2.3 Exemples de programmes

Vous pouvez télécharger à titre d'exemple deux petits programmes qui permettent d'échanger un octet entre l'Arduino et le PC en cliquant ici. L'un des programmes intitulé console pc est écrit en Visual Basic et l'autre intitulé octet est écrit dans le langage Arduino.

3. PROCESSING

3.1 Présentation du logiciel

Le logiciel PROCESSING est particulèrement bien adapté à l'ARDUINO.
L'interface graphique programmable Processing, véritable "couteau suisse logiciel", écrite en Java (multiplateforme donc...) par le MIT, libre et opensource, donne la possibilité de créer des interfaces graphiques côté PC pour communiquer avec le système Arduino. On peut ainsi commander à la souris ou au clavier la carte Arduino ou bien afficher sur le PC des graphiques à partir des données reçues depuis la carte Arduino. Processing permet également de réaliser de la capture vidéo, du traitement d'image, des applications réseau serveur ou client, de la lecture de son, de la reconnaissance vocale... !! Cette interface utilise un langage dédié facile à prendre en main, très semblable à celui de l'ARDUINO.

Tout d’abord Processing est téléchargeable ici.

On trouve sur le web de nombreux tutoriels pour apprendre à utiliser PROCESSING, par exemple celui de mon-club-elec.fr

Autres tutoriels:

Récupérer une valeur analogique Arduino avec Processing

Une vidéo Youtube en Français.

Pour avoir une interface graphique en 2D, il est conseillé d'utiliser la bibliothèque G4P.
Cette bibliothèque fournit une riche collection de contrôles graphiques 2D. Elle prend également en charge plusieurs fenêtres et un système de gestion des événements simple mais personnalisable.
Pour télécharger G4P, cliquer ici.

On peut trouver un mode d'emploi de G4P en français sur le site de mon-club-elec.

3.2 Transmission d'un octet à l'Arduino avec PROCESSING

Voici un exemple de code permannt de transmettre un octet à l'Arduino.



Retour page ARDUINO

Retour page d'accueil