연구노트/통신 설계

[UART] 아두이노 UART 통신 기본 실험 || TX RX 연결부터 데이터 송수신까지

ipmes 2026. 6. 5. 10:00

 

 


아두이노 UART 통신 기본 실험

TX RX 연결부터 데이터 송수신까지



' UART 포스팅 바로가기 '

 

1부 [UART] UART란 무엇인가?

2부 [UART] UART 통신은 어떻게 동작하는 걸까?

3부 [UART] UART 통신 설정을 위한 ATmega328P 데이터시트

完 [UART] 아두이노 UART 통신 기본 실험 || TX RX 연결부터 데이터 송수신까지


 

 

이번 시간은 UART 통신 실습편입니다.

 

이전 글에서 UART의 구조와 동작 원리를 이론적으로 살펴봤다면,

이번에는 직접 회로를 구성하고 코드를 작성해 실제로 동작하는 모습을 확인해 보겠습니다.

 

앞서 레지스터를 직접 제어하는 방법도 다뤘지만,

이번 실습에서는 Arduino의 Serial 라이브러리를 활용해 좀 더 간결하게 구현해 보겠습니다.

 

 

 

아두이노 UART 통신, 실제로 동작하는지 확인해보자

 

이번은 아두이노 2대를 활용해 UART 통신이 어떻게 동작하는지 보겠습니다.

앞서 UART의 구조와 동작 원리를 이론적으로 알아보았다면,

이제는 실제로 데이터를 주고받으며 그 흐름을 확인해 보겠습니다.

 

두 아두이노를 물리적으로 연결하여, 한쪽은 송신부, 다른 한쪽은 수신부 역할을 맡는 구조를 구성합니다.

이는 UART 통신의 가장 기본적인 형태인 1:1 직렬 통신 이며,

추가적인 프로토콜이나 중계 장치 없이 두 장치가 직접 데이터를 교환하는 방식입니다.

 

 

세 단계로 살펴보는 UART 통신 흐름

1. 송신

아두이노에서 미리 정의한 데이터를 UART 포트를 통해 주기적으로 전송합니다.

전송 데이터는 문자열, 숫자 등 다양한 형태로 설정할 수 있으나,

이번 실험에서는 내용을 명확히 확인하기 쉬운 문자 'a', 'b'를 1초 간격으로 전송합니다.

 

2. 수신

수신부 아두이노는 UART 포트를 통해 들어오는 데이터를 대기하다가,

수신이 감지되면 이를 내부 버퍼에 저장하게 됩니다.

읽어 들인 수신값에 따라 13번 핀은 LED를 제어하는 데 활용됩니다.

 

3. 결과 확인

시리얼 모니터를 통해 송신측 데이터와 수신측 제어가 일치하는지 확인합니다.

동시에 'a' 수신 시 LED가 켜지고, 'b' 수신 시 LED가 꺼지는 동작을 눈으로 직접 확인할 수 있습니다.

데이터가 정확히 일치한다면 UART 통신이 정상적으로 동작하고 있음을 의미하며,

데이터 누락이나 깨짐이 발생한다면 BaudRate나 배선 연결 상태를 점검합니다.

 

 

회로연결 시 주의 사항

아두이노 2대를 UART로 연결하는 회로는 단 2가지만 주의하면 됩니다.

 

1. TX, RX를 교차 연결하였는 지

UART 통신에서 가장 핵심은 TX와 RX를 반드시 교차해서 연결하는 것입니다.

한쪽 아두이노가 데이터를 보내는(TX) 선은 다른쪽의 데이터를 받는(RX) 핀에 연결돼야 하기 때문입니다.

TX - TX, RX - RX처럼 같은 핀끼리 연결하면 데이터가 정상적으로 송수신되지 않으므로 주의해야 합니다.

 

 

2. GND 공통 연결이 되어 있는 지

두 아두이노의 GND 핀은 반드시 서로 연결해야 합니다.

GND는 전기 신호의 기준 전압 역할을 하기 때문에, GND가 공통으로 연결되어 있지 않으면 두 장치가 서로 다른 기준으로 신호를 해석하여 통신이 불안정해지기 때문입니다.

*아두이노가 서로 다른 전원을 사용하는 경우에는 GND는 반드시 하나로 묶어야 합니다.

 

 

실제로 구현해보자

 

해당 준비물인 아두이노 2대, 5V LED, 저항(220Ω) 입니다.

 

*LED 직렬저항으로는 적절한 값으로 대체가 가능합니다.

 

 

 

위 사진과 같이 회로를 구성하면 준비는 완료됩니다.

이 상태에서 두 아두이노는 UART 통신을 통해 데이터를 서로 주고받을 수 있게 됩니다.

 

 

해당 배선이 실제로 구현된 모습입니다.

 

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

void loop() {
  Serial.println('a');
  delay(1000);

  Serial.println('b');
  delay(1000);
}
 

char data;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    data = Serial.read();
  }

  if (data == 'a') {
    digitalWrite(13, HIGH);
  }
  else if (data == 'b') {
    digitalWrite(13, LOW);
  }
}
 

 

아두이노가 2개 이므로 코드도 2블럭입니다.

 

 

  • 상단 코드를 넣은 아두이노가 송신부

송신부에서 1초 간격으로 a와 b를 송신

 

  • 하단 코드를 넣은 아두이노가 수신부

수신부에서 1초 간격으로 a와 b를 받아 13번핀으로 출력이 나오는 것을 LED로 확인

 

이를 반복하는 코드입니다.

 

 

해당 과정을 실제로 구현하여 동작하는 모습입니다.

 

 

이러한 통신을 이용한다면?

 

지금까지 4부에 걸쳐 UART의 구조와 동작 원리를 살펴보면서 알 수 있었던 가장 큰 특징은,

UART가 임베디드 시스템에서 가장 기본적으로 사용되는 대표적인 직렬 통신 방식이라는 점입니다.

그만큼 활용되지 않는 분야를 찾기 어려울 정도로 다양한 영역에 폭넓게 적용되고 있습니다.

 

UART를 비롯한 다양한 통신 프로토콜 구현 사례와 임베디드 관련 프로젝트 포트폴리오는 아래 링크에서 확인하실 수 있습니다.

 

https://ipmes.tistory.com/category/%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4

 

'포트폴리오' 카테고리의 글 목록

임베디드 시스템 ||PCB 설계 제작 |||펌웨어 개발 ||신호처리 ||응용프로그램 ||| 문의 ipmes@ipmes.co.kr ||| 010-9891-7244 , 062-226-1777

ipmes.tistory.com

 

 




TEL (062-226-1777, 010-9891-7244), E-mail (ipmes@ipmes.co.kr)

임베디드 시스템 | PCB 설계 제작 | 펌웨어 개발 | 신호처리 | 응용프로그램

 

#IPMES, #아이피엠이에스, #연구노트, #임베디드, #PCB제작, #펌웨어개발,

#하드웨어개발, #소프트웨어개발, #회로설계,

#광주PCB, #광주시제품, #광주시제품개발, #광주OEM, #광주광역시PCB,

#광주임베디드, #광주음성처리, #광주신호처리, #광주광역시임베디드,

#광주회로설계, #광주아트웍, #PCB샘플링

#UART, #UART통신, #시리얼통신, #직렬통신, #비동기통신

#아두이노통신, #아두이노UART #아두이노시리얼통신