Communication RS485 avec Arduino : guide complet avec exemples

  • Connexion et utilisation du module MAX485 pour établir une communication RS485 avec Arduino.
  • Comment mettre en œuvre une communication simplex, semi-duplex et full-duplex pour différents besoins.
  • Contrôle d'appareils sur le même bus RS485 avec plusieurs Arduinos.

rs485

La communication série est l’un des moyens les plus courants d’échange de données entre appareils électroniques. Cependant, lorsque les distances augmentent ou que l'environnement présente des interférences électromagnétiques, les signaux de communication peuvent être sujets à des erreurs. C'est là qu'intervient la norme de communication RS485, offrant une alternative robuste et efficace. Arduino, par sa polyvalence, nous permet de profiter pleinement de ce protocole de manière assez simple.

Dans cet article, nous verrons comment la communication RS485 peut être implémentée entre plusieurs Arduinos à l'aide de modules basés sur le MAX485 intégré, une puce qui convertit les signaux TTL (depuis Arduino) en RS485 et vice versa. Tout au long de ce didacticiel, nous aborderons à la fois les concepts de base et les exemples pratiques qui vous permettront d'implémenter une communication simplex, semi-duplex et full-duplex entre les microcontrôleurs Arduino, et expliquerons comment étendre ce système de communication pour gérer plusieurs appareils en un seul. Bus RS485.

Qu'est-ce que le RS485 ?

Le RS485 est une norme de communication largement utilisée dans l'industrie, connue pour son solidité et sa capacité à résister longue distance transmission, même dans des environnements industriels bruyants. Contrairement à d'autres types de communication série, tels que RS232, RS485 permet de connecter plusieurs appareils sur le même bus, ce qui le rend idéal pour les applications d'automatisation et de contrôle industriels.

Ce protocole résiste au bruit électromagnétique grâce au fait qu'il utilise un système de signalisation différentielle, ce qui signifie que les données sont envoyées sur deux fils, A et B, qui sont des versions opposées en tension. Cela permet d'annuler facilement tout bruit capté dans les câbles, garantissant ainsi l'intégrité du signal.

L'un des principaux avantages du RS485 est que prend en charge des distances jusqu'à 1200 mètres et des vitesses allant jusqu'à 35 Mbps sur de courtes distances, ce qui en fait un protocole idéal pour les applications industrielles et de contrôle dans les environnements où un long câblage est nécessaire.

Modes de communication RS485

brochage RS485

En communication RS485, nous pouvons configurer le système de trois manières différentes : simplex, semi-duplex et full-duplex. Chacun a ses particularités et est mis en œuvre selon les besoins du projet.

Communication simplexe

En mode simplex, la communication ne se fait que dans un seul sens, c'est-à-dire qu'un seul appareil fait office de émetteur et un autre comme récepteur. Ceci est utile dans les situations où vous souhaitez simplement envoyer ou recevoir des données sans avoir besoin de commentaires.

Par exemple, nous pouvons mettre en place un système dans lequel un Arduino lit une valeur de capteur et l'envoie à un autre appareil qui la reçoit simplement. Dans ce cas, comme les données ne circulent que dans un seul sens, certains éléments de contrôle supplémentaires peuvent être supprimés, rendant le système plus simple et plus économique.

Communication semi-duplex

La plupart des applications RS485 sur Arduino sont implémentées en mode semi-duplex car cela nécessite uniquement deux fils, et vous permet à la fois d'envoyer et de recevoir des données, mais pas simultanément. Autrement dit, si un appareil envoie des données, les autres appareils doivent être en mode réception, et vice versa.

Pour basculer entre les modes de transmission et de réception, utilisez broches supplémentaires (RE/DE) sur le module MAX485, que vous contrôlerez à partir du code pour déterminer si l'appareil doit envoyer ou recevoir à un moment donné.

Ce mode est particulièrement utile si vous avez plusieurs appareils sur le même bus qui doivent communiquer entre eux, mais pas simultanément.

Communication en duplex intégral

En mode full-duplex, les appareils peuvent envoyer et recevoir des données en même temps. Cependant, pour implémenter le full-duplex en RS485, deux paires de fils torsadés, ce qui augmente le coût et la complexité du câblage. De plus, vous aurez besoin de deux modules MAX485 pour chaque appareil afin de gérer les canaux de transmission et de réception séparément.

Composants requis pour la communication RS485 avec Arduino

Pour implémenter un système de communication RS485 sur Arduino, vous aurez besoin des composants suivants :

  • Un ou plusieurs Arduino : N'importe quel modèle Arduino fera l'affaire, mais dans ce tutoriel, nous utiliserons Arduino UNO et Arduino MEGA comme exemples.
  • Modules MAX485 : Ces modules vous permettent de convertir les signaux TTL d'Arduino en RS485 et vice versa. Ils sont très bon marché et faciles à trouver dans des magasins comme AliExpress ou eBay.
  • Résistances de terminaison : Une résistance comprise entre 120 ohms est généralement placée à chaque extrémité du bus pour éviter les réflexions dans le signal. Sur de courtes distances, il est possible de s'en passer, mais dans des installations plus longues, ils sont indispensables pour maintenir l'intégrité du signal.
  • Câbles à paires torsadées : Il est recommandé d'utiliser des câbles à paires torsadées pour minimiser les interférences électromagnétiques, notamment dans les environnements industriels bruyants.

Schéma général de connexion

Connectez les modules MAX485 à un Arduino est assez simple. Les broches les plus importantes sont A et B, qui correspondent aux lignes de bus RS485. Ces broches doivent être connectées à tous les appareils du bus. De plus, le module possède des broches RE et DE qui contrôlent si le module est en mode récepteur ou émetteur.

De manière générale, la connexion des modules à l'Arduino se fait de la manière suivante :

  • VCC et GND du module se connectent à VCC et GND sur l'Arduino.
  • DI (Data Input) du module se connecte à la broche TX de l'Arduino si le module doit agir comme un émetteur.
  • RO (Receiver Output) du module se connecte à la broche RX de l'Arduino si le module doit agir comme un récepteur.
  • DE et RE doivent être contrôlés à partir d'une broche numérique Arduino pour basculer entre les modes de transmission et de réception.

Si vous avez uniquement besoin que le module fonctionne comme émetteur ou récepteur, vous pouvez connecter RE et DE directement à HIGH ou LOW. Cependant, pour les communications plus complexes où l'appareil doit basculer entre l'émission et la réception, il est préférable de contrôler ces broches depuis le logiciel.

Exemples de code pour la communication RS485

Ci-dessous plusieurs exemples couvrant les différentes configurations de communication avec RS485 sur Arduino.

Communication simplexe

Code émetteur

Pour un système simplexe de base où nous n’avons qu’un seul émetteur et un seul récepteur, le code de l’expéditeur pourrait ressembler à ceci :

void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }

Code du récepteur

Le récepteur lira simplement les données arrivant via le port série :

void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }

Communication semi-duplex

Dans cet exemple, nous implémentons un système semi-duplex dans lequel les appareils alternent entre l'envoi et la réception de données.

Code enseignant

const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, HIGH); Serial.write('H'); delay(100); digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }

Code esclave

const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); delay(100); digitalWrite(reDePin, HIGH); Serial.write(data + 1); } }

Communication en duplex intégral

Pour mettre en œuvre une communication full-duplex, deux modules MAX485 par Arduino seront nécessaires. Chaque paire de modules gérera une ligne de données : une pour la transmission et une pour la réception.

Le code sera similaire aux exemples précédents, mais dans ce cas, les deux appareils émettront et recevront toujours simultanément.

Extension à plusieurs appareils en RS485

Le RS485 a la capacité de connecter jusqu'à 32 appareils sur un seul bus et, dans des cas particuliers, il peut en atteindre davantage. Cela en fait un excellent choix pour les projets impliquant plusieurs microcontrôleurs ou appareils. Pour identifier chacun d'entre eux sur le réseau, il est courant de mettre en œuvre une adresse ou un identifiant pour chaque appareil.

Dans ce cas, le maître enverra un message avec l'adresse de l'appareil avec lequel il souhaite communiquer, et seul cet appareil se chargera de traiter le message et de donner une réponse.

A cela s'ajoute la possibilité d'utiliser protocoles plus complexes tels que MODBUS, qui permettent la création de réseaux hautement efficaces et sécurisés dans l'industrie.

Pour des projets maison ou des applications moins exigeantes, vous pouvez simplement attribuer un identifiant à chaque Arduino et leur faire répondre uniquement aux messages qui leur sont destinés.


Soyez le premier à commenter

Laisser un commentaire

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

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.