pdf-icon

RS485

<img src=" https://static-cdn.m5stack.com/resource/docs/static/assets/img/product_pics/unit/unit_rs485_01.webp" width="20%" height="20%"

1. RS485の使用紹介

2. RS485のArduino使用例

3. PUSH6060の例程

RS485の使用紹介

RS485は長距離データ伝送の標準で、基本的な使い方はシリアル通信と同じで、RXとTXのポート、通信のボーレート、データビットを定義して通信を行います。通常は(9600, Serial_8N1, RX_PIN, TX_PIN)の設定を用います。つまり、9600のボーレート、8のデータビット、パリティビットがない、1のストップビットです。

RS485のArduino使用例

  1. プログラムの初期化時、シリアル2を定義します。通常、M5Stackのシリアルは16(RX_PIN)と17(TX_PIN)、M5StickCのシリアルは33(RX_PIN)と32(TX_PIN)、HATのシリアルは26(RX_PIN)と0(TX_PIN)です。

Serial2.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);

  1. データの送信はSerial2.print("x")やSerial2.write("x")を使えます。両者の違いはArduinoのSerialの使用説明を参照してください。

Serial2.print("97");または Serial2.write("97");

  1. データの読み取りはSerial2.read()を使ってバッファから読み出せます。

if(Serial2.available()){ char c = Serial2.read(); }

*以下の基本コードは参考用です。

#include <M5Stack.h>

#define RX_PIN 16
#define TX_PIN 17

void setup() {
  M5.begin();
  Serial2.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);  //串口2初始化
}


void loop() { 
    if(M5.BtnA.wasPressed()){                    //如果按键A被按下
        Serial2.print("hello,from RS485\r\n");  //通过串口2发送数据
    }
    if(Serial2.available()){                   //如果串口有数据读取并打印
        char c = Serial2.read();
        Serial.print(c);
   }
   M5.update();                               //按键状态刷新
}

UIFlowでRS485を使う例

PUSH6060の例程

RS485の例を参考にしてください。以下はサンプルコードです。


#include <M5Stack.h>
#define RX_PIN      16
#define TX_PIN      17
  
#define X_LOCAL 40
#define Y_LOCAL 40

#define X_OFF 160
#define Y_OFF 30

int distance = 0;    //步进电机移动步进值

void header(const char *string, uint16_t color){     //标题
    M5.Lcd.fillScreen(color);
    M5.Lcd.setTextSize(1);
    M5.Lcd.setTextColor(TFT_MAGENTA, TFT_BLUE);
    M5.Lcd.fillRect(0, 0, 320, 30, TFT_BLUE);
    M5.Lcd.setTextDatum(TC_DATUM);
    M5.Lcd.drawString(string, 160, 3, 4);
}

void setup() {
    M5.begin();
    M5.Power.begin();

    header("PUSH 6060", TFT_BLACK);
    M5.Lcd.setTextFont(2);
    M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);  
    Serial2.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);  //配置串口2
    delay(500);
    Serial2.print("ID=123\r\n");                     //串口2输出ID=123\r\n,配置6060电机ID为123
}


void loop() {
    if(M5.BtnA.wasPressed()){                      //按键A按下发送ID\r\n,查看6060电机ID
      Serial2.print("ID\r\n");
    }
    if(M5.BtnB.wasPressed()){                      //按键B按下发送ID123:X%d\r\n控制移动绝对行程,其中%d为变量distance
      if(distance < 50){
         distance +=10;
         Serial2.printf("ID123:X%d\r\n",distance);
      }
    }
    if(M5.BtnC.wasPressed()){                      //按键C按下发送ID123Z\r\n,电机回原点
      Serial2.print("ID123Z\r\n");
    }
    if(Serial2.available()){                       //串口2接收6060返回的消息并打印
      char c = Serial2.read();
      Serial.print(c);
    }
    M5.update();
}
On This Page