Basic RS-485 Communication With Micromation Dev Board V3 Lite

Basic RS-485 Communication With Micromation Dev Board V3 Lite

เริ่มต้นเนื้อหา

เนื้อหาต่อไปนี้เป็นการอธิบายเกี่ยวกับโค้ดพื้นฐานการใช้งาน Serial ผ่าน RS-485 Auto Direction Module โดยใช้สายไฟ 2 เส้นเชื่อมต่อ Micromation Dev Board V3 Lite 2 ชุดให้สื่อสารกันได้

Micromation Dev Board V1 ใช้พอร์ต UART0 / TX0,RX0 / Serial และ Micromation Dev Board
ตั้งแต่รุ่น V2 ขึ้นไป  เราเปลี่ยนไปใช้พอร์ต UART2 / TX2,RX2 / Serial2

วัตถุประสงค์

แสดงวิธีการส่งข้อมูลผ่าน Serial2 / RS-485 จาก Micromation Dev Board V3 Lite 2 ชุด โดยตัดส่วนของโปโตคอลออกไปก่อน เพื่อทำความเข้าใจและใช้เป็นแนวทางสำหรับประยุกต์ใช้งานตามต้องการ

อุปกรณ์

ชุดบอร์ด Micromation Dev Board V3 Lite ESP32 Relay board 4 Channel X 2

อธิบายโค้ด

ระบุขาของพอร์ต UART

#defineRXD2 16
#defineTXD2 17

คำสั่งเริ่มต้นเป็นการระบุขาของพอร์ต UART ที่กำลังต่อร่วมอยู่
ในตัวอย่างนี้เราต่อ RS-485 Auto Direction Module ในฝั่งของ UART เข้ากับ UART2 ของ ESP32

เปิดการใช้งาน Serial2

Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);

คำสั่งเปิดการใช้งาน Serial2 สำหรับสื่อสารผ่าน RS-485 ไว้ใน void setup

ในตัวอย่างนี้เราใช้
Baud Rate : 115200
Data Bits : 8
Parity : None
Stop Bits : 1

คำสั่งที่ใช้ในการเขียน

Serial2.write();

คำสั่งที่ใช้ในการอ่าน

Serial2.read();

โค้ดสำหรับ : ส่ง Sender

#defineRXD2 16
#defineTXD2 17

constint buttonPin = 4;
int buttonState = 0;

voidsetup(){
Serial.begin(9600); // Enable serial communication
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); // Enable serial2 [rs485] communication
pinMode(buttonPin, INPUT);
}

voidloop(){
 buttonState = digitalRead(buttonPin);
if(buttonState == HIGH){
Serial2.write(1);
Serial.println("Send 1");
delay(300);
}else{
}
}

เมื่อมีการกด Push Button จะถูกส่งค่า 1 ออกไป ผ่าน Serial2 / RS-485

โค้ดสำหรับ : รับ Receiver

#define RXD2 16
#define TXD2 17

const int led = 2;
int myint;

void setup() {
 Serial.begin(9600); // Enable serial communication
 Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); // Enable serial2 [rs485] communication
 pinMode(led, OUTPUT);
}

void loop() {
 myint = Serial2.read(); //Read input
 if (myint == 1) {
 digitalWrite(led, HIGH);
 Serial.println("Receiver 1");
 } else {
 digitalWrite(led, LOW);
 }
 delay(300);
}

เมื่อได้รับค่า 1 จะแสดงผลที่ Built-in LED ของ ESP32

โค้ดสำหรับ : ส่ง Sender และ รับ Receiver

#include Wire.h
#include Adafruit_GFX.h
#include Adafruit_SSD1306.h

#define RXD2 16
#define TXD2 17

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

String testString; //Declaring a variable
const int buttonPin = 4;
const int ralay = 23;
int buttonState = 0;

void setup() {
 Serial.begin(9600); // Enable serial communication
 Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
 pinMode(ralay, OUTPUT);
 pinMode(buttonPin, INPUT);

 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
 Serial.println(F("SSD1306 failed"));
 for (;;)
 ;
 }
}

void loop() {
 Serial.println();
 Serial.println("Wait... Msg: ");

 while (Serial2.available() == 0) {
 buttonState = digitalRead(buttonPin);

 if (buttonState == HIGH) {
 digitalWrite(ralay, HIGH);
 Serial.println("on");
 Serial2.write("1");

 display.clearDisplay();
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(0, 10);
 display.println("1");
 display.display();
 delay(300);

 } else {
 digitalWrite(ralay, LOW);
 display.clearDisplay();
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(0, 10);
 display.println("OFF");
 display.display();

 //Serial.println("off");
 }
 } // Waiting for input

 testString = Serial2.readString(); //Read out the input
 Serial.println(testString);
 long myInt = testString.toInt();
 Serial.println(myInt);

 if ( myInt == 1) {
 digitalWrite(ralay, HIGH);
 Serial.println("RELAY1 ON");

 } else {
 digitalWrite(ralay, LOW);
 Serial.println("RELAY1 OFF");
 }

 Serial.println("Msg received is: " + testString);
 Serial.println("- - - - - - - - - - - - - - - - - -");

 display.clearDisplay();
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(0, 10);
 // Display static text
 display.println(testString);
 display.display();

 delay(300);

}

โค้ดสำหรับ : ส่ง Sender และ รับ Receiver ได้ในตัวเดียวกัน
โดยรับค่าจากการกด Push Button ข้อมูลที่ส่งมีค่าเป็น 1 พร้อมแสดงผลบนบนจอ OLED และ Relay1

 

 

Notices
ส่งข้อมูลเป็นข้อความที่มากขึ้น ด้วยคำสั่งเหล่านี้

ตัวส่ง Sender)
const
char* message = “Hello from Micromation”;
Serial2.write(message); // ส่งข้อความ
Serial.println(“Message sent: “);
Serial.println(message);

ตัวรับ (Receiver)
String message = Serial2.readString();
Serial.println(“Message received: “);
Serial.println(message);

 

 

สรุป

สำหรับผู้ใช้งานใหม่แล้ว พื้นฐานนี้จะช่วยให้คุณมองเห็นภาพการทำงานได้มากขึ้น หากคุณสามารถเข้าใจขั้นตอนการของการสื่อสารง่ายๆระหว่างบอร์ดสองชุดผ่านโมดูล RS-485 แล้ว คุณสามารถพัฒนาตนเองเพิ่มเติมด้วยการใช้งาน Modbus โปโตคอลที่ใช้อย่างกว้างขวางในอุตสาหกรรมและระบบอัตโนมัติ

 

 

ตัวอย่างต่อใช้งาน Atmospheric Temperature & Humidity Sensor BGT-WSD2 กับ Arduino และ ESP32 ด้วยโมดูล RS-485

BESTBasic RS-485 Communication With Micromation Dev Board V3 Lite