Seeed Studio XIAO-RS485-Expansion-Board 入門ガイド

ヒント
- V1.1 およびそれ以前のバージョンではソフトウェア方向制御を使用します。ソフトウェアからソフトウェア方向の例を参照してください。
特長
- Seeed Studio XIAO と互換: Seeed Studio XIAO 開発ボード向けに設計されています。
- 長距離通信: 最大 1,200 m(約 3,937 ft)までの RS-485 通信をサポートします。
- 5V または 12V DC 入力: どちらの電源電圧にも対応し、オンボード回路で 12V を 5V に変換します。
- 2 つの 3 ピンターミナル: RS-485 信号(A、B、GND)用と電源(INT、5V、12V)用のターミナルを分離しています。
- コンパクト設計: XIAO ボード約 2 枚分のサイズで、スペースに制約のあるプロジェクトに適しています。
- 選択可能な方向制御: オンボードの 0 Ω 抵抗を設定することで、ハードウェア自動またはソフトウェア制御の RS-485 送受信切り替えを構成できます。出荷時はハードウェア自動方向制御に設定されています。
- RX/TX 動作 LED: データの受信および送信を表示します。
- 5V および 12V 電源 LED: 対応する入力電圧の有無を表示します。
ハードウェア概要
- XIAO RS485 Expansion Board
- XIAO RS485 Expansion Board 表示図 V1.2 表面

- XIAO RS485 Expansion Board 表示図 V1.2 裏面

準備するもの
接続回路図
- XIAO RS-485 Expansion Board V1.2 は TP8485E-SR トランシーバを使用しています。RS-485 信号は次のように XIAO のピンに割り当てられます:
RS485_TXは D4、RS485_RXは D5、RS485_DEは D2。

| 2 枚の RS485 拡張ボードの接続 |
|---|
![]() |
- 5V OUT/IN スイッチ: 5V 端子における電源の向きを制御します。このボードが他のデバイスに 5V を供給する場合は
OUTに、端子からこのボードが 5V を受電する場合はINに設定します。 - 120R スイッチ: オンボードの 120 Ω 終端抵抗を RS-485 の A 線と B 線間に接続するには
ONに、切り離すにはNCに設定します。長距離配線では、バスの物理的な両端で終端を有効にし、中間のボードでは切り離したままにします。 - INT: 割り込み接続用の予備端子です。
ヒント
- V1.2 はデフォルトでハードウェア自動方向制御に設定されているため、スケッチで D2 を使って方向を切り替える必要はありません。ソフトウェア方向制御を使用するには、オンボードの 0 Ω 抵抗の実装位置を変更してください。
- ハードウェア自動方向用のゼロオーム抵抗の位置

- ソフトウェア手動方向用のゼロオーム抵抗の位置

ソフトウェア概要
このプロジェクトでは、XIAO ESP32C3 は D4(GPIO6)と D5(GPIO7)を使用して RS485 拡張ボードと通信します。
ハードウェア自動方向からハードウェア自動方向
ハードウェア自動方向制御を選択した場合、スケッチで DE ピンを制御する必要はありません。
1. 送信側コード
#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)はシリアルモニタ用の USB シリアル出力を開始します。Serial1.begin(9600, SERIAL_8N1, D5, D4)は 9600 ボーの RS-485 通信を開始します。D5 が RX、D4 が TX です。- ボードが送信方向を自動制御するため、このスケッチでは D2 を使用しません。
Serial1.println()は 1 秒ごとに 1 行のテキストを送信します。Serial.println()は USB 経由でローカルの送信状態を表示するだけで、受信側がメッセージを受信したことを確認するものではありません。
2. 受信側コード
#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);
}
}
}
Serialは USB 経由でメッセージを表示します。Serial1は D5 を介して RS-485 トランシーバからデータを受信します。Serial1.available()は UART バッファ内に受信バイトが待機しているかどうかを確認します。Serial1.readStringUntil('\n')は改行またはタイムアウトまで読み込みます。message.trim()はprintln()によって送信される復帰文字を含む前後の空白を削除します。- 結果のメッセージが空でない場合、
Serial.print()とSerial.println()によって USB シリアルモニタに表示されます。 - ボードが方向を自動制御するため、このスケッチでは D2 を使用しません。
3. テスト結果
- 各 XIAO の USB シリアルモニタを開き、送受信されるメッセージを確認します。

- データ転送中は、オンボードの TX および RX インジケータが点滅し、対応する動作を示します。

ハードウェア自動方向からソフトウェア方向
1. 送信側コード
#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)は USB シリアル出力を開始します。Serial1.begin(9600, SERIAL_8N1, D5, D4)は D5 を RX、D4 を TX として RS-485 UART を 9600 ボーで開始します。- このボードはハードウェア自動方向制御を使用するため、送信側は D2 を操作する必要はありません。
loop()内で、Serial1.println()は 1 秒ごとに RS-485 経由で 1 行のテキストを送信します。Serial.println()は USB を介してローカルの送信ステータスを表示します。受信側のシリアルモニタを確認して、受信を確認してください。
2. 受信側コード
ソフトウェアによる方向制御では、受信側で D2 を出力として設定し、LOW に保つことで受信モードを有効にします。
#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は USB シリアルモニタ用に使用され、Serial1は D5 を通じて RS-485 データを受信します。pinMode(D2, OUTPUT)は D2 を方向制御用に設定します。D2 を LOW に保つと受信モードが選択されます。Serial1.available()はバッファされたデータを確認します。readStringUntil('\n')は 1 行を読み取り、trim()は前後の空白を削除します。message.length() > 0によって空のメッセージを除外します。有効な受信テキストは USB シリアルモニタに表示されます。
3. テスト結果
- 送信側と受信側それぞれの XIAO で USB シリアルモニタを開き、送受信されたメッセージを確認します。

- データ転送中、オンボードの TX および RX インジケータが点滅し、対応するアクティビティを示します。

ソフトウェア方向制御からソフトウェア方向制御へ
ソフトウェアによる方向制御では、D2 が動作モードを選択します:LOW で受信、HIGH で送信です。
1. 送信側コード
#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);
}
Serialは USB を通してステータスを表示します。Serial1は D4 を通じて 9600 ボーで RS-485 データを送信します。- D2 は方向を制御します:LOW で受信モード、HIGH で送信モードを選択します。
- 送信前に、スケッチは D2 を HIGH に設定し、トランシーバがモードを切り替えるのを短時間待ちます。
Serial1.println()はテキストを送信します。Serial1.flush(true)は受信データをクリアせずに UART 送信の完了を待ちます。- 送信後、スケッチは D2 を LOW に設定し、USB を通してローカルの送信ステータスを表示します。
2. 受信側コード
#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)は USB シリアル出力を開始します。Serial1.begin(9600, SERIAL_8N1, D5, D4)は D5 を RX、D4 を TX として RS-485 UART を開始します。- D2 は方向制御用に設定され、トランシーバが受信モードのままになるよう LOW に保たれます。
Serial1.available()がバッファされたデータを報告すると、readStringUntil('\n')が 1 行を読み取ります。trim()は前後の空白を削除します。メッセージが空でなければ、スケッチはそれを USB 経由で表示します。
3. テスト結果
- 送信側と受信側それぞれの XIAO で USB シリアルモニタを開き、送受信されたメッセージを確認します。

- データ転送中、オンボードの TX および RX インジケータが点滅し、対応するアクティビティを示します。

リソース
- 📄[回路図] Seeed Studio XIAO-RS485-Expansion-Board Schematic V1.2
- 🗃️[PCB 設計ファイル] Seeed Studio XIAO-RS485-Expansion-Board V1.2 Project
- 📄[回路図] Seeed Studio XIAO-RS485-Expansion-Board Schematic V1.1
- 🗃️[KiCad 回路図] Seeed Studio XIAO-RS485-Expansion-Board V1.1 SCH
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルをご用意しています。


