아두이노

UART를 이용해 아두이노와 컴퓨터 통신하기

CreatoMaestro 2023. 12. 27. 22:13
반응형

UART는 무엇인가?

UART는 2개의 선을 이용한 통신 방식입니다. 

이 통신 방식은 직렬 통신 방식으로 여러 비트의 데이터를

순차적으로 하나씩 보냅니다.

 

UART를 이용해 두 디바이스를 연결하는 방법은 다음과 같습니다.

UART 통신
두 디바이스의 UART 연결 방식

Tx는 송신선으로 데이터를 다른 디바이스로 보내는 역할을 합니다.

Rx는 수신선으로 데이터를 다른 디바이스로 부터 받는 역할을 합니다.

 

두 선을 교차로 연결해야 UART 통신을 할 수 있습니다.

Tx는 다른 Rx에 연결해야 보낸 데이터를 받을 수 있다고 생각하시면 편합니다.

 

아두이노로 컴퓨터와 통신하기

아두이노는 자체적으로 컴퓨터와 연결할 수 있는 회로를 가지고 있습니다.

그렇기에 USB로 연결하기만 하면 UART 통신이 가능합니다.

우리는 코드를 짜고 업로드하기만 하면 됩니다.

 

UART와 관련된 함수는 여러가지가 있지만

여기서는 4가지만 이용해 통신하도록 하겠습니다.

각 함수는 다음과 같습니다.

 

1. Serial.begin('통신속도')

이 함수는 UART 통신을 시작하는 함수입니다.

소괄호 안에 통신속도를 넣어줍니다.

이 통신 속도에 맞춰 UART 통신을 하게 됩니다.

 

2. Serial.write('데이터')

이 함수는 UART를 통해 데이터를 보내는 함수 입니다.

소괄호 안에 데이터를 넣으면 그 데이터를 보냅니다.

 

이 함수 외에 Serial.print와 Serial.println라는 함수를 쓸 수 있습니다.

Serial.write이 데이터를 그대로 보낸다면,

Serial.print와 println은 데이터를 가공하여 화면에 보이는 그대로 뜨도록 만듭니다.

예를 들어 우리가 7을 보내면 write은 그대로 숫자 7을 보내지만,

print, println은 문자 '7'을 보냅니다.

 

3. Serial.read()

이 함수는 UART를 통해 데이터를 받는 함수입니다.

이 함수는 받은 데이터를 반환합니다.

 

4. Serial.available()

이 함수는 UART에서 받은 데이터 중

읽지 않은 데이터가 있는지 확인하는 함수입니다.

 

읽지 않은 데이터 수를 반환합니다.

이를 통해 우리가 UART에서 데이터를 읽어와야 하는지 판단할 수 있습니다.

 

이제 예제를 하나 보도록 하겠습니다.


char data;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0) {
    data = Serial.read();
    Serial.write(data);
  }
}

 

이 예제는 컴퓨터로 부터 받은 데이터를 그대로 다시 돌려주는 코드입니다.

Serial.available 함수를 이용해 데이터가 있는지 확인하고

Serial.available 함수가 if문 안에 있기 때문에 함수가 0을 반환할 경우

안에 있는 코드를 실행하지 않습니다.

 

만약 컴퓨터로부터 데이터가 들어와 0보다 커지게 되면

if문이 실행되면서 if문 안의 코드가 실행됩니다.

 

컴퓨터로부터 데이터가 들어오면 데이터를 Serial.read로 읽어옵니다.

읽어온 데이터는 char 타입 변수인 data에 저장됩니다.

(char 타입은 문자 타입의 변수를 의미합니다.)

 

이후 변수 data에 저장된 변수를  Serial.write을 이용해 컴퓨터로 데이터를 보냅니다.

그럼 시리얼 모니터에 데이터가 뜨는 것을 확인하실 수 있습니다.

 

지금까지 UART에 대해 알아봤습니다.

반응형