#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// MAX485 module connections
const int MAX485_DE = 2; // DE pin for the MAX485 module
const int MAX485_RE = 3; // RE pin for the MAX485 module
// LCD module connections
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
// Initialize MAX485 pins
pinMode(MAX485_DE, OUTPUT);
pinMode(MAX485_RE, OUTPUT);
// Set initial state of DE and RE (Receiver mode)
digitalWrite(MAX485_DE, LOW);
digitalWrite(MAX485_RE, LOW);
lcd.print("ESP32 RS485");
lcd.setCursor(0, 1);
lcd.print("Waiting...");
}
void loop() {
// Transmit data from ESP32 A to ESP32 B
sendData("Hello from A", MAX485_DE, MAX485_RE);
delay(2000); // Adjust as needed
// Transmit data from ESP32 B to ESP32 A
sendData("Hello from B", MAX485_DE, MAX485_RE);
delay(2000); // Adjust as needed
}
void sendData(const char *data, int DE, int RE) {
// Switch to transmitter mode
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
Serial.println("Transmitting: " + String(data));
// Transmit data
Serial.write(data);
// Switch back to receiver mode
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
// Display received data on LCD
lcd.clear();
lcd.print("Received:");
lcd.setCursor(0, 1);
while (Serial.available() > 0) {
char receivedChar = Serial.read();
lcd.write(receivedChar);
}
delay(1000); // Display received data for 1 second
}