Serial 통신 해보기
1. Serial 통신
시리얼 통신은 병렬 통신과 달리 적은 수의 신호선을 이용하여 데이터를 전송하는 방식을 말한다. 일반적으로 1~2개의 선을 가지며, 우리가 익숙하게 사용하는 USB도 Universal Serial Bus로 직렬 통신의 한 종류이다.
반대로 Parallel 통신은 여러 개의 신호선을 사용하기 때문에 짧은 시간에 많은 양의 데이터를 전송할 수 있어 대역폭에는 장점을 가지지만, 통신 거리가 길어지게 되는 경우 전체 길이가 길어져서 비용이 크게 증가하는 문제가 있다.
비슷한 관점으로 적은 선만 제어하면 되기 때문에 칩셋의 구성이 간단해지고 비교적 장거리 통신이 가능해지며 전체적인 가격이 저렴하다.
비슷한 Serial 통신에는 우리가 사용할 RS232와 RS485가 있고 SPI나 I2C가 존재한다. 오늘은 가장 기본적인 USB to TTL 컨버터를 통해서 아두이노와 컴퓨터 사이의 데이터를 UART로 주고 받아 본다.
2. UART와 RS232, RS485 그리고 TTL
UART는 Universal Asynchronous Receiver Transmitter의 약어로 아두이노에서는 이 UART를 지원한다. 이름에서 알 수 있듯 데이터를 직렬화하여 통신할 수 있으나, 세부적인 통신 속도나 규약은 프로그래밍 상으로 설정할 수 있다.
통신을 하다 보면 항상 등장하는 말이 TTL(TTL 레벨 혹은 TTL 신호레벨)인데, TTL은 Transistor to Transistor Logic으로 트랜지스터의 5V 전압을 기준으로 동작하는 회로를 뜻한다.
참고로 RS232, RS485등은 Physical Layer에서의 규격으로 통신 장비에서 어떤 전압과 신호를 정의한 프로토콜이다. 따라서 UART와 직접 연결해서 사용할 수 없다.
3. USB to TTL 컨버터
USB to TTL 컨버터 혹은 USB to UART TTL 컨버터는 컴퓨터와 USB로 연결하고 다른 한쪽은 UART TTL를 연결할 수 있다. 대표적으로 PL2303h, CH340 칩셋을 사용한 컨버터이다. 가격은 1~2천원 선이며, Vcc, GND, Tx, Rx 4개의 핀으로 연결된다.
USB를 컴퓨터에 연결하고, 장치관리자->포트 연결된 포트를 확인하면 COM숫자로 표기된다.
4. 터미널 프로그램을 이용해서 USB to TTL 컨버터에 데이터 보내기
사용하는 운영체제의 비트에 맞게 아래의 Putty를 다운로드 받자. 정 모르겠으면 두 개 다 받고 실행시켜보면 된다.
프로그램을 실행시키고, 아래의 Serial 버튼을 누른 다음, Serial Line에 앞에서 확인한 포트(COM숫자)와 Speed를 9600으로 선택하고 실행하자.
실행하고 나면, 입력을 해도 아무런 반응이 나오지 않는다. 이게 정상이다. (프로그램에 따라서 Echo 해주는 프로그램도 있으니 편리한 것을 찾아서 쓰면 된다)
5. 회로도
TX와 RX를 연결할 때 반드시 교차해서 연결해야 한다. Tx, Rx는 Transmit / Receive의 약어로 자신 기준으로 전달하는 선와 수신하는 선이라고 생각하면 된다.
6. 소스 코드
echo 프로그램의 소스코드이다. 에코 프로그램이란 입력 받은 내용을 그대로 전달하는 것을 말한다. 여기서는 컴퓨터에서 입력한 값을 아두이노에서 받아서 그대로 컴퓨터로 전달하는 동작을 수행한다.
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available()){
// 수신
char data = Serial.read();
// 송신
Serial.write(data);
}
}
이와 같이 프로그램을 작성하게 되면, Serial UART통신의 송, 수신을 모두 사용해본 것이다.
사실 지금까지 Serial 모니터를 통해서 출력했던 것과 거의 유사하다. 그래서 코드라고하기도 뭣하지만.. 아무튼 이제 입력을 받아서 if문이나 switch문을 사용해 조건에 맞으면 LED를 동작시키는 등의 작업을 수행하면 된다.
'라즈베리파이, 아두이노' 카테고리의 다른 글
[간단한 아두이노 코딩] 19. HC-06 모듈로 Bluetooth 통신 해보기 (0) | 2020.11.24 |
---|---|
[간단한 아두이노 코딩] 18. RS485 통신 해보기 (TTL to RS485 컨버터) (3) | 2020.11.24 |
[간단한 아두이노 코딩] 16. 릴레이 사용하기 (0) | 2020.11.24 |
[간단한 아두이노 코딩] 15. 16x2 캐릭터 LCD 사용하기(LCM1602A) (0) | 2020.11.24 |
[간단한 아두이노 코딩] 14. 도트 매트릭스 사용하기 (0) | 2020.11.24 |