เริ่มต้นเนื้อหา
เนื้อหาต่อไปนี้เป็นการอธิบายเกี่ยวกับโค้ดพื้นฐานการใช้งาน 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 โปโตคอลที่ใช้อย่างกว้างขวางในอุตสาหกรรมและระบบอัตโนมัติ