Communication série Arduino : maîtriser l'UART, bases et dépannage
Arduino Serial : Communication série par Arduino
Contexte de la communication série
Quand microcontrôleur/microprocesseur doit communiquer avec l'extérieur, il fournit des paquets de 8 bits. Pour qu'un système communique avec un autre, 8 fils seraient nécessaires (communication parallèle) — impraticable : distorsion du signal sur longue distance, coût élevé du faisceau 8 fils.
D'où le besoin d'un nouveau protocole : communication série — seulement 3 fils pour transmettre les 8 lignes de données.
Protocole série
En série, les 8 bits sont convertis en flux série par registre décalage parallèle-série (émetteur). Côté réception, registre série-parallel convertit en 8 bits parallèles. Deux modes : synchrone (bloc de données à la fois) et asynchrone (octet par octet). Majoritairement asynchrone.
Trois types de systèmes de communication série :
- Simplexe : transmission seule
- Half-duplex : transmission OU réception, pas simultané
- Full-duplex : transmission ET réception simultanées
Protocole série = RS232. Un octet de données encadré entre bit de start et bit de stop = tramage (framing). Standard initial pour PC, bien avant logique TTL. En RS232 : logique 1 = -1 à -25V ; logique 0 = +3 à +25V. Pour compatibilité TTL, convertisseur de tension requis — CI le plus utilisé : MAX232. Arduino a capacité intégrée compatibilité TTL/port PC standard.
Programmation Arduino pour communication série
Arduino a bibliothèque intégrée RS232 — pas besoin d'écrire le protocole, la bibliothèque gère l'intégrité des données.
Fonctions principales :
- Serial.begin(vitesse) — Dans
void setup(). Vitesse en bauds (ex: 9600 bauds courant). Définit vitesse envoi/réception. - Serial.available() — Vérifie si données série disponibles. Retourne 0 = aucune donnée ; >0 = octets disponibles.
- Serial.read() — Lit octet dans buffer. Par défaut type
char; lecture renvoie valeur décimale (ex: envoi '1' → lecture 49 = code ASCII de '1'). - Serial.println(valeur) — Affiche valeur dans moniteur série IDE et l'envoie sur port. Ajoute saut de ligne.
- Serial.flush() — Vide les valeurs parasites dans les buffers série.
Exemple de programmation port série Arduino
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
char donnee = Serial.read();
Serial.print("Reçu : ");
Serial.println(donnee);
}
}
Téléversez ce programme et modifiez-le pour votre compréhension et pratique.
Lectures complémentaires :
- Comment programmer PIC18 Microcontroller — Tutoriel pas à pas
- MAX232 : Construction, fonctionnement, types et applications
- 10+ Outils conception & simulation pour ingénieurs élec/électro en ligne
- 15 Apps Android indispensables pour ingénieurs & étudiants élec/électro
- Projet circuit interrupteur à applaudissements (Clap Switch) avec timer 555
- Comment trouver la valeur d'une résistance brûlée (3 méthodes pratiques)
Technologie industrielle
- MQTT vs DDS : Choisir le bon protocole M2M pour l'IoT
- Communication IIoT industriel : 6 protocoles d'infrastructure éprouvés
- Comprendre le flux de données : du simplex au full-duplex
- Communication de données optique : exploiter la lumière pour une transmission haut débit sans interférences
- Comprendre les protocoles réseau : de la couche physique à l'arbitrage avancé
- Microprocesseurs : l'évolution de l'informatique à programme stocké
- Intégration I2C fluide entre Arduino et Raspberry Pi 2 pour projets IoT de capteurs
- Transfert de données magnétique sans fil Arduino + capteur 3D Infineon TLE493D
- Faciliter la communication sourd-aveugle avec 1Sheeld et Arduino