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).
Programmation
Écriture
Du point de vue de l’Arduino, écrire, c’est envoyer des données vers le périphérique connecté.
1 2 3 4 5 6 7 8 9 10 |
void setup() { // Initialisation du port série Serial.begin(9600); // la vitesse de transmission est définie ici } 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
Du point de vue de l’Arduino, écrire, 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 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 .
- parseFloat() : lit le buffer jusqu’à pouvoir interpréter le texte comme un float .
- parseInt() : lit le buffer jusqu’à pouvoir interpréter le texte comme un int .
- peek() : lit le premier octet du buffer, mais ne passe pas au suivant.
- read() : lit un octet du buffer (et l’en retire).
- readBytes() : lit plusieurs octets du buffer (et les en retire).
- readBytesUntil() : lit des octets dans le buffer jusqu’à un caractère donné.
- readString() : lit le buffer comme une chaine de caractère .
- readStringUntil() : lit le buffer comme une chaine de caractères jusqu’à un caractère donné.
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { Serial.begin(9600); } 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 …