As part of a project to read values from a MODBUS RS-485 sensor using a RS-485 Breakout Board for Seeed Studio XIAO and a Seeed Studio XIAO ESP32-S3 I built the test harness described in the wiki post. The test harness setup for a Seeed Studio XIAO ESP32-C3/Seeed Studio XIAO ESP32-C6 didn’t work with my Seeed Studio XIAO ESP32-S3.

I then did some digging looked at schematics and figured out the port mappings were different. This took a while so I tried Microsoft Copilot
I then updated the port assigned for my RS485Sender application

#include <HardwareSerial.h>
HardwareSerial RS485(1);
#define enable_pin D2
void setup() {
Serial.begin(9600); // Initialize the hardware serial with a baud rate of 115200
delay(5000);
Serial.println("RS485 Sender");
// Wait for the hardware serial to be ready
while (!Serial)
;
Serial.println("!Serial done");
//mySerial.begin(115200, SERIAL_8N1, 7, 6); // RX=D4(GPIO6), TX=D5(GPIO7) Doesn't work
RS485.begin(115200, SERIAL_8N1, 6, 5);
// Wait for the hardware serial to be ready
while (!RS485)
;
Serial.println("!RS485 done ");
pinMode(enable_pin, OUTPUT); // Set the enable pin as an output
digitalWrite(enable_pin, HIGH); // Set the enable pin to high
}
void loop() {
if (Serial.available()) {
String inputData = Serial.readStringUntil('\n'); // Read the data from the hardware serial until a newline character
// If the received data is not empty
if (inputData.length() > 0) {
Serial.println("Send successfully"); // Print a success message
RS485.println(inputData); // Send the received data to the hardware serial
}
}
}
I then updated the port assigned for my RS485Receiver application

#include <HardwareSerial.h>
HardwareSerial RS485(1); // Use UART2
#define enable_pin D2
void setup() {
Serial.begin(9600); // Initialize the hardware serial with a baud rate of 115200
delay(5000);
Serial.println("RS485 Receiver");
// Wait for the hardware serial to be ready
while (!Serial)
;
Serial.println("!Serial done");
// mySerial.begin(115200, SERIAL_8N1, 7, 6); // RX=D4(GPIO6), TX=D5(GPIO7) Doesn't seem to work
RS485.begin(115200, SERIAL_8N1, 6, 5);
// Wait for the hardware serial to be ready
while (!RS485)
;
Serial.println("!RS485 done ");
pinMode(enable_pin, OUTPUT); // Set the enable pin as an output
digitalWrite(enable_pin, LOW); // Set the enable pin to low
}
void loop() {
// Check if there is data available from the hardware serial
int x = RS485.available();
if (x) {
String response = RS485.readString();
Serial.println(" RS485 Response: " + response);
}
delay(1000);
}
Getting my test harness RS485Sender and RS485Receiver applications (inspired by Seeedstudio wiki) took quite a bit longer than expected. Using Copilot worked better than expected but I think that might be because after doing some research my prompts were better.





































































































