CODING CAR / Protocol / Intro
Modified : 2021.6.29
1. CODING CAR 소개
CODING CAR은 코딩 교육용 자동차 로봇입니다.
2. 시리얼 통신
2.1. 전송 데이터 구조
CODING CAR를 USB와 연결해서 통신하는 경우 송수신 데이터의 구조는 아래와 같습니다.
0 |
1 |
2 |
3 |
4 |
5 |
... |
N-1 |
N |
Start code |
Header |
Data |
CRC16 |
|||||
DataType |
Length |
From |
To |
|||||
0x0A |
0x55 |
- |
- |
- |
- |
- |
- |
- |
각 항목에 대한 설명은 다음과 같습니다.
영역 |
설명 |
|
Start code |
데이터 전송 시작을 알림 |
|
Header |
DataType |
데이터의 형식 |
Length |
데이터의 길이 |
|
From |
데이터를 전송하는 장치의 DeviceType |
|
To |
데이터를 수신 받는 장치의 DeviceType |
|
Data |
전송할 데이터 |
|
CRC16 |
Header와 Data가 정상적으로 전달되었는지 판별 http://www.menie.org/georges/embedded/crc16.html |
Data 영역과 CRC16 영역 모두 Little Endian을 사용하고 있습니다. Little Endian일 때 2바이트 이상의 변수는 하위 바이트가 배열의 앞 부분에 위치합니다. C#에서는 Bitconverter를 사용하시면 편리하게 변경할 수 있습니다.
16진수 값 |
0x1234 |
|
배열의 인덱스 |
0 |
1 |
Big Endian |
12 |
34 |
Little Endian |
34 |
12 |
16진수 값 |
0x12345678 |
|||
배열의 인덱스 |
0 |
1 |
2 |
3 |
Big Endian |
12 |
34 |
56 |
78 |
Little Endian |
78 |
56 |
34 |
12 |
2.2. 사용 시 주의사항
-
모든 장치는 데이터를 요청했을 경우에만 관련된 데이터를 응답으로 전송합니다.
-
데이터를 수신받는 장치를 지정한 경우, 해당 장치는 데이터를 요청받은 경우가 아니라면 Ack를 응답으로 보냅니다.
-
Broadcasting으로 데이터를 전송한 경우, 데이터 요청이 아닌 일반적인 명령이었다면 해당 명령을 처리할 수 있는 장치는 받은 명령을 실행합니다.
-
Broadcasting으로 데이터를 전송한 경우, 데이터 요청을 전달하였다면 해당 데이터에 대해 응답을 할 수 있는 장치가 응답을 합니다. 이 과정에서 두 개 이상의 장치가 같은 데이터에 대해 응답이 가능하다면 데이터 송수신 간에 충돌이 발생할 수 있습니다. 사용 시 주의하셔야 합니다.
-
Broadcasting에 대해서는 Ack를 응답으로 보내지 않습니다.
2.3. 시리얼 통신 설정
영역 | 설정값 |
---|---|
Baud Rate | 57600 |
Parity | None |
Data Bits | 8 |
Stop Bits | 1 |
2.4. 드라이버 설치
CODING CAR는 USB로 PC와 연결할 때 윈도우10인 경우 자동으로 인식합니다. 그 외에 장치를 인식하지 못하는 경우 별도의 드라이버를 설치하셔야 합니다.
3. Bluetooth Low Energy(Bluetooth SMART)
CODING CAR는 무선 연결에 Bluetooth Low Energy(이하 BLE)를 사용합니다.
CODING CAR에서 사용하는 Service와 Characteristic은 다음과 같습니다.
Service | Characteristic | UUID | 데이터 이동 방향 |
---|---|---|---|
DRONE_SERVICE | C320DF00-7891-11E5-8BCF-FEFF819CDC9F | ||
├ | DRONE_DATA | C320DF01-7891-11E5-8BCF-FEFF819CDC9F | 자동차 → 앱 (Notify) |
└ | DRONE_CONF | C320DF02-7891-11E5-8BCF-FEFF819CDC9F | 앱 → 자동차 (Write) |
3.1. 전송 데이터 구조
0 |
1 |
2 |
3 |
... |
N-1 |
N |
Header |
Data |
|||||
DataType |
Length |
From |
To |
|||
- |
- |
- |
- |
- |
- |
- |
각 항목에 대한 설명은 다음과 같습니다.
영역 |
설명 |
|
Header |
DataType |
데이터의 형식 |
Length |
데이터의 길이 |
|
From |
데이터를 전송하는 장치의 DeviceType |
|
To |
데이터를 수신 받는 장치의 DeviceType |
|
Data |
전송할 데이터 |
전체 길이는 최대 20byte 이하로만 사용 가능합니다.
3.2. 데이터 송수신 규칙
- 데이터를 전송하는 주기는 Android인 경우 50ms, iOS인 경우 100ms를 권장
- CODING CAR에 데이터를 요청한 경우엔 요청한 데이터를 응답으로 보냄. 이외의 경우에는 Ack를 응답. Control 명령은 Ack 및 어떤 응답도 보내지 않음
- 앱에서 CODING CAR에 명령 시에는 DRONE_CONF에 전달할 데이터를 Write
- CODING CAR이 앱으로 데이터를 보내는 경우엔 DRONE_DATA로 Notify를 전송