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
Le 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).
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
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()
: commeSerial.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 :
Lecture
Le moniteur série dispose d’une zone de saisie de texte, associée à un bouton 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 unfloat
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 …