아두이노에서 블루투스의 사용은 필수 아닌 필수가 되는 것 같다. 그중에서 가장 많이들 사용하는 아두이노 블루투스인 HC-06 블루투스 3.0버전을 사용한다. 일단 통신 프로그램에서 최근에 나온 블루투스 4.0의(HM-10과 같은) LE방식의 코딩이 아닌 시리얼 방식의 코딩으로 가능하기 때문에 기본 예제로 쉽게 제어 할 수 있기 때문이다. 연결 방식은 VCC는 5v 혹은 3.3v GND는 GND TXD는 디지털 2번핀 RXD는 디지털 3번핀 에 연결해주면 된다. #include <softwareserial.h> const int nPin_BTTx = 2; //전송 const int nPin_BTRx = 3; //수신 SoftwareSerial BTSerial(nPin_BTTx, nPin_BTRx); // RX, TX void setup() { Serial.begin(9600); BTSerial.begin(9600); Serial.println("START"); } void loop() { if (BTSerial.available()) Serial.write(BTSerial.read()); if (Serial.available()) BTSerial.write(Serial.read()); } RX와 TX는 RX->TX, TX->RX로 연결해줘야 하는데 핀은 그대로 연결하고, SoftwareSerial 을 선언할 때 순서를 바꿔서 사용하면 연결하는 핀과 소스가 헷갈릴 일은 없다. 이렇게 하고 연결테스트는 AT 명령어로 할 수 있다. 그런데 HC-06은 AT명령어는 아무리 해도 안될 때가 있다. 그래서 혹시나 연결이 잘못 됐나? 싶어서 폰으로 블루투스앱 SPP를 이용해서 데이터를 전송해보면 또 통신은 잘한다. ㅡ.ㅡ 이렇게 해보다가 블루투스의 전원을 뺏다가 다시 꽂으면 그때서야 명령어를 먹는다. 안 될때는 연결부터해서 데이터값 테스트를 해보면 될듯 하다. 여튼 희안하다. 그리고 하드웨어의 버전에 따라서 AT 명령어가 바꼈다. 헐~ 하드웨어 버전이 뭔지 어떻게 안담!!! 먼저 AT를 쳐서 OK가 뜨지 않을 땐 줄을 입력하는 방식을 바꿔야 한다. 보통은 line ending 없음으로 선택되어 있으나, 안되면 Both NL & CR로 변경을 해야 한다. 이러한 이유는 역시나 펌웨어의 버전 차이 때문인거 같다. 실제로 AT 명령어를 실행 했을 때 OK 가 뜨고 난 뒤, AT+VERSION으로 명령어를 날리니 3.0버전이라고 나온다. 그러면 기존에 있는 AT 명령어는 다 바뀐단 소리다. Version : 1.8 의 AT 명령어 AT+NAME -> AT+NAMEMYMOS1 -> "MYMOS1"로 블루투스 이름 변경 AT+PIN -> AT+PIN1234 -> 1234 로 블루투스 비밀번호 변경 (최대 4자리 숫자까지 가능) AT+ROLE -> AT+ROLE=M -> 블루투스 모듈을 마스터로 변경. 슬레이브는 S Version : 3.0 의 AT 명령어 AT+NAME -> AT+NAME=MYMOS1 -> "MYMOS1"로 블루투스 이름 변경 AT+PIN -> AT+PSWD=1234 -> 1234 로 블루투스 비밀번호 변경 (최대 4자리 숫자까지 가능) AT+ROLE -> AT+ROLE=1 -> 블루투스 모듈을 마스터로 변경. 슬레이브는 0 아두이노 블루투스 연결은 쉬운듯 어려운듯 하다. AT명령어만 잘 된다면야 쉽게 쉽게 가는건데 막상 안 먹을 때는 멘붕! 하지만 실제로 통신을 하는건 잘 될 수도 있으므로 어플로 연결이 잘되는지 부터 체크를 하면 될 듯 하다. RS's Travel & Electronic시퀀스와 아두이노 HC-06 : 연결안됨과 AT명령어일람RS 2021. 7. 17. 21:59 시제품 제작일을 하면서 가장 많이 사용한 모듈이 블루투스 모듈 HC-06입니다. 이번 포스팅부터 HC-06을 제가 사용하면서 알게 된 몇몇 노하우들을 게시하고자 합니다. 제원이나 연결법등의 이야기는 생략하겠습니다. 그런 내용은 다른 분들 블로그에 많이 있거든요. 생략한다고는 했지만 그래도 일단 짚어야 될게 두 가지 있는데, 이번 포스팅에서 이야기하고자 합니다. 먼저 아두이노에 연결해서 AT 테스트를 해도 반응이 없을 때입니다. 보통 이걸 사용할 때 SoftwareSerial 객체를 만들어서 사용하실 텐데, 객체 생성자 SoftwareSerial (TX , RX) 인자를 전달할 때 첫 번째 인자 TX는 HC-06의 TX핀과 연결된 아두이노의 핀 번호입니다. 두 번째 인자 RX는 HC-06의 RX핀과 연결된 아두이노의 핀 번호입니다. 시리얼 통신은 TX-RX, RX-TX로 연결해야 된다라는 상식은 그냥 잊고, 위에서 말한 대로만 연결했다면 일단 선 연결이 잘못돼서 안 되는 건 절대 아닙니다. 거꾸로 되어 있으면 생성자 인자를 거꾸로 바꾸세요. 핀을 바꾸는 것보다 간단하죠. 메가같이 시리얼 포트가 여러 개 준비돼 있는 보드를 쓰실 땐 핀을 잘못 연결할 일은 없겠죠? 두 번째로 시리얼 창을 확인하셔야 됩니다. 보통은 9600 보드 레이트는 건드리지 않으셨을 테고요.. 그 옆에다 문제인데, HC-06의 펌웨어 버전이 2.0 이하라면 line ending 없음으로 해야 시리얼 창에 응답이 뜹니다. HC-06의 펌웨어 버전이 3.0이라면 Both NL & CR로 해야 시리얼 창에 응답이 뜹니다. 버전을 알 수 없는 경우는 일단 선 연결이 제대로 됐는지 체크하고 시리얼 창의 조건을 두 가지 다 시험해 보세요. 둘 중의 하나는 반응이 올 겁니다. 둘 다 해봤는데 안된다고요? 일단 전원 제거하고 아두이노 IDE를 끈 다음에, IDE를 다시 실행하고 아두이노에 전원을 넣고 시리얼 창을 띄워서 다시 확인해보세요. 그래도 안된다면 불량일 확률이 높습니다. 과감히 쓰레기통에 집어던지세요. 여러분의 시간은 돈 4~6천원보다 소중합니다. 다음은 AT명령어입니다. 펌웨어 2.0 이전과 3.0에서의 AT명령어는 다른 부분이 있습니다.
|