GPS의 NMEA 데이터를 115200 bps로 uart로 통신하도록 했지만 주기적으로 data drop이 발생

 

버퍼링의 문제거나 packet 단위로 전송하지 않고 한글자씩 따로따로 전송하는 듯함.

Posted by hyunsungkim
,

HC-06, HC-05 정도로 뭉뚱그려져서 불리는 것 같지만 블루투스 모듈을 쓰다보면 수많은 변종이 있다는걸 알게된다.  사용자 입장에서 가장 크게 체감하는 부분은 다음의 네 가지이다.

 

1. 기본 설정(통신 속도, 이름, 패스워드, 모드(역할))

2. AT 모드 진입 방법

3. AT 커맨드 종류

4. 입력 전압 및 로직 전압

5. 블루투스 버전

 

블루투스 모듈마다 조금씩 차이가 있는 이유는 모듈의 구조 때문이다. 보통 아두이노와 함께 사용하는 블루투스 모듈은 아래 그림과 같이 chip, daughter board, breakout board 세 가지가 모여 만들어진다. 

 

 

각 단계의 부품을 어떤 것을 쓰느냐에 따라 위의 네 가지 사항이 달라지는데, 제조사가 다양하고 짝퉁도 많기 때문에 비슷하게 생긴 블루투스 모듈이라도 조금씩 차이가 발생한다. 하지만, 처음 보는 블루투스 모듈이라도 daughter board와 breakout board의 모델명만 안다면 어렵지 않게 사용할 수 있다.

 

Daughter board의 모델명을 알면 1, 3, 5번을 알 수 있고, breakout board를 알면 2, 4번을 알 수 있다. 블루투스 모듈을 사용하는대로 사용법에 대한 기록을 아래에 남길 것이다.

 

Daughter board

위에서 설명했듯이 daughter board의 모델명을 알면 기본 설정, AT 커멘드 종류, 블루투스 버전을 알 수 있다. 모델을 구분하는 방법은 AT command mode로 진입한 후에 이름과 펌웨어로 구분하는 것이 가장 확실하다.

 

HM-10

Huamao Technology 에서 만들어져서 HM인듯 하고, HM-01부터 HM-15까지 존재한다.

클릭하면 확대

기본 세팅

- Chipset: TI CC2541 (BLE 4.0)

- 펌웨어: HMSoft Vxxx

- 통신: 9600 baud, N, 8, 1

- 이름: HMSoft

- 패스워드: 000000

- 모드: Peripheral(Role0), transmit mode

 

AT 커맨드

- 형식: <AT+CMD><?> / <AT+CMD><PARAM> // Get을 위해서는 물음표가 붙어야 하며, 줄바꿈 문자가 없다

- 많이쓰는 CMD: BAUD, PASS, ROLE, TYPE, NAME, VERS

- 데이터시트: http://fab.cba.mit.edu/classes/863.15/doc/tutorials/programming/bluetooth/bluetooth40_en.pdf

(최신버전은 공식페이지에서: http://jnhuamao.cn/index_en.asp)

 

구별법

- 줄바꿈문자(\r\n) 없이 "AT+VERS?" 입력시 HMSoft Vxxx 형식으로 대답

- 상단에 HM-10이 적혀있으며 크리스탈이 2개 달려있다.

 

 

 

 

 

MLT-BT

- Chipset: CC2541 (BLE 4.0)

- 펌웨어 MLT-BT-05-V4.4 기준

- 통신: 9600 baud, N, 8, 1

- 이름: MLT-BT05

- 패스워드: 123456

- 모드: Peripheral(Role0) 

 

AT 커맨드

- 형식: <AT+CMD><CR><LF> / <AT+CMD><PARAM><CR><LF>

- 많이쓰는 CMD: BAUD, PIN, ROLE, TYPE, NAME, VERSION

- 데이터시트: http://denethor.wlu.ca/arduino/MLT-BT05-AT-commands-TRANSLATED.pdf

 

구별법

- "AT+VERSION\r\n" 입력시 MLT-BT05-Vx.x 형식으로 대답

- 상단에 HM-10이 적혀있지 않으며 우측에만 크리스탈이 있음.

 

CC41

아직 사용해보지 않음

HC-05 / HC-06

- Chipset: CSR BC417

- 펌웨어:

- 통신: 9600 baud, N, 8, 1

- 이름: HC-05 / HC-06

- 패스워드: 

- 모드: Peripheral(Role0) 

 

AT 커맨드

- 형식: 

- 많이쓰는 CMD: 

- 데이터시트: 

 

구별법

 

 

추가 사항

HC-05는 SLAVE/MASTER 스위치 있음

HC-06은 SLAVE 스위치 없음

http://www.puntoflotante.net/BOLT-SYSTEM-BLUETOOTH-AT-COMMANDS.htm

 


 

 

 

 

Breakout board

ZS-040

 

KEYES

 

JY-MCU

 

참고

 

https://blog.yavilevich.com/2016/12/hm-10-or-cc41-a-module-automatic-arduino-ble-module-identification/

https://blog.yavilevich.com/2017/03/mlt-bt05-ble-module-a-clone-of-a-clone/

Posted by hyunsungkim
,

BOB-12009 Bi-directional Level Converter

BOB-12009 Bi-directional Level Shifter

로직레벨컨버터

Sparkfun BOB-120009

사용처

로직 레벨은 0과 1을 인식하는 전압을 의미한다. 아두이노를 사용할 때 보통 1 (High)는 5V를 의미하고 0 (Low)는 0V를 의미한다. 하지만, 4.8V를 입력하면 아두이노는 1로 인식하지 못한다는 것은 아니다.

 

아두이노에 사용되는 ATmega328의 datasheet을 보면 다음과 같다.

- voltage lower than 0.3*VCC = LOW
- voltage higher than 0.6*VCC = HIGH

아두이노는 보통 5V 이상에서 구동되므로 3V 이상이면 1, 1.5V이하이면 0으로 인식한다. 1.5V~3V 전압은 0일지 1일지 장담할 수 없다.

 

문제는 3.3V 로직 레벨을 가진 장치가 5V의 신호를 받게 되면 터져버릴 수도 있다는 것이다. 예를 들어, 5V 로직 레벨을 사용하는 아두이노의 GPIO를 3.3V 로직 레벨을 사용하는 ESP8266의 GPIO에 직접 연결하면 ESP8266의 GPIO가 손상될 수 있다.

 

혹은 1.8V 로직 레벨을 가진 장치의 High 신호를 아두이노는 High로 인식하지 못할 수도 있다. 1.8V는 확실히 1이라고 할 수도 없고 확실히 0이라고 할 수도 없는 애매한 영역에 속하기 때문이다.

 

이와 같은 경우에 로직 레벨을 바꿔주는 변환기가 필요하다. 저항으로 전압분배기를 만들어 로직 레벨을 바꿔주는 방법도 있지만 0과 1 사이에서 신호가 빠르게 바뀌는 통신에서는 저항으로 인해 transient time이 길어지며 문제가 생길 수 있다. 그래서 안정적인 작동을 위해서라면 logic converter를 사용하는 것이 좋다.

 

사용법

HV --- 5V의 고정 전압

LV --- 3.3V의 고정전압

GND --- 양쪽 디바이스의 GND

HVx --- 아두이노의 GPIO

LVx --- ESP8266의 GPIO

 

원리

원리는 한 채널 당 한 개의 NMOS를 통해 구현한 것으로 매우 간단하다.

LV1 ---> HV1 로직 레벨 승압

3.3V를 가하면 NMOS의 VGS = 0V 이므로 cutoff되어 HV1은 풀업 전압인 5V를 띈다.

0V를 가하면 NMOS의 VGS = 3.3V > VTH 이므로 saturation mode. HV1은 LV1과 같은 전압인 0V를 띈다.

 

HV1 ---> LV1 로직 레벨 감압

5V를 가하면 LV1이 3.3V인 상태가 평형상태가 된다. 

0V를 가하면 HV1 쪽 핀이 NMOS source가 되면서 saturation mode. LV1은 HV1과 같은 전압인 0V를 띈다.

 

 

회로에 사용된 BSS138의 특성을 보면 HV > LV > 1.5V 이면 작동할 듯. 12V, 5V, 3.3V, 2.8V, 1.8V 레벨에 대해 두루 쓰일 수 있을 것이다.

 

 

주의점

  • 모듈의 크기는 5mm x 6mm 이다. 보이는 것보다 훨씬 작다.
  • 실험 결과 LV1에 3.3V를 인가하면 HV1에서는 정확히 5V가 아닌 4.7V 정도가 출력된다.
  • BSS138의 최대 정격전류가 220mA이므로 로직 수준에서만 사용이 가능하고 전원 공급용으로는 무리가 따른다.

 

참고

BSS138 datasheet : https://www.onsemi.cn/pub/Collateral/BSS138-D.PDF

 

Posted by hyunsungkim
,