La communication série sur Arduino structure le dialogue entre votre carte et le monde extérieur. Sans elle, pas de débogage clair, pas de capteurs avancés, pas de modules radio ou Wi-Fi fiables. En maîtrisant quelques fonctions clés et de bonnes pratiques de câblage, vous transformez une carte muette en système communicant.
Dans cet article, je vous accompagne pas à pas pour configurer la liaison série, choisir le bon débit en bauds, relier des périphériques sensibles et éviter les erreurs subtiles qui perturbent les échanges de données. Les exemples concrets et les cas d’usage réels vous serviront de référence pour vos futurs projets.
| Élément clé | Résumé |
|---|---|
| Principe | Échange de données entre l’Arduino et un ordinateur ou autre appareil via USB ou pins TX/RX. |
| Initialisation | Activation avec Serial.begin(9600), choisissant la vitesse de transmission. |
| Envoi de données | Utilisation de Serial.print() ou Serial.println() pour transmettre textes ou valeurs. |
| Réception | Lecture via Serial.available() puis Serial.read() pour récupérer les caractères reçus. |
| Applications | Tests, débogage, échanges avec logiciels externes, contrôle de l’Arduino via PC. |
Comprendre la communication série Arduino et son rôle dans un projet
La communication série Arduino repose sur un protocole simple : des bits transmis les uns après les autres sur une ligne de données. La carte envoie ou reçoit des octets à un débit défini, mesuré en bauds. Ce canal sert à dialoguer avec un ordinateur, un module externe, un capteur intelligent ou un autre microcontrôleur.
Sur les cartes comme l’UNO, la liaison série utilise les broches numériques 0 (RX) et 1 (TX) ainsi que l’interface USB intégrée. Sur des cartes plus évoluées (Mega, Leonardo, etc.), plusieurs ports série matériels coexistent, ce qui offre plus de flexibilité pour connecter plusieurs périphériques en parallèle.
La communication série intervient à toutes les étapes d’un projet : phase de prototypage, diagnostic d’erreurs, transmission de mesures à un PC, envoi de commandes à un module radio ou Bluetooth. Elle devient rapidement une brique centrale de toute architecture Arduino un peu évoluée.
Conseil pratique : prenez l’habitude de réserver un port série dédié au debug lorsque vous utilisez plusieurs liaisons série. Le diagnostic reste lisible et ne perturbe pas le dialogue avec les autres modules.

Les bases : baud rate, configuration et paramètres série
Définir le débit en bauds : quelles vitesses choisir ?
Le débit série se configure en bauds (bits par seconde). Arduino supporte un large éventail de vitesses :
- 300, 600, 1 200, 2 400, 4 800 bauds
- 9 600, 14 400, 19 200, 28 800 bauds
- 31 250, 38 400, 57 600, 115 200 bauds
Dans la pratique, certains débits reviennent en continu :
- 9 600 bauds : débit standard, stable, adapté aux capteurs et aux échanges de commandes simples.
- 38 400 bauds : compromis efficace pour les liaisons plus longues ou légèrement perturbées.
- 115 200 bauds : haute vitesse, idéale pour envoyer beaucoup de données sur une courte distance, par exemple vers le moniteur série Arduino.
Distance, débit et fiabilité : comment trouver le bon équilibre
Le débit série ne se choisit pas au hasard. Il dépend de la longueur du câble, de la qualité du blindage et du niveau de bruit électromagnétique de l’environnement. Plus la vitesse augmente, plus la liaison devient sensible aux perturbations et aux réflexions sur le câble.
Le tableau suivant illustre un compromis réaliste entre distance, débit, taux d’erreurs et latence :
| Distance (m) | Débit (bauds) | Taux d’erreur (%) | Latence typique (ms) |
|---|---|---|---|
| 100 | 115 200 | 0 | 12 |
| 500 | 38 400 | 0,1 | 45 |
| 1 200 | 9 600 | 1,2 | 210 |
À retenir : pour une liaison courte avec un PC via USB, 115 200 bauds fonctionne très bien. Pour un câble qui circule dans une armoire électrique ou dans un environnement industriel, un débit plus bas comme 9 600 ou 38 400 bauds limite les erreurs de trame.

Paramètres série : bits de données, parité, stop
La configuration série classique sur Arduino suit le format 8N1 :
- 8 bits de données
- Aucune parité (N pour None)
- 1 bit de stop
Ce format couvre la majorité des modules grand public et industriels simples. Certains équipements professionnels imposent d’autres combinaisons (7E1, 8E2, etc.). Dans ce cas, la librairie Serial se configure avec la fonction Serial.begin(baud, config).
Initialiser et utiliser Serial sur Arduino : les fonctions indispensables

Initialisation avec Serial.begin()
Le point de départ de tout programme série Arduino réside dans la fonction Serial.begin(). Elle se place dans setup() et définit la vitesse de communication :
void setup() {
Serial.begin(9600); // Débit standard pour un dialogue fiable
}
void loop() {
// Code principal
}
Le débit spécifié doit correspondre exactement à celui configuré dans le terminal série côté PC ou dans le module distant, sans quoi les caractères reçus deviennent illisibles.
Envoyer des données : Serial.print() et Serial.println()
Pour transmettre du texte, des valeurs ou des variables, deux fonctions se révèlent utiles :
Serial.print(): envoie les données sans retour à la ligne.Serial.println(): ajoute un retour chariot en fin de message, pratique pour structurer les logs.
Exemple simple de journalisation de mesures :
int valeurCapteur = 0;
void loop() {
valeurCapteur = analogRead(A0);
Serial.print("Capteur A0 : ");
Serial.println(valeurCapteur);
delay(500);
}
Ce type de sortie reste très utile pendant la phase de prototypage. En ouvrant le moniteur série Arduino, vous suivez l’évolution des données en temps réel et ajustez vos seuils et algorithmes.
Recevoir des données : Serial.available() et Serial.read()
La réception se base sur un tampon interne. Dès que des octets arrivent, ils se stockent dans une file d’attente. Deux fonctions structurent cette lecture :
Serial.available(): indique combien d’octets attendent dans le tampon.Serial.read(): lit le prochain octet disponible (typeintde 0 à 255 ou -1 si rien).
Exemple de lecture d’un caractère et d’action associée :
char commande;
void loop() {
if (Serial.available() > 0) {
commande = Serial.read();
if (commande == 'A') {
digitalWrite(13, HIGH);
Serial.println("LED allumee");
}
else if (commande == 'E') {
digitalWrite(13, LOW);
Serial.println("LED eteinte");
}
}
}
Cette logique sert de base pour des interfaces de commande simples entre un PC et un Arduino, ou entre deux cartes.
Point de vigilance : ne bloquez pas votre code avec des while(Serial.available() == 0) dans loop(), sous peine de figer l’application. Préférez une gestion non bloquante, basée sur des tests ponctuels et des machines à états.
Monitorer, déboguer et analyser les échanges série
Utiliser le moniteur série Arduino efficacement
Le moniteur série intégré à l’IDE Arduino reste un allié de choix. Il sert à :
- afficher l’état interne du programme (variables, compteurs, erreurs) ;
- recevoir des commandes tapées au clavier ;
- valider le bon format des trames échangées avec un module externe.
En sélectionnant le bon débit dans l’interface (/9600/, /115200/ bauds, etc.), vous vérifiez aussitôt la lisibilité des messages. Une série de caractères étranges signale presque toujours une mauvaise configuration de vitesse ou de format.
Structurer les messages pour un débogage lisible
Pour que les logs restent exploitables, une structure régulière apporte un vrai confort. Quelques habitudes utiles :
- ajouter un préfixe clair (
[INFO],[ERREUR],[DEBUG]) ; - séparer les champs par des virgules ou des points-virgules ;
- terminer chaque trame par un retour à la ligne unique ;
- éviter les messages trop verbeux à haute fréquence.
Par exemple, pour un capteur de température et d’humidité, un format temp=23.5;hum=45.2 se parse très facilement côté PC ou dans un script Python.
« Depuis que je structure mes messages série avec un format stable, le débogage des projets complexes et des protocoles personnalisés se fait en une fraction du temps. »
Communication série matérielle vs logicielle : Serial, Serial1 et SoftwareSerial
Ports série matériels : Serial, Serial1, Serial2, Serial3
Les cartes Arduino se différencient par le nombre de ports série matériels disponibles :
- Arduino UNO / Nano : un seul port série matériel (
Serial) partagé avec l’USB. - Arduino Mega : plusieurs ports (
Serial,Serial1,Serial2,Serial3). - Cartes plus récentes (Due, boards ARM, etc.) : ports multiples avec des capacités avancées.
Les ports matériels utilisent un périphérique UART intégré. Ils gèrent le timing des bits avec beaucoup de précision et consomment peu de ressources CPU. Pour des débits élevés ou des protocoles exigeants, ce type de port reste prioritaire.
SoftwareSerial : une solution d’appoint avec des limites
La bibliothèque SoftwareSerial permet de créer une liaison série logicielle sur n’importe quelle paire de broches numériques. Le principe : un code gère lui-même l’échantillonnage des niveaux logiques pour simuler un UART en logiciel.
Cet outil rend service lorsque le port matériel unique de l’UNO est déjà pris par l’USB. Vous pouvez alors relier un module GPS ou un périphérique simple sur deux broches supplémentaires.
ArduinoPiloter un relais 230 V avec Arduino en sécurité : 5 erreurs à éviterEn revanche, les contraintes apparaissent vite :
- débit limité (9 600 ou 19 200 bauds restent raisonnables) ;
- risque de perte de données si d’autres interruptions prennent du temps ;
- difficulté à gérer plusieurs ports logiciels en parallèle.
Limite à garder en tête : pour un projet critique, long terme ou industriel, évitez de baser toute l’architecture sur SoftwareSerial. Préférez une carte avec plusieurs UART matériels ou un convertisseur série externe.
Arduino Serial et choix de la topologie physique
Connexion directe TTL, RS‑232, RS‑485 : comprendre les niveaux logiques
La sortie série d’un Arduino UNO expose des signaux TTL 5 V. Les broches RX/TX ne supportent pas directement les interfaces industrielles comme RS‑232 ou RS‑485. Sans adaptation de niveau, vous mettez la carte en risque de destruction.
Les principales variantes de liaisons série physiques :
- TTL : 0 V / 5 V (ou 3,3 V sur certaines cartes), très courte distance, idéale sur un PCB ou dans un boîtier fermé.
- RS‑232 : tensions ±12 V, portée plus longue, souvent utilisée par les anciens équipements ou certains automates.
- RS‑485 : bus différentiel, longue distance, tolérant aux perturbations électromagnétiques, fréquent en environnement industriel.
Pour interfacer un Arduino avec un port RS‑232 d’un PC industriel, un convertisseur de niveau (type MAX232) devient nécessaire. Pour des réseaux en RS‑485 sur plusieurs centaines de mètres, des modules spécifiques avec transceiver dédié (par exemple basé sur MAX485) s’intègrent sur le bus.
Distance, débit et erreurs : interpréter les performances réelles
Les données de performance illustrent la façon dont distance et débit interagissent :
- à 100 m et 115 200 bauds, le taux d’erreur reste nul et la latence tourne autour de 12 ms dans un câblage adapté ;
- à 500 m et 38 400 bauds, un très léger taux d’erreur (0,1 %) apparaît avec une latence d’environ 45 ms ;
- à 1 200 m et 9 600 bauds, les erreurs montent à environ 1,2 % et la latence grimpe à 210 ms.
Ces valeurs orientent les choix de conception : protocole de retransmission, ajout de CRC, sélection du type de câble, blindage, topologie étoile ou bus.
« Une liaison longue distance série fonctionne correctement uniquement si le couple débit / type de câble / environnement électromagnétique reste cohérent. »
Cas d’usage : quels périphériques connecter en série à Arduino ?
Capteurs intelligents et modules spécialisés
De nombreux dispositifs intègrent un microcontrôleur interne et exposent une interface série. Parmi les plus courants :
- Sondes environnementales : température, pression, humidité (type BME280 lorsqu’il est configuré avec une interface série ou via un convertisseur).
- Convertisseurs ADC haute résolution : par exemple ADS1115, qui fournit des mesures fines et décorrélées des limitations de l’ADC interne de l’Arduino.
- Lecteurs de carte SD : certains modèles proposent une interface série simple à intégrer.
- Afficheurs LCD ou OLED : certains contrôleurs texte ou graphiques se pilotent par trames série.
La logique reste identique : un câble RX/TX/GND, un débit partagé et un protocole d’échange documenté (set de commandes, format des trames de réponse).
Modules radio, Wi‑Fi, Bluetooth et communication sans fil
Nombre de modules radio et sans fil exposent une interface série en plus de leur couche RF. Quelques exemples :
- Modules radio NRF24L01 : souvent pilotés en SPI, mais certains montages hybrides utilisent une passerelle série.
- Modules Wi‑Fi : certains ESP8266 ou ESP‑01 reçoivent des commandes AT par liaison série.
- Modules Bluetooth : notamment le HC‑05, très courant pour relier un smartphone à un Arduino via UART.
Pour approfondir l’intégration d’un module Bluetooth basique avec Arduino, un guide dédié au module HC‑05 et à sa configuration série fournit une base solide (rôle maître / esclave, couplage, code de connexion, etc.).
Intégration dans des systèmes industriels et embarqués
La communication série persiste dans une grande variété de secteurs :
- Automobile : dialogues diagnostic, simulateurs de capteurs, passerelles vers des bus propriétaires.
- Aéronautique : bancs de test, recopies d’instruments, acquisition de données pour maquettes.
- Bancaire : anciens terminaux, lecteurs de cartes ou périphériques de sécurité.
- Transport : balises, contrôleurs embarqués, systèmes d’affichage.
Dans ces contextes, la robustesse prime. Même si certaines installations modernes migrent vers Ethernet ou CAN, l’UART reste présent en fond de chaîne pour la maintenance, la configuration et les mesures internes.
Remarque méthodologique : les données disponibles sur les performances en 2026 restent souvent issues de tests de laboratoire. Les études de cas chiffrées en environnement réel manquent encore, ce qui impose des marges de sécurité dans les spécifications de vos liaisons série.
Protocoles, format des trames et gestion des erreurs
Construire un protocole simple et robuste au-dessus d’UART
La couche série UART ne fournit pas de protocole applicatif. Elle transmet uniquement un flux d’octets. Pour un système fiable, un protocole minimal à vos couleurs devient utile :
- définir un préambule de trame (par exemple
<ou une séquence0xAA 0x55) ; - ajouter une longueur, un type de message, des données ;
- terminer par un checksum ou un CRC ;
- choisir un séparateur clair entre les trames, comme
\nou\r\n.
Un parser côté Arduino lit le flux, repère le préambule, reconstitue les trames complètes et valide leur intégrité avant de les traiter. Cette étape limite nettement l’impact des interférences ou des octets perdus.
Stratégies de gestion d’erreurs et de reprise
Lorsque des erreurs apparaissent (taux de 0,1 % ou 1,2 % selon la distance et le débit), plusieurs stratégies s’appliquent :
- détection d’erreurs par checksum simple (addition des octets) ou CRC plus évolué ;
- réémission sur demande, avec accusés de réception explicites ;
- numérotation des trames pour repérer les manques ;
- timeouts côté récepteur pour éviter les blocages.
Une application de supervision d’armoire électrique ou de chaîne de production adopte par exemple un schéma requête / réponse sécurisé. Chaque commande émise depuis un PC reçoit un accusé de réception valide, sous peine de retransmission.
Architecture logicielle : ne pas bloquer la boucle principale
Lecture non bloquante et gestion de buffer
La fonction Serial.read() lit un octet par un octet. Pour des messages plus longs, un tampon logiciel s’impose. Une approche classique :
- lire les octets disponibles dans
loop(); - les stocker dans un tableau ou une
String; - détecter un caractère de fin de message (par exemple
\n) ; - traiter le message complet dans une fonction dédiée.
Cette stratégie évite les attentes bloquantes tout en respectant la structure des trames. Le code reste réactif pour gérer des interruptions, des actions temps réel ou des rafraîchissements d’affichage.
Organisation du code autour de la série
Une architecture lisible sépare clairement :
- la couche d’accès série (lecture, écriture brute) ;
- la couche protocole (construction / décomposition des trames) ;
- la logique métier (actions à réaliser en fonction des messages).
Cette séparation facilite les tests unitaires. Vous remplacez facilement la couche série par un simulateur ou un script PC pour valider l’algorithme sans brancher le matériel réel.
Compléter ses compétences : Serial, Bluetooth, monitoring et projets avancés
Moniteur série, Bluetooth HC‑05 et autres interfaces
Une fois les bases de la liaison série acquises, l’étape suivante consiste à relier Arduino à des terminaux plus variés :
- utiliser le moniteur série pour diagnostiquer, logger et ajuster les paramètres en direct ;
- implémenter un canal série sans fil avec un module HC‑05 Bluetooth afin de commander la carte depuis un smartphone ;
- combiner plusieurs interfaces (USB, Bluetooth, radio) pour créer un système de télémétrie complet.
Ces scénarios renforcent les réflexes de configuration coordinateur / périphérique et l’habitude de travailler avec des débits différents sur chaque lien.
Aller plus loin : structurer un projet complet autour de la série
Un projet qui s’appuie fortement sur la communication série tire profit d’une planification solide :
- définition claire du jeu de commandes ;
- contraintes de débit et de latence (par exemple 45 ms ou 210 ms selon la topologie) ;
- gestion d’événements asynchrones et des interruptions matérielles ;
- stratégie de test et de simulation côté PC.
Un guide complet sur la plate-forme, comme le guide pour bien débuter avec Arduino, consolide ces notions en replaçant la communication série parmi les autres briques fondamentales : alimentation, E/S numériques, bus I2C, SPI et gestion mémoire.






