본문 바로가기
아두이노

7. 블루투스 통신

by Beijing_KingGod 2019. 12. 18.

1. 강의목표

      1. 시리얼 통신이란,,

      2. 블루투스(BLUETOOTH)

      3. 블루투스 통신 실습

2. 필요부품

HC-06,  Arduino uno

 

3. 원리

 

시리얼(Serial) 통신 소개

 

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

 

cf) 프로토콜 : 통신 프로토콜 또는 통신 규약 컴퓨터 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜은 신호 체계인증, 그리고 오류 감지 및 수정 기능을 포함할 수 있다. 프로토콜은 형식, 의미론, 그리고 통신의 동기 과정 등을 정의하기는 하지만 구현되는 방법과는 독립적이다. 따라서 프로토콜은 하드웨어 또는 소프트웨어 그리고 때로는 모두를 사용하여 구현되기도 한다. –위키백과-

 

패러럴(병렬)과 시리얼(직렬)

 

패러럴(Parallel) 인터페이스는 다수의 비트(bit)를 한번에 전송하는 방법입니다. 이들은 보통 8 또는 16 또는 그 이상의 라인을 통해 동시에 데이터를 보내줍니다.

 

그리고 타이밍(clock)에 맞춰 모든 라인이 같이 동작할 수 있도록 clock(CLK) 라인이 필요하므로 8-bit data bus 의 경우 9라인이 사용됩니다.

 

반대로 시리얼(Serial) 인터페이스는 데이터를 스트림으로 바꿔서(직렬화, serialization) 한 번에 한 비트씩 전송합니다. 아래와 같이 시리얼 인터페이스는 clock 라인을 포함 2라인으로 데이터를 전송할 수 있습니다.

 

패러럴이 고속도로라면 시리얼은 국도입니다대신 고속도로가 국도보다 소모되는 자원이나 비용이 많은 셈입니다.

패러럴은 빠르고 상대적으로 구현이 쉽지만 input/output(I/O) 라인을 많이 소모합니다. 아두이노 UNO 보드에 사용한다고 생각해 보시면 패러럴 방식이 소모하는 I/O 라인이 너무 많다고 느껴지실겁니다. 따라서 속도를 좀 희생하더라도 I/O 라인을 아낄 필요가 있습니다.

 

 

비동기식 시리얼(Asynchronous Serial)

 

임베디드 시스템의 필요에 따라 수 많은 시리얼 프로토콜이 구현되었습니다. USB, 이더넷(Ethernet) 등이 익숙한 예일 겁니다. 그 외에도 SPI, I2C, Serial 표준 프로토콜도 범용적으로 사용하는데 이 문서에서는 여기에 초점을 맞출 것입니다. 시리얼 인터페이스들은 다음과 같은 두 개의 그룹으로 나눌 수 있습니다. 동기식(synchronous) 또는 비동기식(asynchronous).

 

동기식 시리얼 인터페이스는 데이터 라인(data line)의 동작을 클럭 시그널(clock signal) 라인의 동작과 동기화 시킵니다. 그리고 시리얼 버스에 함께 연결된 장치들이 이 클럭을 공유합니다. 이 방식은 직관적이고 종종 보다 빠르게 동작하지만 하나의 라인을 더 필요로 합니다. 대표적으로 SPI, I2C 프로토콜이 이런 방식을 사용합니다.

 

비동기식은 데이터가 외부 클럭 시그널(external clock signal)의 도움없이 동작하는 것을 의미합니다. 대신 데이터를 안정적으로 전송, 수신할 수 있도록 처리를 해줘야 합니다.  문서에서 다루는 시리얼(Serial, UART) 통신은 비동기식 시리얼 통신에 초점이 맞춰져 있습니다. 일반적으로 시리얼 통신이라 부르는 것들이 대부분이 비동기식 시리얼 통신을 말합니다. GPS, 블루투스, XBee, Serial LCD 등이 비동기식 시리얼 통신을 사용합니다.

아두이노에서 시리얼, UART 통신이라 부르는 것도 비동기식 시리얼 통신이라 생각하시면 됩니다.

 

 

 

 


시리얼 동작 방식

 

비동기식 시리얼 프로토콜은 몇 가지 규칙에 기반해서 동작합니다.

  • Data bits,
  • Synchronization bits,
  • Parity bits,
  • and Baud rate. (통신 속도)

 

cf)

 1. Bit Rate  Baud Rate 의 정의

 

1.1 Bit Rate 정의

비트 레이트 (Bit Rate) 는 초당 얼마나 많은 데이터 비트(1 또는 ‘0를 전송할 수 있는가를 나타내는 말이다또 우리가 자주 쓰는 BPS 라는 말이 있는데 이는 Bit Per Second 로서 초당 보낼 수 있는 비트의 수를 나타낸다이는 모뎀의 전송속도를 측정하는 단위로 사용되어 졌다일반적으로 28,800 모뎀이라면 28,800bps 의 전송속도를 나타내는 것이다.

예를 들어, 2400bit/second(bps) 라면 초당 2400개의 비트 정보를 전달할 수 있다는 뜻이다이는 반대로 이야기하면 1 비트 정보를 보내기 위해서 416.6us 의 시간(1s/2400bit)  필요하다는 이야기이다.

 

1.2 Baud Rate

 레이트 (Baud Rate) 는 초당 얼마나 많은 심볼(Symbol, 의미 있는 데이터 묶음을 전송할 수 있는가를 나타내는 말이다이는 이론적인 통신 단위로 초당 신호(Signal) 요소의 수를 나타낸다.

만약 하나의 신호요소가 2비트로 구성되어 있는 경우라면 보는 BPS 의 반이 된다, 1보 동안 2비트가 전송된다일반적으로 신호를 1비트로 여긴다면 BPS 와 같은 단위가 된다.

심볼이란 말은 의미 있는 데이터 비트의 묶음이다일반적으로 시리얼 통신에서는 데이터 비트가 8-bit 를 사용하므로 이를 하나의 심볼이라고 이야기 할 수 있다.

1개의 symbol (또는 character)  8개의 bit 정보와 같다.

예를 들어, 2400 baud rate 를 갖는다는 말은 1초에 2400개의 의미 있는 심볼 즉 캐릭터를 송신할 수 있다는 이야기이다. 1초에 2400개의 ASCII 코드를 전송할 수 있다는 말로 이해할 수 있다.

 

cf. CPS (Characters Per Second)

모뎀을 통해서 초당 몇 바이트(byte) 나 전송되고 있는가를 보여준다영문자를 기본으로 설정한 것이기 때문에 전송률을 바이트(byte : 8bit) 단위로 보면 된다따라서 28,800bps 모뎀의 경우는 3,600cps 의 평균 전송률을 가진다.

 

2. Bit Rate  Baud Rate 의 차이점

시리얼 통신 시, ASCII Code를 사용하여 통신을 할 때, 9600bps 의 통신 속도는 1200 Baud 로 표현할 수 있다이는 9600bit/8bit 로서 1200개의 character 로 표현된다.

그러나 Baud 는 상대적인 개념이다만일 Character 를 사용하지 않고 일반적인 bit 가 정보의 기본 단위라면 bit rate  baud rate 와 같아진다. ASCII Code 가 아니라 bit 를 정보로 받아들인다면 9600bps  9600 Baud 로 표현될 수 있다.

 

출처 : https://www.solvline.com/technical_info/tech_note_view.php?no=22&fno=

 

프로토콜의 세부 내용들은 유연하게 변경될 수 있도록 짜여져 있습니다. 따라서 두 기기가 시리얼 통신을 하기 위해서는 반드시 같은 설정을 사용해야 합니다.

 

Baud Rate (통신 속도)

Baud rate 는 시리얼 라인으로 전송되는 데이터 속도를 말합니다. Bits-per-second (bps) 단위로 표시하는데 이 값을 바탕으로 1 bit가 전송되는데 필요한 시간을 알 수 있습니다. 1bit 데이터를 전송할 때 시리얼 라인을 high/low 상태로 유지하는 시간이며, 데이터를 받기 위해 시리얼 라인을 체크하는 시간입니다.

Baud rates 값은 어떻게든 설정할 수 있지만 통신 속도에 크게 영향을 받지 않는 경우 일반적으로 9600 bps를 사용합니다. 다른 표준 baud rate 값으로 1200, 2400, 4800, 19200, 38400, 57600, 115200 bps (Baud) 을 사용할 수도 있습니다.

값이 높을수록 전송/수신 속도가 빠르지만 115200 를 초과할 수는 없습니다. 많은 마이크로 컨트롤러에서 이 값이 상한선으로 사용됩니다. Baud rate 값이 너무 높거나 양쪽의 설정 값이 틀릴 경우 데이터 수신에 문제가 발생합니다.

 

Framing the data (데이터 구조)

전송에 사용되는 데이터 패킷은 아래와 같이 구성됩니다. 각각의 구성요소는 Start bit를 제외하고 가변적인 크기를 가질 수 있습니다.

 

 

Data chunk (데이터 영역)

실제 전송할 데이터를 말합니다. 5~9 bit 를 사용할 수 있는데 8 bit가 기본이긴 하지만 다른 사이즈를 가질수도 있습니다. 예로 7 bit 크기인 경우는 7-bit ASCII 문자를 보내는데 적합니다.

데이터 크기가 설정되면 데이터의 엔디언 처리에 대해서도 송신, 수신측에서 합의가 되어야 합니다.

 

Cf) 엔디언

엔디언(Endianness) 컴퓨터 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다.

엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 한다. 

 

바이트 순서

바이트 순서는 크게 빅 엔디언과 리틀 엔디언으로 나눌 수 있다. 빅 엔디언은 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방법이고, 리틀 엔디언은 반대로 작은 단위의 바이트가 앞에 오는 방법이다PDP-11과 같은 몇몇 아키텍처는 2바이트 단위와 1바이트 단위로 서로 다른 순서를 사용하기도 하는데 이들을 미들 엔디언이라 부른다. 다음은 이런 방법들을 비교한 것이다.


 

Synchronization bits (동기화 비트)

Synchronization bits 2개 혹은 3개의 특수한 비트로 전송되는 데이터 패킷의 시작과 끝을 알립니다. 위 그림에서 start bit, stop bit가 해당됩니다. Start bit 1 bit, stop bit 1~2 bit 로 설정할 수 있습니다. (일반적으로 stop bit 1bit를 사용)

Start bit idle 상태(데이터 전송이 없는 상태)에서 active 상태로의 변화(1–>0)로 표시되며 stop 비트는 반대로 idle 상태로 변화함(1)을 의미합니다.

 

Parity bits (패리티 비트)

Parity(패리티) 비트는 매우 단순한 저 레벨 에러 보정 방법으로 홀수 또는 짝수(odd or even)로 체크합니다. 데이터 영역에 해당하는 5-9 bit 를 모두 더해서 홀수, 단수인지를 패리티 비트(0 또는 1)에 기록하고 전송합니다. 수신 측에서도 마찬가지의 작업으로 패리티 비트와 비교해서 수신 데이터에 문제가 있는지 체크합니다. 예로 0b01011101 데이터를 전송하면 5개의 1이 있으므로 홀수이고 패리티 비트는 1로 설정됩니다.

패리티 비트는 선택사항(optional)이며 잘 사용되지 않습니다. 노이즈에 취약한 환경에서 써 볼만 하지만 송신, 수신 측에서 추가적으로 연산에 대한 부담을 해야 합니다. 그리고 문제 발생시 데이터를 다시 받을 수 있도록 처리해줘야 합니다.

 

예제 : 9600 8N1

 

9600 8N1 – 보통 이런 방식으로 Serial 통신의 설정을 표시합니다.(본 예제가 가장 많이 사용되는 시리얼 설정) 이 설정의 의미는 9600 통신속도(baud rates), 8 data bits, no parity, and 1 stop bit 설정을 사용한다는 의미입니다. 이 설정으로 실제 데이터를 보내면 아래처럼 데이터가 전송됩니다.

 

ASCII 문자 ‘O’, ‘K’ 를 보낼 때 아래와 같이 2개의 패킷이 만들어집니다. 대문자 O에 해당하는 ASCII 값은 79 이므로 이진수로 01001111 입니다. K 01001011 입니다. 그리고 설정에 표시되진 않았지만 기본 least-significant bit (lsb) first 방식으로 보내집니다. 그래서 O K를 나타내는 비트가 역전되어(가장 우측의 비트부터 우선 전송) 전송됩니다.

 

9600 bps 속도로 보내므로 각 비트는 1/(9600 bps) = 104 µs 시간에 보내집니다. 1byte = 8bit 전송할 때 start bit, stop bit가 더해져서 10bit 패킷을 사용하므로 초당 960 byte 를 전송할 수 있습니다.

 


 

연결 방법과 하드웨어 (Wiring and Hardware)

 

시리얼 버스는 단 2개의 선으로만 구성됩니다. 하나는 전송용(TX)이며 다른 하나는 수신용(RX) 입니다. 시리얼 통신을 사용하는 모든 모듈은 이 두 핀을 기본으로 가지고 있습니다.

 

RX, TX 라는 이름은 각 장치 자신의 입장에서 바라봤을 때 라인이 담당하는 역할입니다. 따라서 두 장치를 연결할 때는 TX-RX, RX-TX로 엇갈리게 연결되어야 합니다.

시리얼 인터페이스는 full-duplex 또는 half-duplex로 동작할 수 있습니다. Full-duplex 는 전송과 수신을 동시에 처리함을 의미하고 Half-duplex 는 상황에 따라 하나씩 처리함을 의미합니다.

Serial Enabled LCDs 의 경우는 특이하게 데이터를 받기 만하고 보내주진 않습니다. 따라서 이 경우 하나의 시리얼 라인만 사용해서 단 방향 통신을 하게 됩니다.

 

Hardware Implementation(하드웨어 설계)

앞선 내용들은 시리얼의 개념에 대한 내용이었습니다. 여기서는 시리얼의 하드웨어 구현, signal level 에서 살펴봅니다. (RS-232, logic-level (TTL))

마이크로 컨트롤러나 low-level IC 의 경우 TTL (transistor-transistor logic) level 에서 시리얼 통신을 구현합니다TTL serial signal 은 마이크로 컨트롤러의 동작 전압에 의해 변화하는데 보통 0V ~ 3.3V 또는 5V 입니다. VCC level (3.3V, 5V, etc.) signal의 경우 idle 상태를 의미하며 bit 값으로는 1로 표현됩니다. 이 값은 stop bit 의 값(1)과 같습니다. 0V (GND) signal start bit 의 값이며 0으로 표현됩니다

 

 

 

오래된 컴퓨터나 주변장치에서 종종 사용되는 RS-232 TTL serial 과 유사합니다. RS-232 signal 의 경우 -13V ~ 13V 로 변화하며 +/- 3V to +/- 25V 까지 허용됩니다. 이 때는 low voltage (-5V, -13V, etc.) idle 상태를 나타내고(stop bit, value 1) high RS-232 signal 이 반대상태(start bit, 0 value)를 나타냅니다 TTL serial과 정반대입니다.

이 두 가지 serial signal 표준 중 TTL 이 임베디드 회로에서 구현하기 훨씬 더 간편합니다. 하지만 전압 레벨이 낮은 경우 원거리 전송에 취약하기 때문에 RS-232 또는 더 복잡한 표준인 RS-485 가 장거리 전송용으로 사용됩니다.

두 개의 시리얼 장치를 연결하는 경우 전압 레벨을 맞춰주는 것이 중요합니다. TTL serial 장치와 RS-232 bus를 연결한다면 시그널 변환을 위한 적절한 장치가 필요합니다.

 

 

 


UARTs

 

A universal asynchronous receiver/transmitter (이하 UART) 는 시리얼 통신을 담당하는 회로를 말합니다. 필수적으로 UART 는 패러럴과 시리얼 인터페이스를 상호 변환하는 역할을 맡게 됩니다. UART 의 한쪽은 8 혹은 그 이상의 라인 (여기에 컨트롤 라인까지 더해서) 에 물려있고 반대쪽은 시리얼 라인 RX, TX 에 물려있게 됩니다.

아래는 이걸 간단하게 표현한 UART 구조도입니다

 

 

UART 는 독립적인 회로로 존재하기도 하지만 일반적으로는 마이크로 컨트롤러에 탑재되어 있습니다. 마이크로 컨트롤러의 데이터시트를 보면 UART를 찾을 수 있습니다. 예로 아두이노 UNO의 경우 ATmega328 칩에 하나의 UART가 탑재되어 있습니다. 그리고 아두이노 Mega 의 경우에는 ATmega2560 칩에 4개의 UART를 탑재하고 있습니다.

UART는 전송을 할 때 동기화 비트와 패리티 비트를 더해 데이터 패킷을 생성하는 작업을 합니다. 그리고 TX 라인을 통해 정확한 타이밍으로 신호를 생성합니다.(baud rate에 따라)  반대로 수신할 때는 RX 라인에서 baud rate에 따라 신호를 읽고 데이터를 분리해 냅니다.

발전된 형태의 UART 에서는 수신된 데이터를 버퍼에 저장해서 마이크로 컨트롤러가 필요할 때 수신한 순서대로 가져다 쓸 수 있도록 해줍니다.

 


Software UARTs

마이크로 컨트롤러가 UART 를 가지고 있지 않거나 이미 사용중인 경우 마이크로 컨트롤러가 직접 제어해서(Bit-banging) 시리얼 통신을 구현할 수 있습니다. 아두이노에서 SoftwareSerial 라이브러리가 하는 역할이 바로 이것입니다. 하지만 이 방식은 프로세서의 자원을 많이 소모하고 UART 만큼 정확하지는 않습니다. 비 동기식 시리얼 통신은 1:1 통신 방식이기 때문에 시리얼 라인이 이미 사용 중일 때 SoftwareSerial 을 사용하게 됩니다.

 

 

주의사항

 

RX-TX, TX-RX

반드시!! 시리얼 통신 연결은 TX-RX 를 엇갈리게 해주어야 합니다. 다른 모듈의 일반적인 라인 연결 방법과 반대이기 때문에 실수하기 쉽습니다.

 

Baud Rate Mismatch

가끔 데이터가 들어오긴 하는데 데이터가 깨지거나 수신 타이밍이 들쑥날쑥 한 경우가 있습니다. 많은 경우 이건 시리얼 통신 장치 양쪽의 Baud rate 가 맞지 않아서입니다.

 

Bus Contention

시리얼 통신은 1:1 통신을 위해 디자인 되었습니다. 하지만 임의로 1:N 통신처럼 연결할 수도 있습니다.

예로 GPS 모듈을 아두이노에 아래와 같이 연결할 수도 있습니다. 아래 그림에서 Transmitter 1 PC가 되고 Transmitter 2 GPS, Receiver는 아두이노가 됩니다. 이렇게 해도 동작이 되긴 합니다.(적절한 보호 회로가 있는 경우..) 다만 동시에 Transmitter 1, Transmitter 2 에서 데이터를 전송하는 경우 문제가 발생합니다. 두 개의 Transmitter TX 라인을 적절히 조절해서 사용할 수 있다면 한번 해보시길일부 아두이노의 경우 PC 에서 업로드 할 때 TX, RX 에 연결된 다른 장치와 충돌하지 않도록 보호 회로가 있다고 합니다.

 

 

아래 방법은 앞서 와는 반대로 Transmitter(아두이노) 하나에 두 개 이상의 Receiver(주변장치)를 연결한 경우입니다. Clock 라인만 추가된다면 I2C의 동작 방법과 유사합니다. 여러 개의 장치가 데이터를 수신만 하는 경우라면 이 방법으로 문제없이 연결할 수 있습니다. 예를 들어 Serial LCD 모듈처럼 RX 라인에 아두이노의 TX 라인이 연결되기만 하면 동작하는 경우가 해당합니다.

 

Serial, I2C, SPI 의 상세 원리를 다루는 문서에서는 우리가 흔히 얘기하는 Serial 통신(비동기식 시리얼 통신)UART 통신이라 표기합니다. 패러럴/시리얼 통신과 같이 넓은 의미에서의 시리얼 통신과 구분하기 위해서입니다.

 

 


블루투스(blue tooth) 통신 이란,,

 

블루투스

블루투스는 2.4GHz 무선 링크를 통해 데이터를 주고받기위한 표준입니다. 블루투스는 보안 프로토콜이며 단거리, 저전력, 저비용으로 장치들을 무선 연결할 수 있도록 해줍니다.

근래에는 많은 장치들이 무선으로 연결되고 있으며 블루투스가 이 중 큰 부분을 차지하고 있습니다headsetsvideo gamecontrollerslivestock trackersDIY HID Computer Keyboard, right module, homebrew, wireless MP3-playing speaker 등 많은 분야에 활용예가 있습니다.

특히 단거리에서(<100m) 상대적으로 작은 데이터를 주고 받는데 최고의 프로토콜입니다. 그리고 블루투스는 유선 통신인 시리얼 통신 인터페이스를(serial communication interfaces) 무선으로 대체할 수 있습니다.

 

블루투스 동작 원리

블루투스는 unlicensed ISM frequency band – 2.4GHz 주파수 대역에서 동작합니다. 이 주파수 대역은 ZigBee, WiFi 등도 사용하는 RF(Radio Frequancy) 대역입니다따라서 블루투스는 다른 프로토콜과 분리되어 동작할 수 있도록 표준이 만들어져 있습니다. 표준에 대한 상세 내용이 필요한 경우 published specifications 링크에서 확인할 수 있습니다.

 

Cf) 1. ISM (Industrial Scientic and Medical)

 

  전기통신 이외에 산업, 과학용, 의료용, 가정용, 기타 이들과 유사한 용도에

     전파 에너지를 발생시켜 한정된 장소에서 사용하는 설비 또는 장치의 운용을 총칭

 

 

2. ISM 대역

 

  ㅇ 이 주파수 대역에서는 상호 간섭을 용인하는 공동사용을 전제로 함

     - 따라서, 간섭의 최소화를 위해 소출력을 기본으로 함

 

  ISM 전파응용설비 법규상의 정의

     - 전파법 58 1 (산업·과학·의료용 전파응용설비 등)

        . 전파에너지를 발생시켜 한정된 장소에서 산업·과학·의료·가사 기타 이와

          유사한 목적에 사용하도록 설계된 설비로서 대톨령이 정하는 기준에 해당하는 설비

        . 전선로에 주파수 9 킬로헤르츠 이상인 전류가 흐르는 통신설비 중 전계강도

          등이 대통령령이 정하는 기준에 해당하는 설비

 

  ISM 주파수 대역 통신분야에서 주로 많이 사용되는 주파수영역

     -  900 MHz, 2.4 GHz, 5 GHz 등으로 소출력 무선기기가 이용

 

 

3. ISM 주파수대역 통신용으로 많이 사용되는 주파수 현황

 

  900 MHz 대역   :  902 ~ 928 MHz (26MHz)

     - 한국 : 917~923.5 MHz (RFID/USN 이용대역)

 

  2.4 GHz 대역   :  2.4 ~ 2.4835 GHz (83.5MHz) 

     - 한국,북미,유럽 :  2.4 ~ 2.4835 GHz

     - 일본            :  2.471~2.497 GHz 

     * 이 대역을 사용하는 무선 LAN 표준 : IEEE 802.11, 802.11b, 802.11g

 

  5 GHz 대역     :  5.725 ~ 5.875 GHz (125MHz) 

     * 이 대역을 사용하는 무선 LAN 표준 : IEEE 802.11a

 

 

피코넷(Piconets)

 

블루투스 네트워크는(보통 piconets으로 불리는) 마스터/슬레이브(master/slave) 모델을 사용합니다. 이 모델은 하나의 마스터 장치가 다수의(7개 까지) 슬레이브 장치와 연결될 수 있습니다. 피코넷에 연결되는 슬레이브 장치는 오직 하나의 마스터 장치에만 연결이 가능합니다.

 

마스터 장치는 피코넷을 통해 통신을 조율합니다. 마스터 장치는 연결된 어떤 슬레이브 장치에든 데이터를 전송할 수 있고, 요청을 보낼 수도 있습니다. 슬레이브 장치는 마스터와 데이터를 교환할 수 있지만 슬레이브 간 통신은 할 수 없습니다.

 

블루투스 주소와 이름 (Bluetooth Addresses and Names)

모든 블루투스 장치는 약어로 BD_ADDR 라 불리는 고유한 48-bit(6 bytes) 주소를 가집니다. 이 주소는 항상 12자리 16진수로 값으로 표시됩니다. 이 주소의 상위 절반(24 bits) organization unique identifier (OUI)라 불리며 제작사를 나타냅니다. 하위 절반(24-bits)은 장치의 고유한 주소입니다.

블루투스 장치를 검색하면 항상 이 주소가 보여지게 됩니다. 예를 들어 아래와 같은 RN-42 Bluetooth Module 의 경우, “MAC NO.” 항목이 000666422152 로 표시되어 있습니다.

 

“000666” 부분이 모듈을 생산한 OUI of Roving Networks 입니다. 모든 RN module 은 상위 24-bits에 같은 값을 공유합니다. 그리고 하위 절반 “422152” 는 모듈의 고유한 ID 입니다.

블루투스 장치들은 사용자가 이해하기 쉽도록 이름을 제공할 수 있습니다. 이 이름은 블루투스 장치를 구분하기 쉽도록 고유 주소 대신 보여집니다. 휴대폰에서 블루투스 장치를 검색하면 아래와 같이 이름이 보여짐을 알 수 있습니다.

장치의 이름은 248 byte 까지 가능하며 두 장치가 같은 이름을 사용할 수 있습니다. 그래서 이름에는 종종 블루투스 모듈의 고유 ID가 포함되기도 합니다.

 

연결 과정 (Connection Process)

블루투스 연결 과정은 아래 세 단계를 통해 이루어집니다.

  1. Inquiry – 두 개의 블루투스 장치가 서로를 완전히 모르는 상태라면 서로를 찾기 위한 과정을 거쳐야 합니다. 하나의 장치(, PC) inquiry request를 보내면 다른 하나의 장치는 이 request에 대해 주소, 이름 및 기타 정보와 함께 응답해줘야 합니다.
  2. Paging (Connecting) – Paging 은 두 장치가 연결되기 위한 과정입니다. 연결이 완성되기 전에 각각의 장치는 서로의 주소를 알고 있어야만 합니다.
  3. Connection – Paging 과정이 끝나면 connection 상태가 됩니다. 연결이 된 동안 장치들은 자신의 상태(모드)를 바꿀수 있습니다.

1.              Active Mode – 일반적인 연결 상태. 장치는 데이터를 전송, 수신하는데 참여합니다.

2.              Sniff Mode – 절전 모드. Sleep(비활동) 상태를 유지하다 정해진 간격(. every 100ms)마다 송수신 내용이 있는지 확인합니다.

3.              Hold Mode – 일시적인 절전 모드. 장치는 정해시 시간동안 Sleep 상태에 들어갔다 다시 Activie 모드로 돌아옵니다. 마스터 장치가 슬레이브 장치에게 이 모드로 들어가도록 지시할 수 있습니다.

4.              Park Mode – 정지 모드. 더 깊은 절전 모드로 마스터 장치에서 신호가 있을까지 정지모드로 들어가도록 알려줍니다.

 


Bonding and Pairing

두 장치기 연결된 후 특별한 데이터를 교환하면 Bonding 상태를 만들 수 있습니다. Bonding 된 장치들은 서로 가까운 거리를 유지할 때 자동으로 연결됩니다. 예를 들어 휴대폰이 차량의 블루투스 장치와 Bonding 되면 이후부터 차 안에서 자동으로 연결되도록 할 수 있습니다. 이 과정이 이루어지는데 UI 조작이 전혀 필요치 않습니다.

Bonding 은 페어링(pairing)이라 불리는 과정으로 만들어집니다. 두 장치는 페어링 될 때 서로 주소, 이름, 프로파일(profiles)을 교환하고 저장해둡니다. 또한 common secret key 를 교환해서 향후 Bonding 될 때 사용합니다.

페어링은 사용자가 원하는 장치만 연결이 될 수 있도록 인증 과정을 요구합니다. 인증 과정을 위해서는 별도의 UI 조작이 필요하지만 이 과정을 생략하고 인증없이 연결되도록 할 수도 있습니다.(헤드셋 처럼 UI 조작이 어려운 경우)  인증 과정은 6자리 숫자를 입력받아 수행하는데 예전 기기의 경우(v2.0 또는 이전) PIN 코드를 사용합니다. PIN 코드는 4자리 숫자부터 16자 알파벳 문자까지 다양한 방법이 사용될 수 있습니다.

 


Power Classes

블루투스 모듈의 신호 전송 강도, 신호 도달 범위는 다음과 같이 3단계 파워 클래스(power class)로 구분됩니다.

Class Number

Max Output Power (dBm)

Max Output Power (mW)

Max Range

Class 1

20 dBm

100 mW

100 m

Class 2

4 dBm

2.5 mW

10 m

Class 3

0 dBm

1 mW

10 cm

모듈은 하나 혹은 복수의 파워 클래스를 지원할 수 있습니다.

 

 

블루투스 프로파일 (Bluetooth Profiles)

블루투스 프로파일은 블루투스 장치가 어떤 종류의 데이터를 보내는지 명확하게 정의하기 위한, 블루투스의 기본 표준위에 더해진 프로토콜입니다. 블루투스 specifications 는 블루투스가 어떻게 동작하는지를 설명하고 프로파일은 어떻게 사용되는지를 정의합니다.

블루투스 프로파일은 연결되었을 때 장치가 어떻게 동작해야 하는지를 결정합니다. 예를들어 핸즈프리 헤드셋의 경우 headset profile (HSP)을 사용하고, Nintendo Wii Controller 의 경우는 human interface device (HID) 프로파일을 사용합니다. 이 장치들과 연결되는 장치의 경우, 호환성을 갖기 위해서는 두 프로파일을 모두 지원해야 합니다.

아래는 자주 접하게 되는 블루투스 프로파일 입니다.

 


Serial Port Profile (SPP)

블루투스를 이용해 serial communication interface (like RS-232 or a UART) 를 무선으로 대체하고 싶은 경우SPP 프로파일을 사용하면 됩니다. SPP 프로파일은 두 장치가 많은 양의 데이터를 교환하는데 초점이 맞춰져 있습니다. 이 프로파일은 블루투스의 가장 기본적인 프로파일 중 하나이기도 합니다. (블루투스의 원래 목적이 RS-232 케이블 통신을 대체하는 것이기 때문)

SPP 프로파일을 사용하면 두 장치는 RX, TX 라인이 마치 유선으로 연결된 것 처럼 데이터를 주고 받을 수 있습니다. 두 개의 아두이노 컨트롤러를 예로들며, 블루투스가 유선으로 연결된 통신 라인을 대체하는 효과를 냅니다. (아두이노 입장에서는 유선이든 무선이든 코드의 변화를 최소화 해서 거의 유사하게 사용할 수 있습니다.)

 


Human Interface Device (HID)

HID 프로파일은 블루투스를 이용한 사용자 입력장치에 사용됩니다. 키보드, 마우스, 조이스틱, 비디오 게임 컨트롤러 등에 주로 사용됩니다.

HID 프로파일은 실제로는 USB 사용자 입력장치를 지원하기 위한 것입니다. SPP 프로파일이 RS-232 케이블의 대체재인 것처럼 HID 프로파일도 USB 케이블을 대체하는 것을 목표로 합니다. (그만큼 더 복잡함)

 


Hands-Free Profile (HFP) and Headset Profile (HSP)

블루투스 이어폰 등에 사용되는 프로파일로 HFP 의 경우는 차량의 hands-free 오디오 시스템에 사용됩니다. HFP HSP 를 기반으로 일반적인 폰 인터랙션 (전화 수신/거절, 종료 등)을 추가로 지원하기 위한 내용들이 포함되었습니다.

 

Advanced Audio Distribution Profile (A2DP)

블루투스 장치간 오디오를 전송하기 위한 프로파일입니다. HFP, HSP 는 오디오를 양방향으로 전송하지만 A2DP 는 단방향으로만 전송합니다. 대신 오디오의 음질은 훨씬 높습니다. 상세한 내용은 링크(A2DP specification)를 참고하세요.

대부분의 A2DP 블루투스 모듈은 제한된 오디오 코덱만을 지원합니다. 최소한 SBC (subband codec), MPEG-1, MPEG-2, AAC, ATRAC 정도는 지원할 것입니다.


A/V Remote Control Profile (AVRCP)

Audio/video remote control profile (AVRCP) 는 블루투스 장치를 무선으로 제어하기 위한 프로파일입니다. 오디오 플레이어를 무선으로 제어가 가능하도록 하기위해 A2DP 프로파일과 함께 지원되곤 합니다.  AVRCP specification

블루투스 버전 (Common Versions)

블루투스는 1994년 부터 꾸준히 진화되어 왔습니다. 가장 최근의 블루투스 버전은 Bluetooth v4.0 이며 현재 광범위하게 사용되고 있습니다. 아래는 블루투스 버전의 변천 과정과 특징을 나열한 것입니다.

 

Bluetooth v1.2

v1.x 은 프로토콜, 스펙 표준화를 위한 준비 과정으로, v1.x의 최신 안정화 버전이 Bluetooth v1.2 입니다. 현재의 버전보다 무척 제한된 기능만을 포함하고 있으며 1 Mbps (실제 사용시 0.7 Mbps 정도) 속도, 전송거리 10 m 정도입니다.

 

Bluetooth v2.1 + EDR

2.x 버전이 소개되고 추후 enhanced data rate (EDR)버전이 다시 소개되게 됩니다. EDR 버전은 전송 속도를 3 Mbps (실 사용시 2.1 Mbps)로 끌어올렸습니다. Bluetooth v2.1 버전은 secure simple pairing (SSP) 프로파일과 함께 2007년 발표되었습니다.

 

Bluetooth v2.1 모듈은 현재도 흔하게 사용되는 모듈입니다. 2 Mbps 의 전송 성능으로 충분한 저성능의 마이크로 컨트롤러에 유용하게 사용됩니다.

 

Bluetooth v3.0 + HS

Bluetooth v3.0 버전은 v2.0 버전의 3 Mbps 속도보다 무려 8배 빠른 속도 – 24 Mbps를 냅니다. 하지만 이 데이터 속도는 실제로는 WiFi (802.11) 연결을 통해 가능합니다. 블루투스는 단지 모듈간 연결과 연결 관리를 위해서만 사용됩니다.

(이 버전은 사용 사례가 적어서 이하 원문을 그대로 인용) It can be tricky to nail down the maximum data rate of a v3.0 device. Some devices can be “Bluetooth v3.0+HS”, and others might be labeled “Bluetooth v3.0”. Only those devices with the “+HS” suffix are capable of routing data through WiFi and achieving that 24 Mbps speed. “Bluetooth v3.0” devices are still limited to a maximum of 3 Mbps, but they do support other features introduced by the 3.0 standard like better power control and a streaming mode.

 

Bluetooth v4.0 and Bluetooth Low Energy

Bluetooth 4.0 버전은 세 개의 카테고리로 나눠집니다. : classic, high-speed, and low-energy. Classic 블루투스와 high speed 블루투스는 각각 Bluetooth v2.1+EDR v3.0+HS 에 대응됩니다. 따라서 실제 Bluetooth v4.0 표준은 Bluetooth low energy (BLE) 입니다.

BLE 는 저전력으로 동작할 수 있도록 기존 블루투스 표준을 완전히 뜯어고친겁니다. BLE는 신호 도달 거리를 희생하고 (100m –> 50m) 데이터 전송 속도를 희생해서 (0.7-2.1 Mbps –> 0.27 Mbps) 전력 소모를 줄였습니다. BLE 는 배터리에 의존하면서 빠른 전송 속도와 연결의 지속성을 요하지 않는 주변 장치(센서 장치)에 적합하도록 설계되었습니다. 덕분에 스마트 워치, 스마트 밴드 및 각종 휴대용 장치에 광범위하게 사용됩니다.

 

Wireless Comparison

블루투스는 단순한 무선 프로토콜이 아닙니다. 이 문서를 읽게 해주는 WiFi 도 있고, ZigBees or XBees 같은 모듈도 듣거나 사용해 본 적이 있을겁니다. 그럼 블루투스가 이런 무선 데이터 전송 프로토콜과 다른점은 무엇일까요? 아래 표를 통해 비교해보세요.

Name

Bluetooth Classic

Bluetooth 4.0 Low Energy (BLE)

ZigBee

WiFi

IEEE Standard

802.15.1

802.15.1

802.15.4

802.11 (a, b, g, n)

Frequency (GHz)

2.4

2.4

0.868, 0.915, 2.4

2.4 and 5

Maximum raw bit rate (Mbps)

1-3

1

0.250

11 (b), 54 (g), 600 (n)

Typical data throughput (Mbps)

0.7-2.1

0.27

0.2

7 (b), 25 (g), 150 (n)

Maximum (Outdoor) Range (Meters)

10 (class 2), 100 (class 1)

50

10-100

100-250

Relative Power Consumption

Medium

Very low

Very low

High

Example Battery Life

Days

Months to years

Months to years

Hours

Network Size

7

Undefined

64,000+

255

 

블루투스는 무선 네트워크가 요구되는 모든 상황에 적합한 프로토콜은 아닙니다. 대신 근거리, 무선 피코넷 통신망을 만드는데 유용한 프로토콜입니다. 그리고 다른 프로토콜에 비해 편리한 연결 과정을 제공합니다. (특히 ZigBee 에 비해)

 

ZigBee 는 홈 오토메이션처럼 네트워크를 모니터링 해야 하는 상황에 좋은 답안입니다. 이런 네트워크에는 수십 개의 무선 노드가 존재하며 대용량의 데이터를 사용하지 않고 일시적으로 동작합니다.

 

BLE classic Bluetooth 의 편리함과 저전력의 장점을 결합했습니다. 이런 특징으로 배터리 소모량이 훨씬 적은 것이 Zigbee 에 비교시 최고의 장점입니다. BLE 는 네트워크 사이즈 측면에서 ZigBee 와 경쟁할 순 없지만 1:1 연결에는 최적화되어 있습니다.

 

WiFi 는 가장 익숙한 프로토콜일 것입니다. WiFi는 인터넷(!)을 위한 최적의 솔루션입니다. 빠르고 유연한 대신 많은 전력을 소모합니다. 광 대역 인터넷에 접속할 수 있다는 장점 자체는 다른 프로토콜이 무색케 만듭니다.

 

 

 

 


4. 회로

 

 

Arduino Uno는 시리얼 포트가 1개 밖에 없기 때문에 개발 PC USB로 연결이 되면서

Rx(D0), Tx(D1) 핀이 사용되었다.  그래서 HC-06 블루투스 통신 모듈은 일반 디지털 핀

에 연결해서 소프트웨어 적으로 Serial통신이 가능하도록 할 것이다.

 


5. program

Serial 함수의 명령어

1.Serial.begin(통신속도): 시리얼 통신의 데이터 전송 속도 설정, 통신 시작

2.Serial.end(): 시리얼 통신 종료, Rx/Tx 핀은 digital 핀으로 사용 가능

3.Serial.available(): 수신 버퍼에 저장된 데이터의 개수를 바이트 단위로 변환

4.Serial.read() : 수신된 데이터 중 첫 번째 바이트의 데이터를 읽어옴. 읽혀진 데이터 버퍼에서 삭제

5.Serial.peek(): 수신된 데이터 중 첫 번째 바이트의 데이터를 읽어옴. 읽혀진 데이터 버퍼에서 삭제하지 않음.

6.Serial.flush(): 수신 버퍼의 데이터를 비워줌

7.Serial.print(string or value,format) : 문자열 또는 데이터를 ASCII 형태로 전송

           String or value : 전송 할 문자열 또는 데이터 값 / 문자열의 경우 문자열 형태

           Format : 전송 할 값이 문자열이 아닌 경우 출력 형식 지정

                      -2진수 :BIN   -8진수 : OCT  -10진수: DEX   -16진수 : HEX

                      생략 시 기본으로 10진수 형태

                      실수 : 소수점 아래 자릿수(기본 2자리)

8.Serial.println(string or value,format) : 문자열 또는 데이터를 ASCII 형태로 전송. 데이터 마지막에 carriage return을 의미하는 ‘\r' new line을 의미하는 ‘\n'이 붙어서 출력. 출력 후 자동으로 다음 줄 맨 앞으로 이동

9.Serial.write(string or value or array, length): 바이너리 형태의 데이터로 전송

           string or value or array: 전송 할 문자열, 데이터 값, 배열 버퍼

           length :배열 데이터 전송 시 배열 길이

10. void serialEvent() : 시리얼 통신으로 데이터가 수신될 경우에 시스템에 의해 자동으로

호출되는 Callback 함수.수신된 데이터 체크 및 데이터 처리 기능 구현

11. SoftwareSerial ( receivePin(수신 핀),  transmitPin(송신 핀) ) : 시리얼 통신 객체 생성

 

 

 

Hc-06 블루투스 통신 모듈 AT command mode

(시리얼 통신으로 모듈의 이름,통신속도, 핀 값 설정 등 다양한 설정을 할 수 있는 모드)

 (AT 명령어는 헤이즈 사의 모뎀을 제어하는 언어였는데 사실상 통신의 표준이 되어 모든 모뎀을 제어하는데 쓰이고 있다.)

아두이노에서 최대 115200 보드레이트 까지 지원되기 때문에 AT 명령어 사용시 통신속도를 잘 보고 사용하여야 한다.

그리고 보드레이트 변경 시 AT 명령어를 입력하고 싶다면 소스에서 지정한 softwareSerial 보드레이트를 수정하여야한다.

 

통신 모듈 AT command mode test  program

(HC-06은 기본 통신 속도가 9600으로 맞춰져 있기 때문에  9600 boad rate 로 맞춰준다)

 

 

 

-시리얼 모니터-

-사진-

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

9.1 4-digit 7segment  (0) 2019.12.18
8. 스마트 카 원격제어  (0) 2019.12.18
6 인터럽트& 타이머  (0) 2019.12.18
5.2 서보모터 제어하기  (0) 2019.12.18
5.1 DC모터 제어하기  (0) 2019.12.18

댓글