본문 바로가기

전자공학/Firmware

아두이노 시리얼 통신 이해 & 실무에서 사용 방법은?

반응형

 

 

 

 

 

 

안녕하세요. D.U.T입니다!

클릭 및 방문해 주셔서 감사합니다!

 

 

이번 포스팅은 아두이노 시리얼 통신(직렬 통신)과 관련하여 말씀드리고자 합니다. 

 

오랜만에 아두이노 포스팅을 업데이트합니다. 

 

방문해 주시는 많은 분들에게 도움이 되길 바랍니다. 

 

 

 


 

 

 

아두이노 시리얼 통신을 알아보기 전에 먼저 시리얼 통신(직렬 통신)은 무엇인지 잠시 알아보겠습니다.

 

 

◆ 시리얼 통신(직렬 통신)은 무엇일까요?

시리얼 통신(직렬 통신)은 보내고자 하는 데이터를 한 번에 하나의 비트(bit) 단위로 데이터를 전송하는 과정입니다. 

 

항상 글로 읽으면 이해가 어렵습니다. 그림으로 무엇인지 알아보겠습니다. 

 

( 시리얼 통신=직렬 통신 )

 

시리얼 통신(직렬 통신)은 앞에서 말씀드린 내용처럼 데이터를 순차적으로 보내면 받는 쪽에서도 순차적으로 데이터를 받아서 처리합니다. 

 

그림을 보시면 D 글자를 2진수(D=1000100)로 변환했습니다.

변환된 값을 시리얼 통신(직렬 통신)으로 한 비트(bit)씩 보냅니다. 

그러면, 받는 쪽에서도 한 비트(bit)씩 받은 후에 처리하면 이것이 D 글자라는 것을 알 수 있습니다. 

 

또 다르게 한번 더 설명드리겠습니다.

여러분이 친구에게 편지를 쓴다고 상상해 볼까요?

여러분은 편지에 한 줄로 한 단어씩 차례로 씁니다. 여러분이 편지를 다 작성한 후에, 편지를 봉투에 넣고 친구에게 보냅니다. 친구는 여러분이 쓴 순서대로 한 단어씩 편지를 읽습니다.

 

이러한 과정이 시리얼 통신(직렬 통신)에서 일어난다고 보시면 됩니다. 

 

시리얼 통신(직렬 통신)을 알아봤으니 패러럴 통신(병렬 통신)도 알아보겠습니다. 

 

 

 

◆ 패러럴 통신(병렬 통신)은 무엇일까요?

패러럴 통신(병렬 통신)은 시리얼 통신(직렬 통신)과 다릅니다.

무엇이 다를까요? 

바로 패러럴 통신(병렬 통신)은 보내고자 하는 데이터의 비트 수만큼 데이터 전송선이 필요합니다. 

 

( 패러럴 통신=병렬 통신 )

 

시리얼 통신(직렬 통신)에서는 한 비트(bit)씩 보냈지만, 패러럴 통신(병렬 통신)여러 비트를 한 번에 모두 보냅니다.

 

시리얼 통신(직렬 통신)과 패러럴 통신(병렬 통신)의 차이점이 이해되시겠죠?

 

( 시리얼 통신 vs. 패러럴 통신 )

 

차이점을 정리한 표를 보시면 이렇습니다. 

위 비교표는 일반적으로 알려진 사실입니다.

직렬 통신과 병렬 통신의 발전 역사를 알아보면 재밌는 부분이 많습니다.

설명을 드리기에는 포스팅 주제와 맞지 않아 궁금하신 분들은 검색을 추천드립니다.

 

 

 


 

 

 

다음은 아두이노로 PC와 시리얼 통신(직렬 통신)을 해보겠습니다.

 

 

 

◆ 아두이노 시리얼 통신(직렬 통신) 구성 및 이해

아두이노로 PC와 시리얼 통신(직렬 통신) 실습해보기 전에 아두이노 보드는 어떻게 PC와 시리얼 통신(직렬 통신)을 하는지 알아보겠습니다.

 

아두이노 우노 회로도를 보겠습니다.

▼ ▼ ▼ ▼ ▼ ▼

 

아두이노 우노 회로.PDF

 

▲ ▲ ▲ ▲ ▲ ▲

 

회로도는 위 링크를 터치 or 클릭하시면 확인할 수 있습니다.

 

초보자가 처음 회로도를 보면 이해가 어려울 수 있습니다.

 

회로도에서 핵심적인 부분만 블록으로 살펴보겠습니다.

 

( 아두이노 시리얼 통신 구성 )
( 아두이노 우노 보드 )

 

회로도에 기준 지정 문자(Reference Designator)만 보시면 됩니다.

( 우노 회로: USB = X2,   ATMEGA16U2-MU(R) = U3,   ATMEGA328P-PU = ZU4 )

참고로 지정 문자는 부품 식별을 위해서 사용합니다.

 

아두이노로 PC와 시리얼 통신(직렬 통신)을 위해서는 아두이노 우노 보드에서 위 3개 부품과 회로 연결만 하면 시리얼 통신(직렬 통신)이 가능합니다.

(※ USB 전원 핀 연결과 GND 연결은 표시하지 않았지만, 연결이 필요합니다.)

 

시리얼 통신(직렬 통신)에서는 RXD, TXD의 데이터 선만 있으면 통신이 가능합니다. 

그리고 각 IC에 표시된 RXD1, TXD1, TXD, RXD PIN들은 RS-232 시리얼 통신 방식의 인터페이스 연결 방법입니다.

참고로 RS-232는 9개의 프로토콜 포트핀이 있습니다.

다만, 위에서 말씀드린 RXD, TXD, GND(통신 레벨의 기준점) 3개의 선만으로 회로를 구성하여 통신이 가능하므로 모든 핀들을 연결하여 사용하지 않아도 됩니다.

구체적인 내용은 뒤에서 다시 말씀드리겠습니다. 

 

 

 

PC와 시리얼통신은 USB 포트를 아두이노 우노 보드 USB에 연결만 하면 됩니다. 

작동 원리는 위에서 보시면 아시겠지만, 아두이노 우노 보드에는 AVR(ATMEGA)가 2개가 있습니다.

 

ATMEGA328P-PU는 아두이노 동작을 담당하는 메인프로세서입니다. 

ATMEGA16U2-MU(R)는 PC와 USB를 연결할 경우, 시리얼 통신으로 변환해 주는 역할을 합니다.

그러므로, PC와 아두이노는 위 과정을 거쳐 통신을 할 수 있습니다. 

 

 

반응형

◆ 아두이노와 PC 시리얼 통신(직렬 통신) 실습

앞에서 아두이노가 어떻게 PC와 시리얼 통신을 할 수 있는지 알아봤습니다.

이론적으로 알아봤으므로, 다음은 실습을 해보겠습니다. 

 

아두이노가 PC와 USB로 연결되지만, 실제 통신은 시리얼 통신(직렬 통신)으로 데이터를 주고받습니다. 

USB가 RS-232 통신을 할 수 있게끔 해주고 있다고 이해하시면 됩니다. 

 

1. 아두이노 PC와 연결하기

( 아두이노 PC 연결 )

 

USB 케이블을 아두이노에 연결하고 반대쪽은 PC에 연결합니다.

 

 

 

2. 아두이노 실행 및 연결 확인

다음은 아두이노를 실행합니다. 

 

( 아두이노 시리얼 포트 연결 확인 )

 

툴에서 포트 정보를 확인하여 연결이 됐는지 확인합니다.

사용자마다 COM1,2,3 정보는 다를 수 있으므로 참고만 해주시기 바랍니다. 

 

 

 

3. 아두이노 시리얼 모니터 실행 

( 아두이노 시리얼 모니터 실행 )

 

툴 - 시리얼 모니터를 클릭하거나 단축키 Ctrl+Shift+M을 누르면 시리얼 통신 데이터를 확인할 수 있는 창이 나옵니다. 

 

( 아두이노 - 통신 속도 설정 )

 

시리얼 모니터 창에서 데이터가 제대로 확인이 안 되면 통신 속도 설정이 올바르게 됐는지 확인을 해야 합니다. 

참고로 통신 속도는 보통 1 보드레이트(baud rate) = 1bps 입니다.

예) 115200 baud rate = 115200bps

 

 

 

4. 아두이노 시리얼 통신 - 실습 코드

 

( 아두이노 시리얼 통신 - 실습 코드 )

 

실습을 위해 간단한 코드를 작성해 봤습니다. 

Serial.begin()은 시리얼 통신 속도 설정입니다. 

시리얼 모니터에서도 동일하게 값을 설정해야 합니다. 

 

Serial.println()은 PC에 데이터를 보낸 후에 캐리지리턴, 줄 바꿈입니다. 

 

Serial.wrtie()은 값을 바이너리 형태로 보냅니다. 값을 받으면 ASCII 값에 해당하는 문자가 출력됩니다.

 

실습 코드를 작성하고, 컴파일 후에 메뉴 왼쪽 위에 화살표를 누르면 업로드됩니다. 

 

 

 

5. 아두이노 시리얼 통신 

 

( 아두이노 시리얼 통신 결과 )

 

업로드 버튼을 누르면 시리얼 모니터에서 결과를 확인할 수 있습니다. 

 

앞에서 봤던 D의 ASCII 값 2진수는 1000100이었습니다. 

동일한 값을 확인할 수 있네요!

 

이렇게 아두이노와 PC 시리얼 통신(직렬 통신) 실습을 간단하게 해 봤습니다. 

 

다음은 시리얼 통신(직렬 통신)이 실무에서는 어떻게 사용되는지 말씀드리겠습니다. 

 

 

 


 

 

 

◆ 실무에서 시리얼 통신(직렬 통신) 사용 방법은?

앞에서 아두이노 시리얼 통신(직렬 통신) 구성을 설명드렸습니다. 

AVR(ATMEGA)를 예를 들어 설명드렸지만, 다른 MCU, FPGA 등도 동일한 원리로 통신을 합니다.

 

( RS-232 시리얼 통신 )

 

시리얼 통신(직렬 통신)의 종류는 여러 가지가 있지만, RS-232 시리얼 통신 기준으로 설명드리겠습니다. 

예전 컴퓨터에서는 D-SUB(COM 포트) 포트가 메인보드에 있어서 바로 연결하여 사용할 수 있었습니다. 그러나, 최신 컴퓨터 메인보드에는 D-SUB(COM 포트) 포트가 없습니다. 

 

USB 포트만 사용을 합니다.

USB 포트에 USB to RS-232 시리얼 컨버터를 연결하여 통신을 합니다. 

시리얼 컨버터의 작동 원리는 앞에서 보여드린 아두이노 작동 원리와 동일합니다. 

 

( 9 PIN D-SUB 커넥터 )

 

그래서 실제 개발을 할 경우에  통신을 위해 사용하는  D-SUB PIN은 3개만 사용합니다. 

 

★ 2번 PIN - RXD (Receive Data) ★ 

3번 PIN - TXD (Transmit Data) ★ 

5번 PIN - GND (Ground) ★ 

 

앞에서 공부했기 때문에 이제는 익숙하시죠?

 

개발하는 PCB 보드의 MCU나 FPGA에 해당 핀들을 회로적으로 연결합니다. 그리고 PCB 보드에 통신 포트를 만들어 USB to RS-232 시리얼 컨버터에 연결할 수 있게 구성합니다. 

 

이렇게 연결을 구성한 뒤에 RS-232 시리얼 통신 테스트 프로그램을 사용합니다. 그러면 디버깅을 할 수 있고 로그 확인, MCU & FPGA 레지스터 설정 등도 할 수 있습니다. 

 

( RS-232 통신으로 로그 확인 )

 

RS-232 시리얼 통신의 활용 방법은 더 있을 수 있지만, 제가 경험이 있는 부분만 설명드렸습니다. 

이점 참고해 주시기 바랍니다. 

 

 

 


 

 

 

이번 포스팅에서는 아두이노 시리얼 통신(직렬 통신) 구성을 확인하고 이해 및 실습을 해봤습니다. 

 

최대한 방문하시는 분들에게 도움이 되는 정보를 공유하고자 노력해 봤습니다만, 도움이 되실지 모르겠습니다. 

 

부족한 글 읽어주셔서 감사합니다.

 

궁금한 점은 댓글 부탁 드립니다. 

 

감사합니다.

 

 

반응형