초보자를 위한 라즈베리 파이 블루투스로 스마트폰 연결 출입 체크 파이선 2 코딩
와이파이나 블루투스 기술이 이미 상상 이상으로 발전되었으며 이제는 개인들도 직접 코딩해서 실제 사용하는 것이 가능하다
블루투스 4.1 이 빌트인으로 설치된 브로드컴 SoC 칩을 사용하는 라즈베리 파이 3 모델에서 블루투스 기능을 사용하여 가까이 있는 스마트 폰을 검색해보고 이 방법을 바탕으로 스마트폰 사용자 방 출입 기록을 작성해 보도록 한다.
블루투스가 빌트인이고 칩안테나가 설치되어 있기 때문에 주변에 블루투스 기기 스캔 작업에 필요한 배선 작업은 전혀 필요 없다.
블루투스를 사용하기 위해서 필요한 모듈 즉 라이브러리를 설치하도록 한다.
업데이트부터 시작한다. 다소 시간이 걸릴 수도 있음을 참조한다.
그 다음 블루투스 모듈과 bluez를 각 각 설치한다. 마지막으로 파이선-bluez를 설치한다. 아직 python3 버전이 없으며 그냥 python 은 버전 2를 뜻한다.
스마트 폰의 블루투스 디바이스 이름을 검색 가능하도록 여기서는 Galaxy Note3 이라는 이름으로 스마트 폰에서 등록해 두어야 한다. 반드시 자신의 스마트 폰 명을 등록하도록 하자.
bluetooth 모듈에서 제공하는 bluetooth.lookup_name(bdaddr)은 주변의 블루투스 기기를 스캔하여 bluetooth device address 즉 badaddr 이라는 변수 값으로 돌려준다
target_address = None 은 스캔 결과 블루투스 기기가 발견되지 않을 경우에 사용하는 변수 값 설정이며 스캔이 되었을 경우에는 찾았다는 메시지와 함게 블루투스 주소가 출력된다.
.
아래는 블루투스 기기 스캔 결과 사례이다.
주변에 검색할 블루투스 디바이스가 없다면 “could not find ⚫⚫⚫“ 메세지를 출력하고 있을 경우에는 디바이스 id ‘34:31:11:16:7A:4A’ 와 “found target ⚫⚫⚫“메세지를 출력한다.
이 과정에서 디바이스 주소(address) 추출이 가능하면 다음과 같이 방에서 출입 및 시간을 체크해 주는 코드를 작성해 보자.
time 모듈과 datetime 모듈 두 가지를 사용한다. time 모듈은 시간 지연 즉 time.slee() 용이며 datetime은 로컬 실시간 정보를 불러 온다.
이미 블루투스 기긱의 고유 주소를 찾았으면 bluetooth.lookup_name() 명령에서 그 주소 데이터와 함게 허용시간을 입력해 주면 스캔 작업이 이루어지고 해당 블루투스 기기의 검출 여부를 체크해 준다.
블루투스 기기의 도달 영역이 문제가 될 수 있으나 일단 문을 닫고 나가면 Out 으로 체크가 가능하다.
myPhone_v2_01.py
import bluetooth
target_name = "Galaxy Note3"
target_address = None
nearby_devices = bluetooth.discover_devices()
for bdaddr in nearby_devices:
if target_name == bluetooth.lookup_name( bdaddr ):
target_address = bdaddr
break
if target_address is not None:
print ("found target bluetooth device with address ", target_address)
else:
print ("could not find target bluetooth device nearby")
inOut_v2_02.py
import bluetooth
import time
import datetime
while True:
now = datetime.datetime.now()
print "Checking " + now.strftime("%a, %d %b %Y %H:%M:%S")
result = bluetooth.lookup_name('34:31:11:16:7A:4A', timeout = 5)
if (result != None):
print "Me: in"
else:
print "Me: out"
time.sleep(60)