개발 블로그

[아두이노] 아두이노 TX, RX 연결하기 본문

개발/Arduino

[아두이노] 아두이노 TX, RX 연결하기

영글어가다 2022. 1. 27. 10:03

https://speak-of-the-devil.tistory.com/15

 

[UART] UART, TX, RX 가 뭘까?

UART 란 통신 규격 중 하나이다. Universal Asychronous Receiver/Transmitter의 줄임말로 시리얼 통신(Serail Communication)이라고도 한다. UART 통신 방법은 마치 사람이 대화를 하는 것과 같은 원리를 가지고..

speak-of-the-devil.tistory.com

UART 통신에 대한 얘기를 하면서 TX와 RX 의 얘기를 했다. TX 는 Transmitter, RX 는 Receiver 로 각각 송신과 수신 역할을 한다.

그렇다면 PC와 아두이노 보드가 UART 통신을 하기 위해서 TX, RX를 어떤 구조를 하고 있을까? 내 예상이지만 이런 구조일 것이다.

PC의  TX -> 보드의 RX

보드의 RX -> PC의  TX

PC의 GND - 보드의 GND

TX 와 RX는 교차로 연결되어 있고, 서로의 GND 가 연결되어 있는 구조.

왼쪽 아두이노 우노 보드를 보자. 빨간 박스에 Tx와 Rx 라고 적힌 곳과 Led 가 함께 있다. 아두이노 우노를 PC 와 연결하면 불이 들어오는 것을 볼 수 있으며, PC와 보드의 TX, RX, GRD 가 연결됐음을 말한다. 그 후 송수신을 하면 오른쪽 사진 빨간 박스의 TX, RX Led에 빨간 불이 들어오는 모습을 위 링크에 있는 영상에서 확인할 수 있다. 

이를 통해 TX, RX 선은 PC 와 송수신을 하기 위해 보드에 기본적으로 존재한다는 것을 알 수 있다.

왼쪽, 아두이노 우노 전원 연결 전 / 오른쪽, 아두이노 우노 전원 연결 후

그럼 다른 장치와 TX, RX 선으로 송수신을 하기 위해서 어떻게 해야 할까?

보드 위아래 입력 핀을 확인해보면 알겠지만, PC 를 위한 TX, RX 선 외에 정해진 TX, RX 핀이 없다. 이때에는 프로그래밍으로 해결할 수 있다. 코드에 SoftwareSerial 라이브러리를 넣고 특정 입력 핀을 TX, RX 로 선언하여 다른 장치와 통신할 수 있다.

 

SoftwareSerial 라이브러리는 다음을 참고하자.

https://speak-of-the-devil.tistory.com/19

 

[아두이노] SoftwareSerial 라이브러리?

https://speak-of-the-devil.tistory.com/18 [아두이노] 아두이노 TX, RX 연결하기 https://speak-of-the-devil.tistory.com/15 [UART] UART, TX, RX 가 뭘까? UART 란 통신 규격 중 하나이다. Universal Asychron..

speak-of-the-devil.tistory.com

 

두 개의 아두이노 보드를 연결하여 시리얼 통신을 했다.

 

1) 각 아두이노가 갖고 있는 GND 입력 핀을 파란색 선으로 연결했다.

2) 검은색과 흰색 아두이노의 각각 입력핀 2개를 TX, RX 로 선언했다.

3) TX와 RX를 서로 교차해서 연결했다.

 

검은색은 흰색으로 OBD 글자를

흰색은 검은색으로 UNO 글자를 보내도록 코드를 작성했다.

아래 영상을 보면 통신하는 모습을 확인할 수 있다.

아래 코드는 흰색 보드!

#include <SoftwareSerial.h>

#define OBD_RX 10
#define OBD_TX 11

SoftwareSerial OBD(OBD_RX, OBD_TX);

void  setup(){
  Serial.begin(9600);
  OBD.begin(9600);
}

void  loop(){
  OBD.println("UNO");
  delay(1000);
  if (OBD.available() > 0){
    String get_obd = OBD.readStringUntil('\n');
    Serial.println(get_obd);
}

아래는 검은색 보드!

#include <SoftwareSerial.h>

#define UNO_RX 10
#define UNO_TX 11

SoftwareSerial UNO(UNO_RX, UNO_TX);

void  setup(){
  Serial.begin(9600);
  UNO.begin(9600);
}

void  loop(){
  UNO.println("OBD");
  delay(1000);
  if (UNO.available() > 0){
    String get_uno = UNO.readStringUntil('\n');
    Serial.println(get_uno);
}