바위 뚫는중

[Arduino] 아두이노 시리얼 통신, 디지털 데이터 입출력 함수 본문

Arduino

[Arduino] 아두이노 시리얼 통신, 디지털 데이터 입출력 함수

devran 2023. 3. 4. 20:05
반응형

아두이노 Library

  • C ++ 기반의 객체지향 방식으로 작성
  • 종류
    • 아두이노에서 제공되는 기본 라이브러리
      • 아두이노 설치 directory 아래 ‘libraries’
    • 써드 파티에서 제공한 확장 라이브러리
      • 스케치북 directory 아래 ‘libraries’
  • 아두이노는 Library와 별개로 2개의 기본 클래스를 제공
    • UART 시리얼 통신을 위한 Serial 클래스와 문자열 처리를 위한 String 클래스
    • 별도의 헤더 파일 (*.h) 없이 사용 가능

Serial 클래스

  • UART 시리얼 통신을 위한 클래스
    • UART(범용 비동기화 송수신기: Universal asynchronous receiver/transmitter)는 병렬 데이터의 형태를 직렬 방식으로 전환하여 데이터를 전송하는 컴퓨터 하드웨어의 일종
  • 실제 클래스 이름은 Serial_이며, 그 객체가 Serial
  • 우노는 하나의 UART 시리얼 통신 포트만을 제공하지만 메가2560은 4개의 시리얼 통신포트를 제공하고 Serial, Serial1,2,3 전용 객체가 미리 생성되어 있음
  • RS-232C에서 정의된 RX, TX, GND 핀을 사용하여 통신
  • UART 시리얼 통신은 시리얼 통신의 한 종류이지만, 흔히 시리얼 통신 = UART 통신을 가리킴
  • RX와 TX는 서로 교차되어 연결되어야 함
  • 마이크로컨트롤러의 동작 전압을 기준으로 통신: TTL 레벨 사용
    • UART 시 아두이노 메가 2560의 경우 5V 기준 전압을 사용
    • 다른 기타 경우에는 레벨 변환 장치가 필요, 컴퓨터 - USB 통신을 위해서도 변환 장치가 필요
  • 아두이노 보드와 컴퓨터의 통신은 USB를 이용하여 이루어짐
    • 아두이노 보드의 ATmega16u2 컨트롤러가 USB와 UART사이의 변환을 담당
    • Mega2560의 0번 UART 채널 사용
    • 0번 UART 채널에 해당하는 Serial 객체를 통해 USB를 통한 컴퓨터와의 시리얼 통신 수행

RS-232C

직렬 통신: 시리얼 통신, 한 번에 한 비트씩 전송

병렬 통신: 패럴렐 통신, 한 번에 여러 비트를 전송

시리얼 통신

시리얼 통신은 병렬보다 느리지만 간단하고 유용하고 가격이 저렴

통신을 하려면 기본적으로 3개의 선이 필요

  • TXD 송신
  • RXD 수신
  • GND

시리얼 통신은 동기식 통신, 비동기식 통신으로 나뉘게 됨

RS232C

미국의 EIA에 의해 정해진 표준 인터페이스

“직렬 2진 데이터의 교환을 하는 데이터 터미널 장비와 데이터 통신 장비 간의 인터페이스의 제반 사항을 규정하는 것” 이라 함

RS = Recommended Standard

232 = 특정 규격의 식 별 번호

C = 버전을 의미

RS232 통신은 1:1 접속

총 9개의 핀으로 구성되어 있으나, TXD, RXD, GND만으로 사용하는 경우가 많고 나머지 핀은 시리얼 통신 시 하드웨어 컨트롤이 필요한 경우에 사용함

TTL과 RS232비교

TTL은 5볼트와 0볼트 사이를 왔다갔다 하고, RS232 신호는 10볼트와 -10볼트 사이를 왔다갔다 함

Serial 클래스 - 데이터 입출력 함수

데이터 출력 함수

Serial.begin(baudrate)

  • Serial 통신을 사용하기 위한 선언
  • 입력 값: baudrate: Serial 통신 속도 (9600, 115200, ,,,)

Serial.print(value, format)

  • Serial 통신을 통하여 입력 값을 보냄 (개행문자 미포함)
  • 입력 값
    • value: 출력 값 (char, char 배열, String, 정수, 실수 등)
    • format: 출력 형식
void setup(){
	Serial.begin(9600);
}

void loop(){
	Serial.println("hello!")
}

진법과 소수점 이하 자리수

Serial.println(n, BIN); //이진수
Serial.println(n, DEC); //십진수, 기본값이므로 생략 가능
Serial.println(n, HEX); //십육진수

Serial.println();
Serial.println(f); //소수점 두번째 자리까지 기본값
Serial.println(f, 5); //소주점 다섯번째 자리까지

데이터 입력 함수

int available(void)

  • 매개변수: 없음
  • 반환값: 시리얼 통신 수신 버퍼에 저장된 데이터의 바이트 수

int peek(void)

  • 매개변수: 없음
  • 반환값: 시리얼 통신 수신 버퍼의 첫 번째 바이트 데이터 또는 -1

int read(void)

  • 매개변수: 없음
  • 반환값: 시리얼 통신 수신 버퍼의 첫 번째 문자 데이터 또는 -1
void setup(){
	Serial.begin(9600);
}

void loop(){
	if(Serial.available()>0){
		byte data = Serial.read();
		
		Serial.print("Echo back: ");
		Serial.print(data);
		Serial.print((char)data);
	}
}
반응형