pdf-icon

Arduino入門

2. デバイス&サンプル

5. 拡張モジュール&サンプル

アクセサリー

6. アプリケーション

Atomic RS485/232 Base Arduino 使用チュートリアル

1. 準備作業

2. RS485/232 通信概要

  • RS485 と RS232 は、産業オートメーションや組み込みシステムなどの分野で広く使用されている一般的なシリアル通信プロトコルです。RS485 は多点通信をサポートし、長距離伝送に適しており、RS232 は通常ポイントツーポイント通信に使用され、短距離接続に適しています。

2.1 RS485 通信紹介

  • 1. 核心定義:

    • 物理層インターフェース規格であり、電気的特性(電圧、インピーダンスなど)や接続方法を定義します。
    • 半二重通信をサポートし、送受信の制御はイネーブル信号で行い、個別の送受信クロック線は不要です。
  • 2. 主な特性:

    • 通信距離:中継器なしで最大 1200 メートル。
    • 伝送速度:距離と反比例し、10 メートル以内では最大 10Mbps、1200 メートル時は約 100Kbps。
    • ノード容量:単一バスで最大 32 台接続可能(中継器利用で 256 台以上に拡張可能)。
    • 耐ノイズ性:差動伝送(信号線 A/B、信号は両者の電圧差)を採用し、共通モードノイズを効果的に抑制。
  • 3. 動作原理:

    • 電圧レベル定義:論理「1」は A-B ≥ 200mV、論理「0」は A-B ≤ -200mV。
    • 送信側:TTL レベルを差動信号に変換し、A線(正)と B線(負)で伝送。
    • 受信側:A/B 差動信号を受信し、TTL レベルに変換して機器で処理。
    • インターフェース形式:固定規格はなく、多くは二線端子や DB9(9ピン)で、主要接続は A と B の 2 本線のみ。

2.2 RS232 通信紹介

  • 1. 核心定義:

    • 非同期シリアル通信の電気的インターフェース規格であり、信号レベル、ピン機能、インターフェース形式を明確に規定します。
    • 全二重通信をサポートし、送信線(TXD)と受信線(RXD)が独立しており、送受信は同時に行え、送受信制御のためのイネーブル信号は不要です。
  • 2. 主な特性:

    • 通信距離:規格では最大 15 メートル、実運用では信号品質確保のため通常 1.5 メートル以内。
    • 伝送速度:距離と反比例し、最大 20Kbps。
    • ノード容量:ポイントツーポイント通信で、2 台の機器間のみ直接接続可能。
    • 耐ノイズ性:単一端伝送(GND を基準)を採用し、耐ノイズ性は低く、共通モードノイズの影響を受けやすい。
  • 3. 動作原理:

    • 電圧レベル定義:論理「1」は -3V ~ -15V、論理「0」は +3V ~ +15V。
    • 送信側:TTL レベルを RS232 レベルに変換し、TXD線からデータ送信。
    • 受信側:RXD線から RS232 レベル信号を受信し、TTL レベルに変換して機器で処理。
    • インターフェース形式:DB9(9ピン)や DB25(25ピン)が一般的で、主要接続は TXD、RXD、GND の 3 本線。

3. サンプルプログラム

  • 本チュートリアルでは、AtomS3R と Atomic RS485/232 Base を組み合わせて使用します。本モジュールは UART シリアル通信方式を採用しており、実際の回路接続に応じてプログラム内のピン定義を修正してください。接続後の UART ピンは G5 (RX)G6 (TX) です。

  • Atomic RS485 Base には内部に 120Ω の終端抵抗が統合されていません。下図の位置を参考に、A/B 線間に 120Ω の抵抗を追加してください。

cpp
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 46 47 48 49 50 51 52 53 54 55
#include <M5Unified.h>
#include <M5GFX.h>

static int cnt = 0;          // Counter for RS485 sent messages (increments per transmission)
String recvBuffer;           // Buffer to store received RS485 data

void setup() {
    M5.begin();           
    M5.Display.clear();  
    M5.Display.setFont(&fonts::FreeMonoBold9pt7b); 
    M5.Display.drawString("Send :", 0, 5);     
    M5.Display.drawString("Receive :", 0, 50);  
    
    Serial.begin(115200);   
    
    // Parameters: baud rate=115200, config=8N1 (8 data bits, 1 stop bit, no parity), RX pin=27, TX pin=19
    Serial2.begin(115200, SERIAL_8N1, 5, 6);
}

void loop() {
    M5.update();         

    // --- Send Data ---
    String msg = "RS485 #" + String(++cnt); 
    Serial2.println(msg);          
    Serial.printf("Send: %s\n", msg.c_str());

    // Display sent message on screen
    M5.Display.fillRect(0, 25, 128, 20, TFT_BLACK); 
    M5.Display.setTextColor(GREEN);   
    M5.Display.setCursor(0, 25);             
    M5.Display.printf("%s\n", msg.c_str());       

    // --- Receive Data ---
    recvBuffer = "";                  
    while (Serial2.available()) {         
        char ch = Serial2.read();            
        recvBuffer += ch;                       
    }

    // If valid data is received
    if (recvBuffer.length() > 0) {
        Serial.print("Recv: ");                  
        Serial.print(recvBuffer);
        Serial2.flush();
        
        // Display received message on screen
        M5.Display.setTextColor(YELLOW);       
        M5.Display.fillRect(0, 70, 128, 20, TFT_BLACK); 
        M5.Display.setCursor(0, 70);            
        M5.Display.printf("%s", recvBuffer.c_str()); 
    }

    delay(2000); 
}

4. コンパイルとアップロード

  • 1. ダウンロードモード:異なるデバイスでプログラムを書き込む前にダウンロードモードに入る必要があります。主制御デバイスごとに手順が異なる可能性があります。詳しくはArduino IDE クイックスタートページ下部のデバイス別プログラムダウンロード手順一覧を参照し、具体的な操作方法を確認してください。

  • AtomS3R のリセットボタンを長押し(約 2 秒)し、内部の緑色 LED が点灯したらボタンを離してください。この時点でデバイスはダウンロードモードに入り、書き込みを待機します。

  • 2. デバイスのポートを選択し、Arduino IDE 左上のコンパイル&アップロードボタンをクリックして、プログラムがコンパイルされデバイスにアップロードされるのを待ちます。

5. 実行結果の表示

  • 上記のサンプルが正常に書き込み完了すると、デバイスの電源投入後に画面上で送受信したデータ内容が表示されます。RS485/232 インターフェースを通じて 2 秒ごとにメッセージを送信し、このインターフェース経由で受信したデータを監視します。メインコントローラ画面の表示は以下の通りです:
On This Page