HC-05 모듈을 사용한 아두이노 스케치 블루투스 SPP 업로드

지금부터 소개하는 방법은 상당히 오래된 방법이지만 아직도 유용하게 사용할수 있는 방법으로 ArduinoIDE 스케치 업로드 버튼을 누르고 사용자가 직접 하드리셋을 시켜줄 필요도 없다. 

HC-05 와 같은 저렴한 블루투스 클래식 모듈은 SPP 통신을 지원한다.  
HC-05에 적절한 펌웨어 설정과 적절한 회로구성만 있다면 마치 USB 를 통해 스케치를 업로드하는것 처럼 사용할수 있다.


위 이미지 처럼 온보드 형태로 PCB 로 만들고자 할때 모듈을 잘 골라야하는데 펌웨어 버전이 다른거나 HC-05 와 비슷한 BC04 라는 제품이 있다. 

좀 더 다양한 테스트를 받았고 상위 호환의 제품으로 보이지만 이 모듈은 사용하면 안된다. 
비슷한 제품인 BC04은 HC-05 제품과 비교하여 AT 명령어 셋의 일부가 누락되어 있으며 핀 아웃 마저 다르다. 
따라서 온보드 형태의 PCB 를 만들어야하는 경우 HC-05 그대로 사용하거나 모듈 부분만 떼어내서 사용하는 방법이 확실하다.

먼저 아두이노와 HC-05의 하드웨어 결선 방법이다.


HC-05 의 핀아웃을 보자면 정변 기준 왼쪽부터 STATE, RxD, TxD, GND, VCC, EN 이 있다.
핀 들의 순서를 기준으로 필요한 회로도를 작성하면 다음과 같다.
HC-05 는 3.3V 로 동작하는 모듈로 이보다 높은 전압에 노출되면 회로가 손상되거나 오작동 할 가능성이 높아진다. 때문에 이렇게 전압이 다른 두 컨트롤러를 통신할때는 전압 레벨을 맞춰줄수 있는 레벨 컨버터 를 사용하는것이 좋다. 레벨 컨버터의 경우 모스펫을 사용하는방법 저항을 사용하는 방법 다이오드를 사용하는 방법 등 여러가지가 있지만 가장 빠르고 안정적이며 범용적으로 사용할수 있는 모스펫을 사용하는 방법을 추천한다.

보통은 RX TX 에 모두 설계를 적용하지만 HC-05 기준 RX 만 모스펫을 적용하였다
아래 회로는 모스펫을 이용한 로직 레벨 컨버터 설계로 안정적으로 신호를 변환할 수 있는 방법중 하나이다. 


풀업 저항은 범용적으로 10K 이 많이 사용되지만 1K~10K 의 저항을 사용할 수도 있다. 
양쪽의 노드에 모두 풀업 저항을 연결하면 신호가 없을때 High 상태를 유지하여 안정적으로 동작할 수 있도록 해준다

모스펫을 선택할때는 사용하는 전압보다 낮은 게이트-소스 역치 전압을 가진 제품을 사용해야한다. 
이 경우 사용 가능한 모스펫으로는 BSS138, 2n7000, 2n7002 와 같은 제품들이 있다. 
이 세가지 제품 모두 게이트 소스 역치 전압이 3.3V 보다 낮기 때문에 3.3V-5V 양방향 통신 레벨 컨버터로 사용했을때 정상적인 동작을 기대할 수 있다.

만약 시스템에서 3.3V 를 공급 받을 수 없는 상황이면 다음과 같이 5V 공급 전압에 다음과 같이  5.1K 나 4.7K 정도의 저항을 연결하면 전압 분배 법칙에 따라 약 3.3V 정도를 얻을 수 있다.



모스펫을 사용하는 방법 말고도 단순히 저한만으로 전압을 분배하여 사용하는 방법이나 다이오드를 사용하는 방법을 사용하면 좀 더 저렴하게 회로를 구성할수 있지만 성능이나 안정성이 떨어지는 편이다.


다음으로 설명할 부분은 HC-05에 DTR 회로를 구성하는 방법이다.

DTR 이란 데이터 전송 준비가 완료를 알리는 직렬 통신에 사용되는 신호 중 하나이다. 
예를들어 아두이노의 경우 DTR 신호를 사용하여 리셋을 트리거하고, 시스템을 재부팅하여 펌웨어를 다운받을수 있는 부트로더가 실행되도록 한다. 

HC-05 에는 DTR 기능이 없지만 비슷하게 구현할 수 있는 방법이 바로 State 핀을 사용하는 방법이다. 



State 핀은 HC-05 Bare(SiP) 모듈 기준 32(PIO9)핀 에 해당하며 원래 LED 를 제어하기 위한 핀으로 HC-05 모듈의 블루투스 연결 상태를 피드백 해주는 역할을 한다.  만약 State 핀이 노출되지 않은 모듈의 경우 32(PIO9) 에 직접 연결하여 사용할수 있다.

State 핀의 기본 설정은 HIGH 지만 AT 명령어로 설정을 변경하면 LOW 로 변경할수 있다. 그리고 이 때 출력되는 LOW 신호를 측정해보면 IC Reset에 쓸 수 있을만큼 충분히 낮은 전압이 측정되는 것을 알아낼 수 있다.

여기까지 생각해보면 State 핀을 바로 Reset 핀에 연결하여 사용할수 있을것 같지만 실제로는 연결해보면 IC 가 리셋 루프에 빠지는 것을 목격하게 될 것이다.  이 동작은 IC 에 안 좋은 영향을 줄 수 있음으로 가능한 빨리 시스템을 종료시키는것이 좋다.

리셋 루프에 빠지는 현상을 방지하려면 State와 Reset 사이에 연속 시호를 차단하고 교류신호는 통과시키는 콘덴서를 연결하면 되는데, 콘덴서는 신호에 적응할 수 있기 때문에 적절한 타이밍으로 동작할 수 있는 용량을 찾아야한다.

DTR 로 사용하기 위해서는 먼저 회로부분을 다음과 같이 구성한다.


위 회로를 보면 State 와 RST 사이의 1uF 정도의 콘덴서를 사용하였다. 
DTR 을 지원하는 하드웨어 들을 보면 100nF 를 사용하는것을 흔하게 볼수있는데 더 높은 안정성이나 노이즈가 심한 환경에서는 더 높은 용량을 사용할 수 있다. 낮은 용량은 더 빠르게 신호를 전달할 수 있겠지만 부트로더가 정상적으로 실행되지 못할 수도 있다. 

테스트는 100nF 부터 10uF의 세라믹 콘덴서를 사용하여 진행 하였고, 100nF 에서는 부트로더에 너무 빨리 진입하여 업로드에 실패하는 현상이 빈번히 발생 하였으며, 1uF 이상 부터는 충분히 만족스러운 동작을 기대할 수 있었다. 따라서 회로에 1uF 의 세라믹 콘덴서를 사용하였다.

다음으로 State의 동작을 반전 시켜야 하며, 시리얼 통신 보율을 변경해야한다.
HC-05 는 동적으로 통신속도를 바꿀수 없기때문에 그냥사용하면 펌웨어 업로드가 진행되지 않는다.
예를 들어 아두이노 우노에 HC-05 를 이용하여 펌웨어를 업로드 한다면 우노의 업로드 통신보율인 115200에 맞게 HC-05 의 통신보율도 115200 이어야 한다는 뜻이다.

HC-05의 경우 일반적으로 출고시 설정되는 통신보율 기본값은 9600이고 AT 명령은 시리얼 통신으로 가능하다. 
아래 링크에 이 동작을 수행하기 위한 간단한 아두이노 스케치를 작성하였다. 



HC-05 모듈 설정이 정상적으로 적용되었고 회로도 구성하였다면 간단한 예제를 업로드하여 확인해보자.

Comments

Popular posts from this blog

[Python] - 블루투스 모듈 HC-06의 MAC 주소를 이용하여 통신 포트 찾기

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결

[Raspberry Pi] - 라즈베리 파이에서 멀티미디어 감상에 적절한 비디오 세팅