본문 바로가기

Embedded System/Arduino Board

[Arduino] Packet 통신: Comportmaster를 활용한 Packet 송신(18)

반응형

 


 

안녕하세요.

지난 포스팅에서는 아두이노와 Comport Master를 활용해서 패킷을 수신하는 작업을 진행하여 보았습니다.
이번 포스팅에선 아두이노에서 Header와 Tailer를 갖춘 6바이트 패킷을 송신하는 작업을 진행하여 보겠습니다.


0. ComportMaster 설치 및 다운 & ComportMaster란?

https://semicircuit.tistory.com/entry/%EC%8B%9C%EB%A6%AC%EC%96%BC-%ED%86%B5%EC%8B%A0-Comport-Master%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EB%8B%A4

 

 

1. 패킷에 대한 이론적인 내용은 아래 참조해주세요
https://semicircuit.tistory.com/entry/%ED%8C%A8%ED%82%B7-%ED%86%B5%EC%8B%A0-%ED%8C%A8%ED%82%B7%ED%86%B5%EC%8B%A0-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%86%A1

 

2. 아두이노에서 패킷 수하는 내용은 아래 참조해주세요

https://semicircuit.tistory.com/entry/Arduino-Packet-%ED%86%B5%EC%8B%A0-Comportmaster%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-Packet-%EC%88%98%EC%8B%A017


※1.  패킷 구조 설명 

우리가 사용할 패킷은 가장 단순한 구조의 총 6바이트로 구성되어 있습니다. 각 바이트의 역할은 다음과 같습니다.

(이전 포스팅의 수신 패킷 구조와 동일합니다.)

  • 헤더 (Header, 1바이트): 패킷의 시작을 나타내는 값입니다. 여기서는 0xF2로 정의되었습니다.
  • 데이터 (Data, 4바이트): 실제 전송할 데이터입니다.
  • 체크섬 (Checksum, 1바이트): 패킷의 끝을 나타내며, 수신된 데이터가 올바른지 확인하는 값입니다. 여기서는 0xF3으로 정의됩니다.

※2-1. 소스코드 및 동작 [Hex 수신 -> ASCII 출력]

위의 패킷구조와 같은 형태로 패킷을 전송하는 코드를 실행해 보겠습니다.

17-2_Packet_HexPrint_Receive_Comportmaster.ino
0.00MB

 

 

// 헤더와 체크섬 상수 정의
const byte HEADER = 0xF2;
const byte CHECKSUM = 0xF3;

byte packet[6];  // 6바이트 패킷을 저장할 배열
int buffer_check = 0;
int buffer_size = 0;

void setup() {
  Serial.begin(9600);  // 시리얼 통신 초기화
}

void loop() {

  buffer_check = 0;

  buffer_check = Serial.available();
  if ( buffer_check != 0) {
    {
      for (int i = 0; i < 5; i++) {
        packet[i] = packet[i + 1];
      }
      // 가장     새로운 데이터 추가
      packet[5] = Serial.read();
    //  Serial.write(packet, 6); // 코드 디버깅 과정에서 버퍼에 들어가는 장면을 보고자 할때만 주석 풀기
    }
    buffer_size = buffer_size + 1;
  }

  if ( packet[0] == HEADER && packet[5] == CHECKSUM ) {

    Serial.write(packet, 6);
    for (int k = 0; k < 6; k++) { //패킷 초기화
      packet[k] = 0x00;
    }
    buffer_size = 0;
  }
}



1. 패킷 생성

  • 헤더: 0xF2를 패킷의 첫 번째 바이트로 설정합니다.
  • 데이터: data 배열의 값을 두 번째부터 다섯 번째 바이트에 복사합니다. => {0x11, 0x22, 0x33, 0x44}
  • 체크섬: 0xF3를 마지막 바이트로 설정합니다.

 

 

 

※3-1. Wiring (배선 연결) & ComportMaster Setting[Hex 수신 -> ASCII 출력]

단순하게 아두이노와 PC와 케이블로 연결합니다. (USB to TTL 필요 없습니다.)

 

ComportMaster의 세팅을 다음과 같이 해주세요. (Send안의 데이터는 예시입니다.)

=> 처음 프로그램 실행 시 중간 오른쪽 Clear옆의 배터는 Hex가 아닌 ASCII일 것입니다. 반드시 클릭해서 Hex로 바꿔주세요.  

**Deviced의 COM번호는 장치관리자 또는 아두이노 IDE -> Tool(툴) ->포트에서 확인하여 각자 PC에 적합한 포트 찾아주세요(아래 동작 동영상 참조)

 

 

 

 

※4-1. 동작 [Hex 수신 -> ASCII 출력]

Comport Master와 아두이노를 연결하여 위의 코드를 실행해 보겠습니다.

 

전공하려고 했던 데이터 가 잘 전송되고 있음을 확인할 수 있습니다.

 

 

 

 


 

 

 

 

 

 

 

※2-2. 소스코드 및 동작 [Hex 수신 -> ASCII 출력]

위의 패킷구조와 같은 형태로 패킷을 전송하는 코드를 실행해 보겠습니다.

18_Packet_Transmisstion_Comportmaster.ino
0.00MB

 

 

1. 패킷 생성

  • 헤더: 0xF2를 패킷의 첫 번째 바이트로 설정합니다.
  • 데이터: data 배열의 값을 두 번째부터 다섯 번째 바이트에 복사합니다. => {0x11, 0x22, 0x33, 0x44}
  • 체크섬: 0xF3를 마지막 바이트로 설정합니다.
// 헤더와 체크섬 상수 정의
const byte HEADER = 0xF2;
const byte CHECKSUM = 0xF3;

void setup() {
  Serial.begin(9600);  // 시리얼 통신 초기화
}

void loop() {
  // 데이터 준비
  byte data[4] = {0x11, 0x22, 0x33, 0x44};  // 송신할 데이터(4바이트)

  // 패킷 생성
  byte packet[6];
  packet[0] = HEADER;  // 헤더
  for (int i = 0; i < 4; i++) {
    packet[i + 1] = data[i];  // 데이터 복사
  }
  packet[5] = CHECKSUM;  // 체크섬

  // 패킷 송신
  Serial.write(packet, 6);  // 6바이트 패킷 송신

  delay(1000);  // 1초 대기 후 반복
}

 

 

 

※3-2. Wiring (배선 연결) & ComportMaster Setting[Hex 수신 -> ASCII 출력]

단순하게 아두이노와 PC와 케이블로 연결합니다. (USB to TTL 필요 없습니다.)

 

ComportMaster의 세팅을 다음과 같이 해주세요. (Send안의 데이터는 예시입니다.)

=> 처음 프로그램 실행 시 중간 오른쪽 Clear옆의 배터는 ASCII입니다. 반드시 클릭해서 ASCII 로 바꿔주세요.  

**Deviced의 COM번호는 장치관리자 또는 아두이노 IDE -> Tool(툴) ->포트에서 확인하여 각자 PC에 적합한 포트 찾아주세요(아래 동작 동영상 참조)

 

 

 

 

※4-2. 동작 [Hex 수신 -> ASCII 출력]

Comport Master와 아두이노를 연결하여 위의 코드를 실행해 보겠습니다.

 

전공하려고 했던 데이터  {0x11, 0x22, 0x33, 0x44}가 잘 전송되고 있음을 확인할 수 있습니다.

 

 

 

이상으로 아두이노에서 LED를 다루는 방법에 대한 설명을 마치겠습니다.

다름 포스트에서 여러 개의 LED를 다루는 방법에 대해 다루겠습니다.

감사합니다.

 

반응형