Arduino RS-485

Trong hướng dẫn này, chúng ta sẽ khám phá việc triển khai giao tiếp RS-485 với Arduino. Cụ thể, chúng ta sẽ trình bày chi tiết các khía cạnh sau:

Hướng dẫn cũng cung cấp chỉ dẫn cho cả Hardware SerialSoftwareSerial.

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×TTL to RS485 Module
1×dây jumper
1×(Tùy chọn) USB to RS485 Converter
1×(Tùy chọn) USB to RS485 Cable
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Mô-đun TTL sang RS-485

Khi sử dụng giao tiếp nối tiếp trên Arduino thông qua các hàm như Serial.print(), Serial.read(), và Serial.write(), Arduino truyền dữ liệu qua pin TX và nhận dữ liệu qua pin RX. Các pin này hoạt động ở mức TTL, có nghĩa là các tín hiệu chúng xử lý có phạm vi giới hạn. Do đó, đối với giao tiếp nối tiếp ở khoảng cách xa hơn, cần chuyển đổi tín hiệu TTL sang các chuẩn tín hiệu RS232, RS485 hoặc RS422.

Bài hướng dẫn này sẽ đi sâu vào việc sử dụng RS-485 (còn được biết đến như RS-485) với Arduino thông qua một mô-đun TTL sang RS-485. Mô-đun này hỗ trợ chuyển đổi tín hiệu TTL sang tín hiệu RS-485 và ngược lại.

Sơ đồ chân

Mô-đun RS-485 sang TTL có hai giao diện:

  • Giao diện TTL (kết nối với Arduino) bao gồm 4 chân
    • Chân VCC: chân nguồn, cần được kết nối với VCC (5V, hoặc 3.3V)
    • Chân GND: chân nguồn, cần được kết nối với GND (0V)
    • Chân RXD: chân dữ liệu, cần được kết nối với một chân TX của Arduino
    • Chân TXD: chân dữ liệu, cần được kết nối với một chân RX của Arduino
  • Giao diện RS485 bao gồm các chân sau:
    • Chân D+ (A hoặc TR+): Chân này hỗ trợ giao tiếp dữ liệu.
    • Chân D- (B hoặc TR-): Chân này dùng cho truyền dữ liệu.
    • Chân GND: Mặc dù tùy chọn, nhưng được khuyến nghị mạnh mẽ nên kết nối chân này để giảm nhiễu, đảm bảo hiệu suất tối ưu.
    sơ đồ chân của module rs-485
    image source: diyables.io

Sơ đồ đấu dây

  • Sơ đồ nối dây nếu sử dụng serial phần cứng
sơ đồ đấu nối Arduino ttl với rs-485

This image is created using Fritzing. Click to enlarge image

  • Sơ đồ đấu dây nếu sử dụng Software Serial
sơ đồ đấu nối rs-485 sang ttl cho Arduino

This image is created using Fritzing. Click to enlarge image

Cách lập trình Arduino để sử dụng mô-đun RS-485

  • Khởi tạo giao diện Serial:
Serial.begin(9600);
  • Nếu bạn sử dụng SoftwareSerial, bạn cần thêm thư viện và khai báo một đối tượng SoftwareSerial:
#include <SoftwareSerial.h> // Define the SoftwareSerial objects and their pins SoftwareSerial rs485(6, 7); // RX: 6, TX: 7

Mã Arduino cho Serial phần cứng

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rs485 */ void setup() { // start communication with baud rate 9600 Serial.begin(9600); // wait a moment to allow serial ports to initialize delay(100); } void loop() { // Check if there's data available on Serial if (Serial.available()) { char data = Serial.read(); // read the received character Serial.print(data); // echo back to data to the sender } }

Mã Arduino cho Giao tiếp nối tiếp bằng phần mềm

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rs485 */ #include <SoftwareSerial.h> // define the SoftwareSerial object and their pins SoftwareSerial rs485(6, 7); // RX: 6, TX: 7 void setup() { // start communication with baud rate 9600 rs485.begin(9600); // wait a moment to allow serial ports to initialize delay(100); } void loop() { // Check if there's data available on rs485 if (rs485.available()) { char data = rs485.read(); // read the received character rs485.print(data); // echo back to data to the sender } }

Thử nghiệm

Bạn có thể thử bằng cách gửi dữ liệu từ PC của bạn đến Arduino qua RS-485 và ngược lại. Để thực hiện, hãy làm theo các bước dưới đây:

  • Kết nối Arduino với PC của bạn qua cáp RS485-to-USB như dưới đây:
giao tiếp Arduino rs485 với pc
  • Cài đặt một chương trình Terminal Serial như Tera Term hoặc PuTTY
  • Mở chương trình Terminal Serial và cấu hình các tham số Serial (cổng COM, tốc độ baud...)
  • Nhập dữ liệu vào Serial Terminal để gửi cho Arduino.
  • Nếu thành công, bạn sẽ thấy dữ liệu phản hồi trên Serial Terminal.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.