Introdução à Seeed Studio XIAO-RS485-Expansion-Board

- A versão V1.1 e anteriores usam controle de direção por software. Consulte o exemplo de direção software-para-software.
Recursos
- Compatível com Seeed Studio XIAO: Projetada para as placas de desenvolvimento Seeed Studio XIAO.
- Comunicação de longa distância: Suporta comunicação RS-485 em distâncias de até 1.200 m (aproximadamente 3.937 ft).
- Entrada DC de 5V ou 12V: Suporta qualquer uma das tensões de alimentação, com um circuito onboard que converte 12V para 5V.
- Dois terminais de 3 pinos: Terminais separados para sinais RS-485 (A, B, GND) e alimentação (INT, 5V, 12V).
- Design compacto: Aproximadamente do tamanho de duas placas XIAO, o que a torna adequada para projetos com restrição de espaço.
- Controle de direção selecionável: Configure a comutação de transmissão/recepção RS-485 automática por hardware ou controlada por software por meio dos resistores de 0 Ω onboard. A placa é enviada configurada para controle automático de direção por hardware por padrão.
- LEDs de atividade RX/TX: Indicam recepção e transmissão de dados.
- LEDs de alimentação de 5V e 12V: Indicam a presença da tensão de entrada correspondente.
Visão geral de hardware
- XIAO RS485 Expansion Board
- Diagrama de indicação da XIAO RS485 Expansion Board V1.2 - Frente

- Diagrama de indicação da XIAO RS485 Expansion Board V1.2 - Verso

Materiais preparados
| Seeed Studio XIAO RS485-Expansion-Board × 2 | Seeed Studio XIAO ESP32-C3 × 2 |
|---|---|
![]() | ![]() |
Esquemático de conexão
- A XIAO RS-485 Expansion Board V1.2 usa o transceptor TP8485E-SR. Os sinais RS-485 são mapeados para os pinos do XIAO da seguinte forma:
RS485_TXpara D4,RS485_RXpara D5 eRS485_DEpara D2.

| Conexões entre duas placas de expansão RS485 |
|---|
![]() |
- Chave 5V OUT/IN: Controla a direção da alimentação no terminal de 5V. Defina como
OUTquando esta placa fornecer 5V para outro dispositivo, ou comoINquando esta placa receber 5V pelo terminal. - Chave 120R: Defina como
ONpara conectar o resistor de terminação de 120 Ω onboard entre as linhas A e B do RS-485, ou comoNCpara desconectá-lo. Para cabos longos, ative a terminação nas duas extremidades físicas do barramento; deixe-a desconectada nas placas intermediárias. - INT: Conexão de interrupção reservada.
- A V1.2 é configurada para controle automático de direção por hardware por padrão, portanto o sketch não precisa alternar a direção por meio do pino D2. Para usar controle de direção por software, altere a posição dos resistores de 0 Ω onboard.
- Localização do resistor de zero ohm para direção automática por hardware

- Localização do resistor de zero ohm para direção manual por software

Visão geral de software
Neste projeto, o XIAO ESP32C3 se comunica com a placa de expansão RS485 usando D4 (GPIO6) e D5 (GPIO7).
Direção automática por hardware para direção automática por hardware
Quando o controle automático de direção por hardware é selecionado, o sketch não precisa controlar o pino DE.
1. Código do transmissor
#include <Arduino.h>
// Hardware -> Hardware: sender (XIAO ESP32C3, RS485 board V1.2).
// Fit R23/R24 for automatic direction; D2 is unused.
void setup() {
Serial.begin(115200); // USB serial monitor.
Serial1.begin(9600, SERIAL_8N1, D5, D4); // RS485: RX=D5, TX=D4.
Serial.println("Hardware -> Hardware sender ready");
delay(500);
}
void loop() {
Serial1.println("Hello from hardware sender"); // Send over the RS485 bus.
Serial.println("Sent: Hello from hardware sender"); // Show status via USB.
delay(1000);
}
Serial.begin(115200)inicia a saída serial USB para o monitor serial.Serial1.begin(9600, SERIAL_8N1, D5, D4)inicia a comunicação RS-485 a 9600 baud. D5 é RX e D4 é TX.- A placa controla a direção de transmissão automaticamente, portanto este sketch não usa o pino D2.
Serial1.println()envia uma linha de texto a cada segundo.Serial.println()exibe o status de envio local via USB; ele não confirma que o receptor recebeu a mensagem.
2. Código do receptor
#include <Arduino.h>
// Hardware -> Hardware: receiver (XIAO ESP32C3, RS485 board V1.2).
// Fit R23/R24 for automatic direction; D2 is unused.
void setup() {
Serial.begin(115200); // USB serial monitor.
Serial1.begin(9600, SERIAL_8N1, D5, D4); // RS485: RX=D5, TX=D4.
Serial.println("Hardware -> Hardware receiver ready");
delay(500);
}
void loop() {
if (Serial1.available()) {
String message = Serial1.readStringUntil('\n'); // Read one RS485 line.
message.trim();
if (message.length() > 0) {
Serial.print("Received: "); // Display on the USB serial monitor.
Serial.println(message);
}
}
}
Serialexibe mensagens via USB.Serial1recebe dados do transceptor RS-485 através do pino D5.Serial1.available()verifica se há bytes recebidos aguardando no buffer da UART.Serial1.readStringUntil('\n')lê até uma nova linha ou até o tempo limite.message.trim()remove espaços em branco ao redor, incluindo o retorno de carro enviado porprintln().- Se a mensagem resultante não estiver vazia,
Serial.print()eSerial.println()a exibem no monitor serial USB. - A placa controla a direção automaticamente, portanto este sketch não usa o pino D2.
3. Resultados do teste
- Abra o monitor serial USB de cada XIAO para visualizar as mensagens enviadas e recebidas.

- Durante a transferência de dados, os indicadores TX e RX onboard piscam para mostrar a atividade correspondente.

Direção automática por hardware para direção por software
1. Código do transmissor
#include <Arduino.h>
// Hardware -> Software: sender (XIAO ESP32C3, RS485 board V1.2).
// Fit R23/R24 for automatic direction; D2 is unused.
void setup() {
Serial.begin(115200); // USB serial monitor.
Serial1.begin(9600, SERIAL_8N1, D5, D4); // RS485: RX=D5, TX=D4.
Serial.println("Hardware -> Software sender ready");
}
void loop() {
Serial1.println("Hello from hardware sender"); // Send over the RS485 bus.
Serial.println("Sent: Hello from hardware sender"); // Show status via USB.
delay(1000);
}
Serial.begin(115200)inicia a saída serial USB.Serial1.begin(9600, SERIAL_8N1, D5, D4)inicia a UART RS-485 com RX em D5 e TX em D4.- Esta placa usa controle automático de direção por hardware, portanto o transmissor não precisa operar o pino D2.
- Em
loop(),Serial1.println()envia uma linha de texto pela RS-485 uma vez por segundo. Serial.println()exibe o status de envio local via USB. Verifique o monitor serial do receptor para confirmar o recebimento.
2. Código do receptor
Com o controle de direção por software, configure D2 como saída e mantenha-o em LOW no receptor para habilitar o modo de recepção.
#include <Arduino.h>
// Hardware -> Software: receiver (XIAO ESP32C3, RS485 board V1.2).
// Fit R25/R26 for software direction; D2 stays LOW to receive.
void setup() {
Serial.begin(115200); // USB serial monitor.
Serial1.begin(9600, SERIAL_8N1, D5, D4); // RS485: RX=D5, TX=D4.
pinMode(D2, OUTPUT);
digitalWrite(D2, LOW); // Keep RS485 in receive mode.
Serial.println("Hardware -> Software receiver ready");
}
void loop() {
if (Serial1.available()) {
String message = Serial1.readStringUntil('\n'); // Read one RS485 line.
message.trim();
if (message.length() > 0) {
Serial.print("Received: "); // Display on the USB serial monitor.
Serial.println(message);
}
}
}
Serialé usado para o monitor serial USB, enquantoSerial1recebe dados RS-485 através de D5.pinMode(D2, OUTPUT)configura D2 para controle de direção. Manter D2 em LOW seleciona o modo de recepção.Serial1.available()verifica se há dados em buffer.readStringUntil('\n')lê uma linha, etrim()remove espaços em branco ao redor.message.length() > 0filtra mensagens vazias. O texto recebido válido é exibido através do monitor serial USB.
3. Resultados do teste
- Abra o monitor serial USB de cada XIAO para visualizar as mensagens enviadas e recebidas.

- Durante a transferência de dados, os indicadores TX e RX onboard piscam para mostrar a atividade correspondente.

Direção por software para direção por software
No controle de direção por software, D2 seleciona o modo de operação: LOW para receber e HIGH para transmitir.
1. Código do transmissor
#include <Arduino.h>
// Software -> Software: sender (XIAO ESP32C3, RS485 board V1.2).
// Fit R25/R26 for software direction; D2 controls transmit/receive.
void setup() {
Serial.begin(115200); // USB serial monitor.
Serial1.begin(9600, SERIAL_8N1, D5, D4); // RS485: RX=D5, TX=D4.
pinMode(D2, OUTPUT);
digitalWrite(D2, LOW); // Keep RS485 in receive mode.
Serial.println("Software -> Software sender ready");
}
void loop() {
digitalWrite(D2, HIGH); // Enable RS485 transmission.
delayMicroseconds(100); // Allow the transceiver to switch.
Serial1.println("Hello from software sender"); // Send over the RS485 bus.
Serial1.flush(true); // Wait for TX only; keep RX buffer intact.
digitalWrite(D2, LOW); // Return to receive mode.
Serial.println("Sent: Hello from software sender"); // Show status via USB.
delay(1000);
}
Serialexibe o status via USB.Serial1envia dados RS-485 através de D4 a 9600 baud.- D2 controla a direção: LOW seleciona o modo de recepção e HIGH seleciona o modo de transmissão.
- Antes de enviar, o sketch define D2 como HIGH e espera brevemente para o transceptor mudar de modo.
Serial1.println()envia o texto.Serial1.flush(true)aguarda o término da transmissão UART sem limpar os dados recebidos.- Após a transmissão, o sketch define D2 como LOW e exibe o status de envio local via USB.
2. Código do receptor
#include <Arduino.h>
// Software -> Software: receiver (XIAO ESP32C3, RS485 board V1.2).
// Fit R25/R26 for software direction; D2 stays LOW to receive.
void setup() {
Serial.begin(115200); // USB serial monitor.
Serial1.begin(9600, SERIAL_8N1, D5, D4); // RS485: RX=D5, TX=D4.
pinMode(D2, OUTPUT);
digitalWrite(D2, LOW); // Keep RS485 in receive mode.
Serial.println("Software -> Software receiver ready");
}
void loop() {
if (Serial1.available()) {
String message = Serial1.readStringUntil('\n'); // Read one RS485 line.
message.trim();
if (message.length() > 0) {
Serial.print("Received: "); // Display on the USB serial monitor.
Serial.println(message);
}
}
}
Serial.begin(115200)inicia a saída serial USB.Serial1.begin(9600, SERIAL_8N1, D5, D4)inicia a UART RS-485 com RX em D5 e TX em D4.- D2 é configurado para controle de direção e mantido em LOW para que o transceptor permaneça em modo de recepção.
- Quando
Serial1.available()indica dados em buffer,readStringUntil('\n')lê uma linha. trim()remove espaços em branco ao redor. Se a mensagem não estiver vazia, o sketch a exibe via USB.
3. Resultados do teste
- Abra o monitor serial USB de cada XIAO para visualizar as mensagens enviadas e recebidas.

- Durante a transferência de dados, os indicadores TX e RX onboard piscam para mostrar a atividade correspondente.

Recursos
- 📄[Schematic] Seeed Studio XIAO-RS485-Expansion-Board Schematic V1.2
- 🗃️[PCB Design Files] Seeed Studio XIAO-RS485-Expansion-Board V1.2 Project
- 📄[Schematic] Seeed Studio XIAO-RS485-Expansion-Board Schematic V1.1
- 🗃️[KiCad Schematic] Seeed Studio XIAO-RS485-Expansion-Board V1.1 SCH
Suporte técnico e discussão sobre o produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.


