본문 바로가기

아두이노

시리얼 통신과 시리얼 함수

 

1. 시리얼 통신이란 무엇일까?


임베디드 시스템은 각종 프로세서와 회로들 간에 서로 통신하며 동작하는 것이 핵심이기 때문에 데이터를 주고받는 표준 프로토콜들이 필요하다. 일반적으로 크게 두 개의 카테고리로 나눌 수 있다. 바로 패러럴(병렬, parallel)시리얼(직렬, serial)이다.

 

이때, 시리얼 통신(직렬 통신)은 하나 또는 두 개의 전송 라인을 사용하여 데이터를 송수신하는 통신 방법으로, 한 번에 한 비트 씩 데이터를 지속적으로 주고받는다. 시리얼(Serial) 인터페이스는 데이터를 스트림으로 바꿔서(직렬화) 한 번에 한 비트씩 전송한다. 아래와 같이 시리얼 인터페이스는 clock 라인을 포함 2라인으로 데이터를 전송할 수 있다.


시리얼 통은 적은 신호선으로 연결 이 가능하기 때문에 선재와 중계 장치 의 비용이 낮다는 등의 장점이 있다.

 

시리얼 통신은 데이터 전송을 위한 선(TX) 하나와 수신을 위한 선(RX) 하나로 이루어진다. 대부분의 아두이노 보드에서는 0번과 1번 핀을 시리얼 통신을 위한 핀으로 사용하며, (Mega 2560/ADK)의 경우에는 여기에 3쌍의 핀(14~19번 핀)이 추가되어 총 4쌍의 시리얼 통신 핀을 가지고 있고 0~3번까지 총 4개의 포트가 있는데 우노(Uno)의 경우에는 0번 밖에 없다.

 

2. 시리얼 통신 규격

 

RS-232C / RS-422A / RS-485 EIA (전자 산업 협회) 통신 표준이다.

이러한 통신 표준 중 RS-232C는 다양한 응용 분야에서 널리 채택되어 왔으며 컴퓨터의 표준 장비이기도하다. 이 직렬 통신 표준은 널리 사용되며 종종 표준으로 컴퓨터에 장착된다. "EIA-232"라고도 한다. 현재 표준은 신호선을 추가하여 개정되었으며 정식으로 "ANSI / EIA-232-E"라고 한다. 그러나 지금은 일반적으로 "RS-232C"라고도 한다.

 

3. 아두이노 스케치(IDE) 시리얼 모니터 사용하기

 

아두이노 스케치에는 PC와 제어기간의 시리얼 통신 상황을 모니터링할 수 있는 시리얼 모니터를 제공한다.

 

통신 포트 번호 확인

제어기와 PC를 연결한 후 아두이노 스케치의 도구 -> 시리얼 포트에서 연결된 통신 포트를 확인한다.

여러개의 포트 번호중 어떤 것을 선택해야 할 지 모를 경우에는 장치 관리자 화면을 열어 서 포트(COM&LPT) 탭을 클릭하면 Silicon Labs CP210x. 와 같은 이름을 가진 장치가 있는 지 확인한다. 이 장치의 포트 번호(COMx)와 동일한 번호를 아두이노 스케치 시리얼 포트 메뉴에서 선택한다.

 

 

 

시리얼 모니터 창

우측 상단에 돋보기 모양의 시리얼 모니터 버튼을 클릭하면 시리얼 모니터 창이 화면에 나 타난다. 만약 PC와 제어기간의 연결이 되어 있지 않거나 시리얼 통신 USB 장치 드라이버 가 제대로 설치되지 않은 경우에는 시리얼 모니터 화면이 출력되지 않을 수 있다.

 

시리얼 모니터의 큰 텍스트 창에는 제어기로부터 PC가 수신받는 데이터가 출력된다. PC 에서 제어기로 데이터를 송신하고자 한다면 상단 작은 텍스트 창에 문자()를 입력하고 ‘send’버튼을 누르면 입력한 문자가 제어기로 전송된다.

 

시리얼 모니터 창 우측하단에는 시리얼 통신의 전송속도를 선택하는 메뉴가 있다. 이 전송 속도는 프로그램에서 설정한 값과 일치시켜야 정상적인 데이터 송수신을 할 수 있다.

 

4. 시리얼 함수

시리얼 통신을 사용하기 위해서는 시리얼 통신 포트를 초기화 해줘야 하는데, 이 기능을 하는 함수가 Serial.begin()함수이다.

 

Serial.begin([speed])

ex) Serial.begin(9600)-> 9600bps의 전송속도

 

제어기에서 문자열을 PC나 다른 제어기롤 보내기 위한 함수는 Serial.print()Serial.println()함수이다.

 

Serial.print([value])

Serial.println([value])

ex) Serial.print(“Sunrin”)->Sunrin 전송후 줄바꿈하지 않음

     Serial.println(“Sunrin”)->Sunrin 전송후 줄바꿈 함

 

수신 버퍼에 읽지 않은 데이터가 몇 개인지를 반환하여 PC로부터 데이터가 수신 되었는지의 여부를 확인하는 함수는 다음과 같다.

 

int Serial.available()

 

제어기에서 1바이트를 PC나 다른 제어기로 보내기 위한 함수는 다음과 같다.

 

Serial.write([value])

ex) Serial.write(0xF0);-> 16진수값 F0을 전송

 

Serial.read() 멤버함수는 수신받은 데이터를 한 바이트씩 읽습니다. j에는 가장 먼저 수신된 1바이트 데이터가 저장됩니다.

 

byte j = Serial.read()

 

Serial.parselnt()함수는 시리얼 통신으로 수신되는 데이터가 숫자를 나타내는 문자열일 경우, 그 값을 숫자로 변환하여 long 타입으로 반환한다.

 

float Serial.parseFloat()함수는 숫자와 문자를 입력받아 float현의 데이터로 변환해 반환한다.

 

byte Serial.readBytes()함수는 길이가 정해진 데이터를 수신할 때 유용한데 지정한 개수만큼 데이터가 수신되지 않을 경우 수신된 개수만큼만 저장하고 그 개수를 반환한다.

 

byte SerialBytesUntil()함수는 지정한 문자가 수신될 때까지 데이터를 읽어온다. , length값으로 지정한 개수를 넘지 않는다.

 

Serial.setTimeout(timeout)함수는 Serial.readBytes()SerialBytesUntil() 함수에 사용되는 타임아웃 시간을 설정한다. 지정한 길이만큼 데이텉가 수신되지 않았을 때, 수신을 기다리는 최대 시간을 의미한다. 기본으로 1초가 설정되어있다.

 

Serial.end()함수는 시리얼 통신 연결을 끊고, 사용되던 핀을 일반디지털 IO핀으로 사용하게 된다.

 

'아두이노' 카테고리의 다른 글

기획서 수정본  (0) 2018.06.08
기획보고서  (1) 2018.05.23
아두이노 센서 10가지  (0) 2018.05.18