Arduino RS485 sang Wi-Fi

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng Arduino Uno R4 WiFi để xây dựng một bộ chuyển đổi từ RS485 nối tiếp sang WiFi. Với thiết lập này, Arduino sẽ đọc dữ liệu từ một giao diện RS485 nối tiếp và truyền nó tới một máy chủ TCP, có thể nằm trong cùng một mạng LAN hoặc từ xa qua Internet. Nó cũng có thể nhận dữ liệu từ máy chủ TCP và gửi lại qua giao diện RS485 nối tiếp.

Những bước này sẽ giúp bạn thiết lập các cầu nối giao tiếp đa dạng giữa các thiết bị RS-485 nối tiếp và máy chủ TCP/IP bằng Arduino.

bộ chuyển đổi rs-485 sang WiFi cho Arduino

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

1×Arduino UNO R4 WiFi
1×Alternatively, DIYables STEM V4 IoT
1×(Tùy chọn) DIYables STEM V4 IoT
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (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 R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

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

Về RS485 và TCP

Nếu bạn chưa biết cách sử dụng RS485 và giao tiếp TCP với Arduino, hãy tìm hiểu chúng trong các bài hướng dẫn sau đây:

Cách hoạt động của bộ chuyển đổi RS485 sang WiFi

  • Arduino kết nối với một thiết bị nối tiếp thông qua giao diện RS485
  • Arduino hoạt động như một máy khách TCP, kết nối tới một máy chủ TCP (có thể là máy chủ TCP chạy trên máy tính của bạn hoặc một Arduino khác được lập trình làm máy chủ TCP)
  • Arduino đọc dữ liệu từ giao diện RS485 nối tiếp và gửi nó tới máy chủ TCP
  • Arduino đọc dữ liệu từ kết nối TCP và gửi nó tới giao diện RS485 nối tiếp

Sơ đồ đấu dây

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

This image is created using Fritzing. Click to enlarge image

  • Sơ đồ đấu dây khi sử dụng SoftwareSerial.
sơ đồ nối dây Arduino từ rs-485 sang ttl

This image is created using Fritzing. Click to enlarge image

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-to-wifi */ #include <WiFiS3.h> const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char* TCP_SERVER_ADDR = "192.168.0.26"; // CHANGE TO TCP SERVER'S IP ADDRESS const int TCP_SERVER_PORT = 1470; WiFiClient TCP_client; void setup() { Serial.begin(9600); Serial.println("Arduino: TCP CLIENT"); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } Serial.print("Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // attempt to connect to WiFi network: while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) { delay(10000); // wait 10 seconds for connection: } Serial.print("Connected to WiFi "); Serial.println(WIFI_SSID); // connect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) Serial.println("Connected to TCP server"); else Serial.println("Failed to connect to TCP server"); } void loop() { if (TCP_client.connected()) { // read data from TCP and send them to RS485 interface if (TCP_client.available()) { char c = TCP_client.read(); Serial.write(c); } // read data from RS485 interface and send them to TCP if (Serial.available()) { char c = Serial.read(); TCP_client.write(c); } } else { Serial.println("Connection is disconnected"); TCP_client.stop(); // reconnect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); delay(1000); } } }

Mã Arduino cho Software Serial

/* * 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-to-wifi */ #include <WiFiS3.h> #include <SoftwareSerial.h> // define the SoftwareSerial object and their pins SoftwareSerial rs485(6, 7); // RX: 6, TX: 7 const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char* TCP_SERVER_ADDR = "192.168.0.26"; // CHANGE TO TCP SERVER'S IP ADDRESS const int TCP_SERVER_PORT = 1470; WiFiClient TCP_client; void setup() { Serial.begin(9600); rs485.begin(9600); Serial.println("Arduino: TCP CLIENT"); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } Serial.print("Attempting to connect to SSID: "); Serial.println(WIFI_SSID); // attempt to connect to WiFi network: while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) { delay(10000); // wait 10 seconds for connection: } Serial.print("Connected to WiFi "); Serial.println(WIFI_SSID); // connect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) Serial.println("Connected to TCP server"); else Serial.println("Failed to connect to TCP server"); } void loop() { if (TCP_client.connected()) { // read data from TCP and send them to RS485 interface if (TCP_client.available()) { char c = TCP_client.read(); rs485.write(c); } // read data from RS485 interface and send them to TCP if (rs485.available()) { char c = rs485.read(); TCP_client.write(c); } } else { Serial.println("Connection is disconnected"); TCP_client.stop(); // reconnect to TCP server if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); delay(1000); } } }

Kiểm tra

Bạn có thể thực hiện một bài kiểm tra bằng cách gửi dữ liệu qua các luồng sau:

  • Phần mềm nối tiếp (trên máy tính của bạn) → RS-485 → Arduino → WiFi → Phần mềm máy chủ TCP (trên máy tính của bạn).
  • Phần mềm máy chủ TCP (trên máy tính của bạn) → WiFi → Arduino → RS-485 → Phần mềm nối tiếp (trên máy tính của bạn).
giao tiếp Arduino rs485 với pc

Để làm điều đó, hãy làm theo các bước dưới đây:

  • Nếu đây là lần đầu bạn sử dụng Arduino Uno R4, xem Cách bắt đầu với Arduino UNO R4.
  • Kết nối Arduino Uno R4 WiFi với PC của bạn bằng cách sử dụng mô-đun TTL-to-RS485 và cáp RS485-to-USB như sơ đồ đấu nối ở trên.
  • Cài đặt một chương trình Terminal Serial như Tera Term hoặc PuTTY
  • Cài đặt một phần mềm máy chủ TCP như ezTerm
  • Mở chương trình Serial và cấu hình các tham số Serial (cổng COM, tốc độ baud...)
  • Mở chương trình máy chủ TCP và cấu hình nó ở chế độ TCP Server, sau đó nhấn nút Lắng nghe.
máy chủ tcp ezterm
  • Mở Command Prompt trên máy tính của bạn.
  • Tìm địa chỉ IP của máy tính bạn bằng cách chạy lệnh dưới đây:
ipconfig
  • Đầu ra trông như dưới đây:
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.26 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Cập nhật địa chỉ IP của TCP Server (Máy tính của bạn) trong mã Arduino. Trong ví dụ ở trên: 192.168.0.26
  • Biên dịch và tải mã lên bảng Arduino bằng cách nhấp nút Tải lên trên Arduino IDE
  • Nhập một số dữ liệu từ chương trình Serial để gửi tới Arduino qua Serial.
  • Nếu thành công, bạn sẽ thấy dữ liệu echo trên phần mềm máy chủ TCP.
  • Nhập một số dữ liệu từ chương trình máy chủ TCP để gửi tới Arduino thông qua TCP.
  • Nếu thành công, bạn sẽ thấy dữ liệu echo trên chương trình Serial.
Arduino serial sang tcp

Nếu bạn muốn sử dụng một bộ chuyển đổi RS485 sang Ethernet thương mại, bạn có thể mua CSE-H55N2 Serial To Ethernet Converter

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.