2016년 6월 30일 목요일

아두니티(ARDUnity) 시리얼 통신

아두니티의 시리얼 통신에 대해 좀 더 깊게 다루겠습니다.

시리얼(Serial) 통신
시리얼 통신은 하나의 선으로 데이터를 전송하는 방식으로 기기간 통신에 있어서 가장 간단하면서 기초적인 기술입니다.

1 비트(bit)는 2가지 상태로 표현이 가능하므로 이를 순서대로 나열하면 1 바이트(Byte)의 경우 8번의 상태 변화로 데이터를 전송할 수 있습니다.
통신이 더 안정적으로 이루어지기 위해 전송 시작과 끝을 알려주는  Start Bit와 Stop Bit가 존재합니다. Parity Bit은 전송된 데이터에 오류가 있는지 판정 용으로 사용됩니다.
실제 기기간 연결은 송신용 선(TX)과 수신용 선(RX)의 2개 선을 사용하여 서로 꼬임 형태로 연결합니다.


보레이트(Baudrate)
시리얼 통신의 관건은 Bit 판정의 주기입니다. 즉, 두 기기가 같은 속도록 Bit를 판정해야 올바른 데이터를 주고받을 수 있습니다. 보레이트는 이 판정 주기를 의미합니다.
보레이트의 단위는 bps(Bit per Seconds)이며 값이 클수록 데이터 전송 속도가 높아집니다.
사실, 보레이트는 두 기기간에 같은 속도만 가지면 되지만 보다 범용적으로 사용될 수 있도록 국제 규격이 존재합니다.
가장 많이 사용되는 보레이트는 다음과 같습니다.
  • 9600 bps
  • 19200 bps
  • 38400 bps
  • 57600 bps
  • 115200 bps
예전 모뎀을 사용하셨던 분들은 위의 숫자가 익숙할 텐데, 그때는 모뎀의 성능을 위의 전송 속도로 표현했습니다.

UART(Universal Asynchronous Receiver/Transmitter)
시리얼 통신은 아주 기초적이면서 광범위하게 사용되는 통신 방식이기에 대부분의 하드웨어는 이를 지원합니다.
대부분의 마이크로 컨트롤러는 UART라 부르는 장치를 내장하고 있는데, UART의 역할은 시리얼 통신을 하드웨어적으로 처리해줍니다.
아두이노에도 마찬가지로 이 UART가 있습니다.
아두이노 보드 시리즈의 사양을 확인하면 UART의 개수를 알 수 있는데, UART의 개수가 곧 아두이노 보드에 연결될 수 있는 통신 장치의 수라고 생각할 수 있습니다.
가장 많이 사용되는 아두이노 Uno의 경우 UART는 1개이고, 아두이노 Mega의 경우는 UART가 3개 있습니다.


USB2Serial
PC에서는 UART를 사용할 수 없고 USB를 UART로 변환해주는 컨버터를 사용해야 하는데, 이것을 USB2Serial이라 부릅니다.
아두이노에는 USB2Serial 장치가 내장되어 있고, 이것때문에 아두이노 보드가 USB로 PC에 연결되는 것입니다.

PC에서 USB2Serial이 인식되기 위해서는 드라이버가 필요한데, Arduino IDE를 설치하면 대부분 자동 설치되고 FTDI Chip사의 USB2Serial은 대부분의 OS에 기본 내장되어 있어서 별도의 드라이버 설치 없이 자동 인식됩니다.
다만, 별로 유명하지 않은 제조사의 USB2Serial의 경우는 사용자가 직접 드라이버를 구해서 설치해야 하는 번거로움이 있습니다.
저가형 아두이노 보드의 경우 대부분 유명하지 않은 USB2Serial을 사용하는 경우가 많습니다.

Arduino Stream Class
아두이노에서 외부와 통신하기 위해 사용되는 라이브러리를 Stream Class라 부릅니다.
가장 기본적인 시리얼 통신은 UART를 사용하게 되고, 이것을 위해 Serial Class를 제공합니다.
UART가 여러개 있는 아두이노 보드는 Serial0, Serial1, Serial2와 같이 각각 구별하여 사용할 수 있습니다.
아두니티는 아두이노에서 유니티와 통신하기 위해 사용하는 Stream Class를 선택할 수 있는 옵션을 제공합니다.

아두니티에서 제공하는 선택 가능한 Stream Class 종류는 다음과 같습니다.
  • Serial: UART0
  • Serial1: UART1
  • Serial2: UART2
  • Serial3: UART3
  • SoftwareSerial: UART가 아닌 직접 TX, RX 핀을 사용하는 경우
  • AltSoftSerial: AltSoftSerial Library를 사용하는 경우
  • Bridge: Arduino Yun 보드의 경우

CommSerial Baudrate
유니티에서 시리얼 통신을 사용하려면 아두니티 CommSocket인 CommSerial을 추가하면 됩니다.
CommSerial의 Inspector View에서 메뉴를 보면 Baudrate가 있는데, 이것은 바로 PC의 Baudrate 설정입니다.

ArdunityApp에서 Sketch Option에 Baudrate가 있는데, 이것은 아두이노 보드의 Baudrate이므로 PC와 상관없습니다.
앞에서 두 기기간 시리얼 통신이 이루어지려면 Bit 판정 주기인 보레이트가 같아야 한다고 말했듯이 ArdunityApp의 보레이트와 CommSerial의 보레이트가 서로 같아야 통신을 할 수 있습니다.


댓글 없음:

댓글 쓰기