Bibliothèque Serial

La bibliothèque Serial (incluse dans le langage Arduino) est utilisée pour les communications séries asynchrones basées sur le circuit UART.

Ce circuit utilise des ports numériques de la carte (voir Câblage),  que l’on ne peut par conséquent plus utiliser en tant qu’entrées ou sorties numériques.

Grâce à cette bibliothèque, il est possible d’établir des communications simples entre :

  • un Arduino et un ordinateur,
  • deux Arduinos ,
  • un Arduino et tout autre périphérique compatible UART.

 


Câblage

RXTXLe circuit UART de l’Arduino UNO possède un port série, nommé Serial , qui utilise les ports numériques 0 (RX) et 1 (TX).

La carte Arduino Mega dispose de trois ports série supplémentaires :

  • Serial1  : 19 (RX) et 18 (TX),
  • Serial2  : 17 (RX) et 16 (TX),
  • Serial3  : 15 (RX) et 14 (TX).

La communication peut se faire par différents médias :

  • Câbles (USB, série, …)
  • modules de communication sans fil ZigBee
  • modules de transmission radio 433MHz
  • modules Bluetooth
  • ultrasons
  • infrarouges

Arduino – Ordinateur

Le port USB de la carte Arduino utilise lui aussi le circuit UART : pour communiquer avec l’ordinateur relié à la carte, il suffit de le relier via un port USB.

Arduino – Arduino

Pour relier entre eux deux Arduinos par des câbles, il faut utiliser les ports numériques associés aux signaux TX et RX, et mettre en commun leur masse (GND).

Cablage_RXTX

Attention : lorsque le câble USB est relié à un ordinateur, le port Serial  est automatiquement occupé par cette connexion. Il est impossible de l’utiliser avec un autre appareil.

 


Programmation

Avant de pouvoir utiliser un port série (quel que soit le média) il faut l’initialiser, ce qui doit se faire dans la fonction setup():

void setup() { 
   // Initialisation du port série 
   Serial.begin(19200); // la vitesse de transmission est définie ici 
}

D’autres vitesses peuvent être choisies, en fonction de la vitesse souhaitée et de la qualité de la connexion :
300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 bauds (bits par seconde)

Important :
Pour utiliser le moniteur série, celui-ci doit être configuré avec la même vitesse de transmission :

 

Écriture

Du point de vue de l’Arduino, écrire, c’est envoyer des données vers le périphérique connecté.

On distinguera principalement 3 fonctions pour écrire sur le port série :

  • Serial.write() : écriture d’un octet ou d’une chaîne de caractères,
  • Serial.print() : écriture de n’importe quelle valeur convertible en chaîne de caractères,
  • Serial.println(): comme Serial.print(), mais avec un retour à la ligne à la fin.

Exemple :

void loop() { 
   Serial.print("Arduino :"); // Écriture d'une ligne de texte ... 
   Serial.println(" l'essentiel !"); // ... avec retour à la ligne 
   delay(1000); 
}

Visualisation du message dans le moniteur série bouton_moniteur :

 

Lecture

Du point de vue de l’Arduino, lire, c’est recevoir des données depuis le périphérique connecté.

 

Le moniteur série dispose d’une zone de saisie de texte, associée à un bouton Bouton_envoyer pour envoyer le message saisi.

Du coté de l’Arduino (le récepteur),  les données sont d’abord stockées dans une zone mémoire spéciale appelée serial buffer.
Il s’agit d’une zone « tampon », où les données peuvent rester en attendant d’être lues. Dès que des données s’y trouvent la fonction Serial.available()renvoie une valeur supérieure à 0.

Dès que c’est le cas, il faut utiliser une des fonctions de lecture de la bibliothèque Serial.

  • Serial.parseFloat(): lit le buffer jusqu’à pouvoir interpréter le texte comme un float
  • Serial.parseInt() : lit le buffer jusqu’à pouvoir interpréter le texte comme un entier (int) .
  • Serial.peek()  : lit le premier octet (byte) du buffer, mais ne passe pas au suivant.
  • Serial.read()  : lit un octet (byte) du buffer (et l’en retire).
  • Serial.readBytes()  : lit plusieurs octets (byte) du buffer (et les en retire).
  • Serial.readBytesUntil()  : lit des octets (byte) dans le buffer jusqu’à un caractère donné.
  • Serial.readString()  : lit le buffer comme une chaine de caractère (String).
  • Serial.readStringUntil()  : lit le buffer comme une chaine de caractères (String) jusqu’à un caractère donné.

 

void loop() {
   // si le buffer n'est pas vide ...
   while (Serial.available() > 0) {
      int v = Serial.parseInt();
      Serial.print("Vous avez saisi : ");
      Serial.println(v);
   }
}

Pour lire des commandes utilisateurs plus complexes, utiliser les fonctions de ce script.

 

Pour en savoir plus …

https://www.arduino.cc/en/Reference/Serial

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *