티스토리 뷰

Arduino Serial UARTArduino Serial UART

아두이노 시리얼(UART) 통신

  아두이노 시리얼 통신 방법에는 UART, I2C, SPI 의 3가지 방식이 지원된다. UART 통신 방식은 시리얼 통신 방식 중의 하나이지만, 일반적으로 아두이노에서 시리얼 통신으로 부르는 것은 보통 UART를 지칭합니다. 본 포스트에서는

시리얼 통신이 무엇인지 알아 보고, 시리얼 통신 사용법

에 대해 알아보겠습니다.

직렬(Serial) 통신 vs 병렬(Parallel) 통신

  데이터 통신에서 시리얼 통신과 병렬 통신은, 여러 개의 데이터가 하나의 선(경로)에서 순차적으로 전달되는지, 여러 선(경로)을 통해 다수의 데이터가 한 번에 전달 되는지에 따라 나누어집니다.

  • 직렬(Serial) 통신 : 하나의 경로를 통해 데이터를 순차적으로 전달
  • 병렬(Parallel) 통신 : 다수의 경로를 통해 여러 데이터를 한번에 전달
Parallel InterfaceParallel InterfaceSerial InterfaceSerial Interface

  우리의 일상에도 대화를 할 때 직렬/병렬 통신과 같은 방식을 모두 사용합니다. 

  좌측 그림은 병렬 통신과 같은 방식으로, "Hello~ Arduino" 란 문자열를 종이에 써서 한번에 상대방에게 전달합니다. 우측 그림은 직렬 통신과 같은 방식으로, "Hello~ Arduino" 라는 문자열을 한자 한자 수화기를 통해 전달합니다. 상대방도 한글자 씩 문자를 수신하게 되고, 조합한 뒤에 이 문장이 무엇인지 알게 됩니다.

병렬 통신식 대화법병렬 통신식 대화법직렬 통신 대화법직렬 통신 대화법

  시리얼 통신은 다시 종류에 따라, 동기, 비동기 통신 방식으로 나뉘고, 1:1 통신인지 n:1 통신인지 등 다양한 기준으로, 다양한 통신 방식을 가지고 있습니다. 이와 관련된 내용은 추후 포스팅 예정입니다. 이번 에는 아두이노로 UART 라는 시리얼 통신을 하는 것을 중점으로 설명 하겠습니다. 

UART 통신

  전자장치간 통신과 일상에서 대화는 크게 다를 것이 없습니다. 사람의 대화는 사람 간의 규칙이 있고, 전자 장치 간 통신도 규칙이 있습니다. 데이터 통신에서 그런 통신/대화 하는 방법에 대한 규정과 규칙을 프로토콜이라는 단어로 표현합니다. 

  사람과 사람 간의 대화에서는 아래와 같은 순서로 이루어 집니다. 아래는 일반적인 1:1의 대화이고, 당연히 여러 사람과 대화를 할 때, 빠른 대화를 할 때에는 또 다른 규칙을 사용하게 됩니다.

    1. 상대방을 부르고
    2. 들을 준비가 되었는지 확인하고
    3. 하고 싶은 말을 하고
    4. 나의 할 말을 마침  

  UART는 1:1 통신 방식이고, 통신을 방식은 위 대화와 비슷합니다. 아래는 UART 통신의 데이터 프레임입니다. 

  • Start : 데이터 전송 시작을 알리기 위해 TX 라인 전원을 LOW 로 변경
  • Data Bit(D0 ~ D8) : 실제 전송할 데이터, 1일 경우 HIGH 전압, 0일 경우 LOW 전압을 순차적으로 전달
  • Data Size
    • 데이터 크기는 5Bit(D0 ~ D4) ~ 9Bit(D0 ~ D8) 의 사이의 크기 사용이 가능
    • 전송할 데이터 크기는 데이터 통신할 기기 간 사전에 약속이 되어 있어야 함
  • P : Parity 비트로 데이터 전송 오류 확인을 위한 비트이며, 옵션 사항이다.
  • Stop : 데이터 전송이 마침을 알리는 비트
  • Buad Rate : 데이터 속도로 두 기기 간 사전에 같은 값으로 약속이 되어야 함


UART Data FrameUART Data Frame


Arduino Uno 보드의 UART

  아두이노 우노 보드에서는 하나의 UART 채널만 존재하며, 우측의 0과 1번 포트가 또는 USB 커넥터로 UART 통신을 사용 할 수 있습니다. 

Arduino Uno UART 연결 방법

  아래 그림은 아두이노 와 PC, 아두이노와 타 장치 간의 연결 방법을 나타내고 있습니다. 아두이노와 PC는 USB 케이블로 연결, 아두이노와 다른 장치(다른보드, 다른 전자소자 모듈)은 TX, RX, GND(경우에 따라 VCC 도 함께) 가 연결되어야 합니다. 아두이노의 TX신호는 상대 장치의 RX에, RX는 상대 장치의 TX에 연결되어야 합니다.

아두이노와 PC 연결아두이노와 PC 연결  아두이노와 아두이노 연결아두이노와 아두이노(또는 다른 장치) 연결


PC 로 Hello, Arduino! 출력하기

  간단한 예제로, PC로 Hello, Arduino! 출력 하는 프로그램을 작성하기 위해, 아래와 같이 Arduino IDE 에 코드를 작성합니다. 위의 시리얼 통신은 다소 복잡한 듯 보이나, 아두이노에서 제공하는 Serial 클래스를 사용하면, 손쉽게 통신 구현이 가능합니다.

코드 작성

  아래의 코드는 아두이노 프로그램이 시작하면 시리얼 통신의 속도를 9600으로 초기화 하고, 1회만 "Hello, Arduino!" 문자열을 시리얼 포트로 출력합니다. 

1
2
3
4
5
6
7
void setup(){
    Serial.begin(9600); // 통신 속도 설정
    Serial.println("Hello, Arduino!");  // 시리얼 포트 TX로 Hello, Arduino! 출력
}
 
void loop(){
}
cs

시리얼 모니터 열기

  Arduino IDE에는 시리얼 송/수신 데이터를 확인하기 위해 시리얼 모니터를 제공합니다. 시리얼 모니터를 사용하기 위해, 아두이노와 연결된 포트를 확인하고, 시리얼 모니터를 열고, 시리얼 모니터의 포트 속도를 설정합니다. 위 코드에서 통신 속도를 9600 으로 설정하여 같은 속도로 맞춥니다.

아두이노 시리얼 모니터아두이노 시리얼 모니터

결과 확인

  프로그램을 업로드하고, 아두이노 시리얼 포트를 연결하면 아래 그림과 같이 PC의 시리얼 모니터에 Hello, Arduino! 출력이 되는 것을 확인 할 수 있습니다.


마무리

  다음 포스트에서는 시리얼 통신 프로그램 방법과 다양한 예제들을 작성하도록 하겠습니다.

  끝까지 읽어 주셔서 감사합니다.^^

댓글
댓글쓰기 폼