1. MSP((Multiwii Serial Protocol)) 설명
시작 문자 $를 시작하여 멀티위를 나타내는 M을 보내고 송수신을 나타내는(<,>) 보낸다음 전송되는 Byte 수를 전송하고 타입을 보내고 데이터(Roll,Pitch,Yaw,Throttole,Aux)를 보내고 CRC(사이즈부터 시작하여 데이터까지를 XOR)를 보냅니다. |
2. 전송확인
void setup() { Serial1.begin(115200); Serial.begin(115200); } void loop() { if(Serial1.available()){ Serial.write(Serial1.read()); } } |
3. 분석하기
void setup() { Serial.begin(115200); //드론 -> 어플 Serial1.begin(115200); //어플 -> 드론
} uint8_t msp_packet[11]; void loop() { int cnt=0; char msp_data=0; while(1){ if(Serial1.available()){ msp_data=Serial1.read(); if(msp_data=='$') cnt=0; else cnt++; msp_packet[cnt]=msp_data; if(cnt==10){ msp_print(); } } } } void msp_print(){ for(int i=0;i<=4;i++){ Serial.print((char)msp_packet[i]); Serial.print(msp_packet[i]); } Serial.print('\t'); Serial.print(" Roll:"); Serial.print((char)msp_packet[5]); Serial.print(msp_packet[5]); Serial.print(" Pitch:"); Serial.print((char)msp_packet[6]); Serial.print(msp_packet[6]); Serial.print(" Yaw:"); Serial.print((char)msp_packet[7]); Serial.print(msp_packet[7]); Serial.print(" Throttole:"); Serial.print((char)msp_packet[8]); Serial.print(msp_packet[8]); Serial.print(" Aux:"); Serial.print((char)msp_packet[9]); Serial.print(msp_packet[9]); Serial.print(" 10:"); Serial.print((char)msp_packet[10]); Serial.println(msp_packet[10]);
} |
시작 |
Head1 |
방향 |
데이터수 |
타입 |
Roll |
Pitch |
Yaw |
Throttole |
Aux |
CRC |
$ |
M |
< |
l |
ㅁ |
} |
} |
} |
공백 |
U |
ㅁ |
36 |
77 |
60 |
5 |
150 |
125 |
125 |
125 |
0 |
85 |
187 |
설명 위에 표처럼 $M<lㅁ}}} Uㅁ 순서로 어플에서 드론으로 전송되는 것을 볼 수 있습니다. 이런 형식을 아스키코드라고 하는데...아스키표를 보면서 일일이 대조하면서 분석하기는 시간이 많이 들어서 바로 아스키코드를 10진수로 표현하는 코드를 만들어 분석해보았습니다. Header 코드는 $M< 이고 < 것은 데이터의 방향을 나타냅니다. Size는 5 바이트를 데이터를 보낸다는 의미 로 Roll Pitch Yaw Throttole Aux 이렇게 보낸다는 의미 그리고 마지막 CRC 부분은 계산기로 5 150 125 125 125 0 85 XOR 하시면 187 나옵니다~ |
'프로젝트 > 하드웨어' 카테고리의 다른 글
5.MPU6050 연결 및 테스트 (0) | 2017.05.24 |
---|---|
3. HM-10 블루투스 테스트(2) (0) | 2017.04.20 |
2. HM-10 블루투스 테스트(1) (0) | 2017.04.19 |
1. 시작~ (0) | 2017.04.06 |