아두이노 RS422에서 WiFi로
이 가이드에서는 Arduino Uno R4 WiFi를 사용하여 Serial RS422에서 WiFi 변환기를 구축하는 방법을 탐구하겠습니다. 이 설정을 통해 Arduino는 시리얼 RS422 인터페이스에서 데이터를 읽고 이를 동일한 로컬 영역 네트워크(LAN) 내에서나 인터넷을 통해 원격으로 TCP 서버로 전송할 수 있습니다. 또한 TCP 서버에서 데이터를 받아 시리얼 RS422 인터페이스를 통해 다시 보낼 수도 있습니다.
이 단계들을 통해 아두이노를 사용하여 직렬 RS-422 장치와 TCP/IP 서버 사이에 다재다능한 통신 연결을 구축할 수 있습니다.
| 1 | × | 아두이노 우노 R4 와이파이 | 쿠팡 |  아마존 |  | 
| 1 | × | (또는) DIYables STEM V4 IoT | 쿠팡 |  아마존 |  | 
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 |  아마존 |  | 
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 |  | 
| 1 | × | TTL-RS422 변환 모듈 | 쿠팡 |  아마존 |  | 
| 1 | × | 점퍼케이블 | 쿠팡 |  아마존 |  | 
| 1 | × | (옵션) RS422 to USB 변환 케이블 | 아마존 |  | 
| 1 | × | (추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 | 쿠팡 |  아마존 |  | 
| 1 | × | (추천) 아두이노 우노 R4용 브레드보드 쉴드 | 쿠팡 |  아마존 |  | 
| 1 | × | (추천) 아두이노 우노 R4용 케이스 | 쿠팡 |  아마존 |  | 
| 1 | × | (추천) 아두이노 우노 R4용 전원 분배기 | 쿠팡 |  아마존 |  | 
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |  | 
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
 
아두이노에서 RS422와 TCP 통신 사용 방법을 모른다면, 다음 튜토리얼에서 그것들에 대해 배우십시오:
 
 - 아두이노는 시리얼 RS422 인터페이스를 통해 시리얼 장치에 연결합니다. 
 - 아두이노는 TCP 서버(여러분의 PC에 있는 TCP 서버 소프트웨어 또는 TCP 서버로 프로그래밍된 다른 아두이노일 수 있음)에 연결하는 TCP 클라이언트로 작동합니다. 
 - 아두이노는 시리얼 RS422 인터페이스에서 데이터를 읽고 그것을 TCP 서버로 보냅니다. 
 - 아두이노는 TCP 연결에서 데이터를 읽고 그것을 시리얼 RS422 인터페이스로 보냅니다. 
 
하드웨어 시리얼을 사용하는 경우의 연결도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
소프트웨어 시리얼을 사용하는 경우의 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
 
#include <WiFiS3.h>
const char* WIFI_SSID = "YOUR_WIFI_SSID";          
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";       
const char* TCP_SERVER_ADDR = "192.168.0.26";  
const int TCP_SERVER_PORT = 1470;
WiFiClient TCP_client;
void setup() {
  Serial.begin(9600);
  Serial.println("Arduino: TCP CLIENT");
  
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("WiFi 모듈과의 통신 실패!");
    
    while (true)
      ;
  }
  String fv = WiFi.firmwareVersion();
  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
    Serial.println("펌웨어를 업그레이드 해주세요");
  }
  Serial.print("SSID에 연결을 시도합니다: ");
  Serial.println(WIFI_SSID);
  
  while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) {
    delay(10000);  
  }
  Serial.print("WiFi에 연결 됨 ");
  Serial.println(WIFI_SSID);
  
  if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT))
    Serial.println("TCP 서버에 연결됨");
  else
    Serial.println("TCP 서버에 연결 실패");
}
void loop() {
  if (TCP_client.connected()) {
    
    if (TCP_client.available()) {
      char c = TCP_client.read();
      Serial.write(c);
    }
    
    if (Serial.available()) {
      char c = Serial.read();
      TCP_client.write(c);
    }
  } else {
    Serial.println("연결이 끊어졌습니다");
    TCP_client.stop();
    
    if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) {
      Serial.println("TCP 서버에 재연결됨");
    } else {
      Serial.println("TCP 서버에 재연결 실패");
      delay(1000);
    }
  }
}
 
#include <WiFiS3.h>
#include <SoftwareSerial.h>
SoftwareSerial rs422(6, 7);  
const char* WIFI_SSID = "YOUR_WIFI_SSID";          
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";       
const char* TCP_SERVER_ADDR = "192.168.0.26";  
const int TCP_SERVER_PORT = 1470;
WiFiClient TCP_client;
void setup() {
  Serial.begin(9600);
  rs422.begin(9600);
  Serial.println("Arduino: TCP CLIENT");
  
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("WiFi 모듈과의 통신 실패!");
    
    while (true)
      ;
  }
  String fv = WiFi.firmwareVersion();
  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
    Serial.println("펌웨어를 업그레이드해주세요");
  }
  Serial.print("SSID에 연결을 시도합니다: ");
  Serial.println(WIFI_SSID);
  
  while (WiFi.begin(WIFI_SSID, WIFI_PASSWORD) != WL_CONNECTED) {
    delay(10000);  
  }
  Serial.print("WiFi에 연결됨 ");
  Serial.println(WIFI_SSID);
  
  if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT))
    Serial.println("TCP 서버에 연결됨");
  else
    Serial.println("TCP 서버에 연결 실패");
}
void loop() {
  if (TCP_client.connected()) {
    
    if (TCP_client.available()) {
      char c = TCP_client.read();
      rs422.write(c);
    }
    
    if (rs422.available()) {
      char c = rs422.read();
      TCP_client.write(c);
    }
  } else {
    Serial.println("연결이 끊김");
    TCP_client.stop();
    
    if (TCP_client.connect(TCP_SERVER_ADDR, TCP_SERVER_PORT)) {
      Serial.println("TCP 서버에 재연결됨");
    } else {
      Serial.println("TCP 서버에 재연결 실패");
      delay(1000);
    }
  }
}
다음 흐름으로 데이터를 보내어 테스트를 할 수 있습니다:
그것을 하기 위해서는 아래 단계들을 따르세요:
 
 - 상단의 배선도와 같이 TTL-to-RS422 모듈과 RS422-to-USB 케이블을 사용하여 PC에 아두이노 우노 R4 WiFi를 연결하세요. 
 
 - ezTerm- 과 같은 TCP 서버 소프트웨어 프로그램을 설치하세요. 
 
 - 시리얼 프로그램을 열고 시리얼 파라미터(COM 포트, 보율 등)를 구성하세요. 
 - TCP 서버 프로그램을 열고 TCP 서버로 구성한 다음, Listen 버튼을 클릭하세요. 
출력은 다음과 같습니다:
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 . . . . . . . . . :
 
 - 아두이노 코드에서 TCP 서버(당신의 PC)의 IP 주소를 업데이트하세요. 위 예시에서는: 192.168.0.26 
 - 아두이노 IDE에서 Upload 버튼을 클릭해 아두이노 보드에 코드를 컴파일하고 업로드하세요. 
 - 시리얼 프로그램에서 몇 가지 데이터를 입력해서 시리얼을 통해 아두이노로 보내세요. 
 - 성공하면, TCP 서버 소프트웨어에서 에코 데이터를 볼 수 있을 것입니다. 
 - TCP 서버 프로그램에서 몇 가지 데이터를 입력해서 TCP를 통해 아두이노로 보내세요. 
 - 성공하면, 시리얼 프로그램에서 에코 데이터를 볼 수 있을 것입니다. 
상업용 RS422-이더넷 변환기를 사용하고 싶다면, CSE-H55N2 시리얼 이더넷 변환기를 구입할 수 있습니다.
 
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.