Bluetooth에 대해서

낭만개발자·2020년 4월 21일
0

Bluetooth

무선으로 구성된 근거리 통신규격,
사용환경 보통 10m 이내라 함. 상태 좋을땐 20m 까지도 통신 가능함

하나의 마스터 디바이스가 다수의 슬레이브 디바이스와 연결 될 수 있으며, 슬레이브 디바이스는 마스터 연결 가능.
하지만 슬레이브간은 통신 불가능.
예) 스마트폰과 블루투스 헤드셋 으로 볼때,
마스터는 스마트폰, 슬레이브는 블루투스 헤드셋, 등등 장비들.


(위에 사진은 HC-06 모듈, 실제로 보면 아래 월남쌈처럼 생김.. 사진이 왤케 크지.)

HC-06 모듈은 블루투스 2.0버전.
IDE(아두이노 등)를 통해 설정 변경 가능한데 이때 AT명령어로 각종 setting이 가능하다!!.(명령어는 구글링 검색:AT명령어라 치면 뜸.)

마스터-슬레이브 간 통신 연결(=페어링이라 함) 위해선 동일한 장치명과, PIN 번호를 가져야 함. PIN은 대부분 기본값 1234.
변경하려면 아까 AT명령어 통해서 변경 가능하다.

HC-06 블루투스 사용시 아두이노 .ino 파일에서
#include <SoftwareSerial.h> 로 갖고와서 사용하면 됨

아두이노에서 시리얼 모니터로 값 확인 할 시 주의!!
요것땜에 삽질 많이함..
serial.print() vs serial.write()

만약 아두이노서 숫자65를 출력한다고 하자! 그리고 시리얼모니터로 확인 한다면!!

serial.print(65) 입력 시 print()는 아스키 코드를 보낸다. 즉, '6'의 아스키코드인 54, '5'의 아스키코드인 53를 보내고, 받는 쪽(시리얼 모니터)에서 54,53 아스키 코드를 받고 65로 변환해서 보여준다. 즉 숫자 65로 정상적으로 찍혀 나온다

serial.write(65) 입력시 write()는 위처럼 아스키 코드를 보내지 않는다. 그래서 65를 걍 화끈하게 65로 보내버리고, 받는 쪽에선 당연히 아스키 코드값이 온거라 생각해서 숫자 65를 아스키코드로 착각하고 65의 아스키코드 값인 'A'로 변환해서 보여준다.

따라서 시리얼 모니터를 사용해 숫자 데이터를 확인하려 할 때는 반드시 print() 사용한다 (문자 일땐 아무거나 사용가능)

참조:
[아두이노 QnA] 네이버 블로그 Serial.print() VS Serial.write()

stackexchange : What is the difference between Serial.write and Serial.print? And when are they used?

블루투스 4.0

1:1 통신 기반의 블루투스 2.0과 달리 1:N 통신이 가능하다.
EN핀은 HIGH 신호를 입력 받으면 디바이스와 연결이 해제되는 핀이다.
(EN핀 설명이 구글링해도 정말 안나온다. 초심자는 배우기 힘들었음 ㅠ)

블루투스 모듈의 MAC 주소 알기

블루투스 모듈의 MAC 주소를 알수 있는 방법은, AT command를 이용, 시리얼 모니터에서 'AT+ADDR?' 을 입력하면 MAC 주소를 알 수 있다.

--오늘은 여기까지

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

0개의 댓글