개발 블로그

[DM공모전] 블루투스 통신으로 OBD-II 데이터 핸드폰에 출력하기 & 통신하기[1] 본문

개발/Projects

[DM공모전] 블루투스 통신으로 OBD-II 데이터 핸드폰에 출력하기 & 통신하기[1]

영글어가다 2022. 1. 24. 13:22

이번엔 아두이노 IDE 시리얼 모니터에서 받아왔던 정보를 VScode 시리얼 모니터에서 받아봤다.

이번엔 블루투스 통신을 해보자!!

https://speak-of-the-devil.tistory.com/7

 

[공모전] OBD - II 정보 VScode 로 출력하기

VScode로 조이스틱 모듈에 정보를 받아왔고, OBD - II 정보를 아두이노 IDE를 통해 받아오는 것을 했다. 이번엔 아두이노 IDE 시리얼 모니터에서 받아왔던 정보를 VScode 시리얼 모니터에서 받도록 해보

speak-of-the-devil.tistory.com


결과

vscode에서는 시리얼 모니터에서 쓰는 게 안된다고 한다. 시리얼 모니터 프로그램(ex.hercules 시리얼 모니터)을 따로 다운로드 해서 vscode와 함께 사용해야 한다는데 지금 당장은 다른 일이 우선이라 다음에 해보자.

아두이노 IDE 를 이용해서 시리얼 통신을 했다.

아두이노 IDE 시리얼 통신

진행 과정에서 케이블의 중요성을 다시 한 번 느꼈다... 데이터 전송 전용이 아닌 충전기 케이블로 진행하다 보니 생각하지 못한 에러 상황이 발생했다...OBD 모듈 대신 아두이노 우노를 사용해서 해결했다. 꽤 오랜 시간이 걸렸다... 그렇지만 아주 유익한 시간이었다 :) 자세한 내용은 밑에서 얘기하겠다!!

(수정) 알고 보니, 우리가 구매한 OBD 모듈은 전원을 켜기 위한 코드가 있었다ㅠ(애플 충전기 케이블은 전원 코드를 적어도 켜지지 않았다.)


할 일

1. VScode PlatformIO로 조이스틱 모듈 정보 출력하기

2. OBD - II 정보 VScode 로 출력하기

3. 블루투스 통신으로 OBD-II 데이터 핸드폰에 출력하기

4. 앱과 OBD 모듈이 아두이노 블루투스 통신하는 코드짜기

 

3번과 4번을 동시에 진행했다. 전체 과정은 아래와 같다.

1) 코드 작성하기

2) 블루투스 앱 다운로드 및 설정

3) OBD 모듈 & 블루투스 모듈 연결하기

4) 통신하기

 


1) 코드 작성하기

SoftwareSersial 라이브러리를 추가했다. 이 라이브러리는 보드의 핀 맵에 있는 일반 핀에 TX, RX 역할을 부여하는 것을 가능하게 한다.

(HC06은 블루투스 모듈 이름이다. 코드에서는 객체 이름으로 선언했다.)

// a. TX, RX 핀 선언

#include <SoftwareSerial.h>

#define PORT_RX 10
#define PORT_TX 11

SoftwareSerial HC06(PORT_RX, PORT_TX);

// b. 시리얼과 HC06 통신 시작을 위한 선언
void  setup(){
  Serial.begin(9600);
  HC06.begin(9600);
}

// c. 블루투스 -> 모듈, 모듈 -> 블루투스 입출력을 위한 코드
void  loop(){
  if (HC06.available()){
    String get_hc06 = HC06.readStringUntil('\n');
    Serial.println(get_hc06);
  }
  if (Serial.available()){
    String get_serial = Serial.readStringUntil('\n');
    HC06.println(get_serial);
  }
}

a. 데이터 통신을 위한 TX, RX 핀을 선언

b. 시리얼과 블루투스 통신 시작을 위한 선언

c. 블 -> 모듈, 모듈 -> 블 입출력을 위한 선언

 

2) 블루투스 앱 다운로드 및 설정

다음 앱을 다운로드했다. 

앱을 틀고 왼쪽 상단에 햄버거 모양 버튼(줄 3개)을 누르면 창이 나온다. Settings -> Receive 에서 CR(캐리지 리턴)을 선택. 데이터를 받아서 출력할 때 개행하며 출력한다. Devices 메뉴에서 HC-06 모듈을 선택.

HC-06 을 선택하면 Termianl 창으로 연결된다. Terminal 에서 빨간 박스 표시를 누르면 블루투스 연결을 시도한다. 이 부분은 다음 부분에서 시도.

 

3) OBD 모듈 & 블루투스 모듈 연결하기

OBD 모듈의 뒤를 보면 핀의 역할이 적혀있다. 블루투스 모듈(HC06)도 뒤를 보면 핀의 역할이 적혀있다. 비교해보면 순서대로 핀이 나열된 것을 볼 수 있다. 각 모듈의 TX, RX 는 서로 반대로 연결해야 한다. ( 블루투스의 TX -> OBD의 RX, OBD의 RX -> 블루투스의 TX )

아두이노와 블루투스 모듈 연결이 다 됐다면 앱에서 연결을 하자.

빨간 버튼을 누르면 Connecting to HC-06... -> Connected 문구가 생기면서 연결이 된다.

블루투스 모듈이 깜박 깜박인다면, 연결이 가능한 상태라는 의미이다.

페어링이 가능하다는 신호

블루투스 모듈이 지속적으로 불을 켜고 있다면 연결이 됐다는 의미!!

페어링 된 신호

연결이 성공적으로 됐지만, 케이블의 문제로 "PC -> 블루투스 모듈"로 데이터를 전송하는 부분에서 연결이 계속 끊겼다.

(블루투스 모듈 -> PC로 전송을 잘됐기 때문에 코드가 잘못된 줄 알고, 코드만 고쳤다...)

 

핸드폰에서 출력하는 건 잘 가는데, 보드에서 핸드폰으로 가는 게 잘 안됨. 찾아보니 케이블 문제일 수 있다는 얘기가 있어서 다른 보드로 해봤다. 다음 케이블로 하니 매우 잘됐다... 맨 위 영상에서 확인할 수 있다. 아무래도 OBD 모듈 연결을 위한 케이블을 하나 구매해야겠다.

(수정) 알고 보니, 우리가 구매한 OBD 모듈은 전원을 켜기 위한 코드가 있었다.

 

4) 통신하기

아두이노 IDE 를 실행!

a. 포트가 연결됐는지 확인하자.

b. 오른쪽 상단에 시리얼 모니터를 클릭하자.

c. 하단의 시리얼 모니터에서 출력 방식 (나는 캐리지리턴)을 정하고, baud rate 에는 코드에서 입력한 값을 넣자.

맥북에서는... Enter + Command 를 해야 입력 데이터가 넘어간다!

 

실행 영상은 맨 위의 영상을 참고하자!!

.

.

.

.

.

(수정) OBD 를 이용한 블루투스 통신을 했다!!

https://speak-of-the-devil.tistory.com/20

 

[공모전] 블루투스 통신으로 OBD-II 데이터 핸드폰에 출력하기 & 통신하기[2]

이전에 OBD - II 모듈과 블루투스 앱 통신에 문제가 생겨, 아두이노 우노 보드로 바꿔 진행했었다. 그런데 운이 좋게 문제를 해결했다. 모듈에 문제가 있던 것은 아니었다. 모듈 사용 방법이 홈페

speak-of-the-devil.tistory.com