Close Menu
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
Facebook X (Twitter) Instagram
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us
Facebook X (Twitter) Instagram Pinterest YouTube LinkedIn
How To Electronics
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
How To Electronics
Home » RS-485 Full-Duplex Communication with MAX485 & Arduino
Arduino Projects

RS-485 Full-Duplex Communication with MAX485 & Arduino

Mamtaz AlamBy Mamtaz AlamUpdated:February 2, 20258 Mins Read
Share Facebook Twitter LinkedIn Telegram Reddit WhatsApp
Full-Duplex Communication with MAX485 & Arduino
Share
Facebook Twitter LinkedIn Pinterest Email Reddit Telegram WhatsApp

Overview

This tutorial is about RS-485 Full-Duplex Communication using MAX485 & Arduino. In our previous article, we learned how to implement RS-485 Simplex Communication as well as Half-Duplex Communication using the MAX485 IC with Arduino. This tutorial will introduce you to Full-Duplex RS-485 communication, which allows two-way communication over the same pair of wires simultaneously.

The MAX485 IC is not only capable of Simplex but also adept at Full-Duplex communication, making it a versatile choice for projects involving RS-485 protocols. In this tutorial, we’ll set up an Arduino-based RS-485 network using MAX485 chips to demonstrate how devices can simultaneously send and receive messages.

We will provide a detailed wiring diagram to connect your Arduino boards using MAX485 modules for Full-Duplex communication. We’ll write and explain Arduino code to handle sending and receiving data.


Bill of Materials

We need the following components for this tutorial.

S.N.Components NameQuantityPurchase Link
1Arduino Nano Board2Amazon | AliExpress
2MAX485 Modbus Module4Amazon | AliExpress
3Connecting Wires30Amazon | AliExpress
4Breadboard2Amazon | AliExpress




MAX485 Module

The MAX485 IC is a low-power transceiver designed for RS-485 communication. It is widely used in industrial and commercial applications for robust, long-distance data transmission.

It operates on a 5V power supply and features both differential signaling and high noise immunity, making it ideal for environments with significant electrical interference. The MAX485 can achieve communication speeds of up to 2.5 Mbps over distances of up to 1200 meters, providing reliable and efficient data exchange.

This IC supports half-duplex communication, allowing data to be transmitted and received over a single pair of wires, though not simultaneously. It includes driver enable and receiver enable pins, which can be controlled to switch between transmitting and receiving modes. It is a half-duplex driver with a Unit Load (UL) rating of 1 and therefore you can have up to 32 MAX485s on a single RS-485 bus.

Specifications of MAX485 Module

  • Configuration: Half-Duplex
  • Data Rate: Up to 2.5 Mbps
  • Data Rate at 1200 m: 110 Kbps
  • Slew-rate Limited: No
  • Quiescent Current: 300 µA
  • Number of Receivers on the Bus: 32
  • Pin Count: 8
  • Working Voltage: 5V
  • Driver Output Voltage Range: -7V to +12V
  • Receiver Input Sensitivity: ±200 mV
  • Receiver Input Voltage Range: -7V to +12V
  • Thermal Shutdown Protection: Yes
  • ESD Protection: ±15 kV (Human Body Model)
  • Propagation Delay: 50 ns (Typical)
  • Operating Temperature Range: -40°C to +85°C
  • Package Types: PDIP, SOIC, and TSSOP
  • Enable/Disable Time: 600 ns (Typical for driver enable), 200 ns (Typical for receiver enable)
  • Short-circuit Current: 250 mA (Driver)


MAX485 Pinout Table

MAX485 Pinout

Pin Number Pin Name Description
1 RO Receiver Output: Outputs the received data to the microcontroller.
2 RE Receiver Enable: Enables (low) or disables (high) the receiver.
3 DE Driver Enable: Enables (high) or disables (low) the driver.
4 DI Driver Input: Takes input data to be transmitted over the RS-485 bus.
5 GND Ground: Provides the ground reference for the IC.
6 A Non-inverting Driver Output/Receiver Input: One of the differential signal lines for RS-485 communication.
7 B Inverting Driver Output/Receiver Input: The other differential signal line for RS-485 communication.
8 VCC Power Supply: Should be connected to a 5V power source.

 

MAX485 Module Schematic

The provided schematic shows how to set up RS-485 communication using the MAX485 IC, which helps in converting regular UART signals to differential signals. This conversion is important because differential signals can travel longer distances with less noise interference.

MAX485 Schematic

The design includes a 120Ω termination resistor (R7) between the A and B lines to match the bus impedance, which helps in reducing signal reflections and maintaining clear communication. Additionally, 20kΩ pull-up (R6) and pull-down (R5) resistors keep the A and B lines stable, preventing them from picking up noise when not in use.

For power stability, the schematic uses capacitors C1 (10µF) and C2 (0.1µF) to filter out any noise from the power supply, ensuring the MAX485 IC operates smoothly. An LED (D1) with a 1kΩ resistor (R8) is included to indicate when the circuit is powered, making it easier to troubleshoot and confirm that the device is on and working.




Achieving Full-Duplex Communication in RS-485 (MAX485)

In Full-Duplex communication mode, data can flow in both directions between devices simultaneously. This setup is common in systems where continuous bi-directional information sharing is required, such as in real-time communication and interactive systems.

Full Duplex Communication

The MAX485 IC is only designed to handle half-duplex communication, means either it can transmit or receive data one at a time.

To achieve full-duplex communication in RS-485 using the MAX485 IC, you need to use two MAX485 modules per device: one dedicated to transmitting (TX) and the other to receiving (RX). This setup allows simultaneous two-way data transfer over two pairs of wires. Each device will use one pair of wires for transmitting data and another pair for receiving data, enabling both devices to communicate with each other in real-time without waiting for the line to be clear.

In a full-duplex RS-485 configuration, the transmitting module’s Driver Enable (DE) and Receiver Enable (RE) pins are managed to control when the device is sending data. The DE pin is set high to enable the driver for data transmission, while the RE pin is set low to disable the receiver during this time.

Conversely, the receiving module’s DE pin is set low to disable its driver, and the RE pin is set low to enable the receiver, allowing it to continuously listen for incoming data. This way, both the transmitter and receiver can operate independently, with the transmitter constantly sending data and the receiver continuously listening and processing incoming data.


MAX485 Arduino Full-Duplex Communication Hardware Setup

The circuit and connection diagram to achieve a full-duplex communication in MAX485 IC using Arduino is given below. Follow the schematic for connection diagram.

Full Duplex Communication in MAX485 Arduino Circuit

Arduino 1 (Left Side in the Diagram)

Transmitting Module (Top MAX485):

  • DE (Driver Enable): Connected to GND.
  • RE (Receiver Enable): Connected to a digital pin (e.g., D2) to control the reception.
  • DI (Driver Input): Not Connected.
  • RO (Driver Output): Connected to the TX pin (D11) of Arduino 1.
  • A and B Pins: Connected to the A and B lines of the RS-485 bus for transmitting data.
  • VCC: Connected to 5V.
  • GND: Connected to GND.

Receiving Module (Bottom MAX485):

  • DE (Driver Enable): Connected to a digital pin (e.g., D3) to control the reception.
  • RE (Receiver Enable): Connected to GND.
  • DI (Driver Input): Connected to the RX pin (D10) of Arduino 1.
  • RO (Driver Output): Not Connected.
  • A and B Pins: Connected to the A and B lines of the RS-485 bus for receiving data.
  • VCC: Connected to 5V.
  • GND: Connected to GND.



Arduino 2 (Right Side in the Diagram)

Transmitting Module (Top MAX485):

  • DE (Driver Enable): Connected to GND.
  • RE (Receiver Enable): Connected to a digital pin (e.g., D2) to control the reception.
  • DI (Driver Input): Not Connected.
  • RO (Driver Output): Connected to the TX pin (D11) of Arduino 2.
  • A and B Pins: Connected to the A and B lines of the RS-485 bus for transmitting data.
  • VCC: Connected to 5V.
  • GND: Connected to GND.

Receiving Module (Bottom MAX485):

  • DE (Driver Enable): Connected to a digital pin (e.g., D3) to control the reception.
  • RE (Receiver Enable): Connected to GND.
  • DI (Driver Input): Connected to the RX pin (D10) of Arduino 2.
  • RO (Driver Output): Not Connected.
  • A and B Pins: Connected to the A and B lines of the RS-485 bus for receiving data.
  • VCC: Connected to 5V.
  • GND: Connected to GND.

MAX485 Full Duplex Communication Setup


Sender/Receiver Code

Here is the sender and receiver code for setting MAX485 IC with Arduino for full-duplex communication.

This code sets up full-duplex communication using RS-485, allowing both Arduino 1 and Arduino 2 to send and receive data simultaneously. The DE and RE pins are used to control the transmission and reception modes of the MAX485 module. When data is available from the serial monitor, the code sets the DE pin high to enable the driver and the RE pin high to disable the receiver, allowing the Arduino to send data over the RS-485 bus.

After sending the data, the DE pin is set low to disable the driver, and the RE pin is set low to enable the receiver. The code then checks if there is any data available on the RS-485 bus. If data is available, it reads the data and prints it to the serial monitor. This setup ensures that both Arduinos can communicate with each other in a full-duplex manner, simultaneously handling sending and receiving operations.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <SoftwareSerial.h>
 
#define DE_PIN 2  // Pin to control DE (Driver Enable)
#define RE_PIN 3  // Pin to control RE (Receiver Enable)
#define TX_PIN 11  // TX pin for SoftwareSerial
#define RX_PIN 10  // RX pin for SoftwareSerial
 
SoftwareSerial rs485Serial(TX_PIN, RX_PIN); // RX, TX
 
void setup() {
  Serial.begin(9600);
  rs485Serial.begin(9600);
 
  pinMode(DE_PIN, OUTPUT);
  pinMode(RE_PIN, OUTPUT);
 
  digitalWrite(DE_PIN, HIGH); // Enable driver
  digitalWrite(RE_PIN, LOW);  // Enable receiver
 
  Serial.println("Ready to communicate in full-duplex mode");
}
 
void loop() {
  // Check if data is available from the Serial Monitor
  if (Serial.available()) {
    String dataToSend = Serial.readStringUntil('\n');
    
    digitalWrite(DE_PIN, HIGH);  // Enable driver
    digitalWrite(RE_PIN, HIGH);  // Disable receiver
 
    rs485Serial.println(dataToSend);  // Send data
    Serial.println("Sent: " + dataToSend);
 
    delay(10);  // Brief delay to ensure data is sent
 
    digitalWrite(DE_PIN, LOW);   // Disable driver
    digitalWrite(RE_PIN, LOW);   // Enable receiver
  }
 
  // Check if data is available from the RS-485 bus
  if (rs485Serial.available()) {
    String receivedData = rs485Serial.readStringUntil('\n');
    Serial.println("Received: " + receivedData);
  }
}



Testing Full Duplex Communication

To test the full-duplex communication setup, first, upload the provided code to both Arduino boards. Ensure that all connections are made correctly according to the wiring diagram and that both Arduinos are properly connected to their respective MAX485 modules. Once the code is successfully uploaded to both boards, you can proceed with the testing phase.

Open the Serial Monitor for each Arduino in the Arduino IDE. This will allow you to send and receive messages between the two boards. Type a message into the Serial Monitor of each Arduino and press the “Send” button in both Serial Monitors simultaneously.

You will observe that the message sent from Serial Monitor 1 is received by Serial Monitor 2 and vice versa. This confirms that the full-duplex communication is working as intended. You can continue to send messages back and forth to further validate the successful implementation of full-duplex communication using the MAX485 modules and Arduino.

This demonstrates how you can effectively use full-duplex RS-485 communication in your projects using the Arduino & MAX485 Module.

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email Reddit Telegram WhatsApp
Previous ArticleRS-485 Half-Duplex Communication with MAX485 & Arduino
Next Article 220V AC Light/Fan Dimmer using TRIAC & Arduino

Related Posts

DC Energy Meter using Arduino

Build a DC Energy Meter using Arduino – 32V/5A

Updated:August 26, 20252K
Interfacing ADXL375 Accelerometer with Arduino

Interfacing ADXL375 Accelerometer with Arduino (±200g)

Updated:June 28, 2025
PZEM-004T Arduino Energy Meter

DIY AC Energy Meter using PZEM-004T & Arduino

Updated:March 6, 20258K
Interfacing BMI160 Accelerometer & Gyroscope with Arduino

Interfacing BMI160 Accelerometer & Gyroscope with Arduino

Updated:February 2, 20259K
Password Based Door Lock Security System Using Arduino & Keypad

Password Based Door Lock Security System Using Arduino & Keypad

Updated:February 2, 20252436K
Earthquake Detector Alarm with with Accelerometer & Arduino

Earthquake Detector Alarm with Accelerometer & Arduino

Updated:February 2, 2025661K
Add A Comment

CommentsCancel reply

Latest Posts
IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

May 31, 2026
DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

May 10, 2026
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

May 2, 2026
A Guide to Sourcing Obsolete ICs for Vintage Projects

Beyond AliExpress: A Guide to Sourcing Obsolete ICs for Vintage Projects

April 21, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

April 27, 2026
Building a Smart Sensor Node with a BLE Microcontroller

Building a Smart Sensor Node with a BLE Microcontroller

February 26, 2026
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

April 27, 2026
DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

DIY Colorimeter using AS7265x Spectroscopy Sensor & ESP32

February 1, 2026
Top Posts & Pages
  • 12V DC to 220V AC Inverter Circuit & PCB
    12V DC to 220V AC Inverter Circuit & PCB
  • IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
    IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
  • Designing of MPPT Solar Charge Controller using Arduino
    Designing of MPPT Solar Charge Controller using Arduino
  • ECG Graph Monitoring with AD8232 ECG Sensor & Arduino
    ECG Graph Monitoring with AD8232 ECG Sensor & Arduino
  • How to use INA226 DC Current Sensor with Arduino
    How to use INA226 DC Current Sensor with Arduino
  • IoT Based Electricity Energy Meter using ESP32 & Blynk
    IoT Based Electricity Energy Meter using ESP32 & Blynk
  • Buck Converter: Basics, Working, Design & Application
    Buck Converter: Basics, Working, Design & Application
  • How to use INA219 DC Current Sensor Module with Arduino
    How to use INA219 DC Current Sensor Module with Arduino
Categories
  • Arduino Projects (197)
  • Articles (60)
    • Learn Electronics (19)
    • Product Review (15)
    • Tech Articles (28)
  • Electronics Circuits (46)
    • 555 Timer Projects (21)
    • Op-Amp Circuits (7)
    • Power Electronics (13)
  • IoT Projects (204)
    • ESP32 MicroPython (7)
    • ESP32 Projects (81)
    • ESP32-CAM Projects (15)
    • ESP8266 Projects (76)
    • LoRa/LoRaWAN Projects (22)
  • Microcontrollers (38)
    • AMB82-Mini IoT AI Camera (4)
    • BLE Projects (18)
    • STM32 Projects (19)
  • Raspberry Pi (93)
    • Raspberry Pi Pico Projects (57)
    • Raspberry Pi Pico W Projects (12)
    • Raspberry Pi Projects (24)
Follow Us
  • Facebook
  • Twitter
  • Pinterest
  • Instagram
  • YouTube
About Us

“‘How to Electronics’ is a vibrant community for electronics enthusiasts and professionals. We deliver latest insights in areas such as Embedded Systems, Power Electronics, AI, IoT, and Robotics. Our goal is to stimulate innovation and provide practical solutions for students, organizations, and industries. Join us to transform learning into a joyful journey of discovery and innovation.

Copyright © How To Electronics. All rights reserved.
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us

Type above and press Enter to search. Press Esc to cancel.

Ad Blocker Enabled!
Ad Blocker Enabled!
Looks like you're using an ad blocker. Please allow ads on our site. We rely on advertising to help fund our site.