개발일기
Python BLE 비콘 연결 테스트 코드 작성 기능 및 구현 본문
가장 우선적으로 Beacon 을 사용하기 위하여 라이브러리를 설치해주었다. 해당 프로젝트는 파이썬으로 코드를 구현하였음.
이 때, 거리를 측정하기 위해서 코드를 작성해주었다.
bleAdbReadCalculator.py
# 거리 계산 함수 (RSSI와 TxPower을 이용)
def calculate_distance(tx_power, rssi, n=2):
return 10 ** ((tx_power - rssi) / (10 * n))
해당 코드는 비콘이 디바이스에서 떨어져 있는 거리를 구하기위하여 만들어주었다.
아래에 해당하는 블로그를 기준으로 비콘의 거리를 구해주었다.
RSSI = -10n*log*D+TXpower
D = 10 ^ ( (TXpower-RSSI) / (10*n) ) / 20
https://m.blog.naver.com/PostView.nhn?blogId=ithelpter&logNo=220958638454&proxyReferer=undefined
비콘으로 거리값 구하기
안녕하세요. 꿈이 현실이 되는 곳. IThelpter입니다. 오늘은 헬프터가 비콘(Beacon)...
blog.naver.com
import asyncio
from bleak import BleakScanner
from bleAdbReaderCalculator import calculate_distance
async def scan_beacons():
print("🔍 Scanning for BLE devices...\n")
try:
devices = await BleakScanner.discover()
if not devices:
print("❌ No BLE devices found.")
return
for device in devices:
print(f"📡 Device: {device.name or 'Unknown'} | MAC: {device.address} | RSSI: {device.rssi}")
# TxPower 기본값 (-59dBm) 설정
tx_power = -59
distance = calculate_distance(tx_power, device.rssi)
print(f"📏 추정 거리: {distance:.2f} m\n")
except Exception as e:
print(f"🚨 오류 발생: {e}")
# 비동기 실행
asyncio.run(scan_beacons())
위에 코드는 비콘을 통신하기 위한 코드입니다.
asyncio.run 을 통하여 비콘이 통신되는지 여부를 확인할 수 있습니다.
해당 코드에서 계산을 구하는 공식을 import 받는데 그 이유는 테스트 코드를 통하여 거리 구하는 공식을 검증하기 위해서 나누어 주었습니다.
import unittest
from bleAdbReaderCalculator import calculate_distance
class TestBleAdbReader(unittest.TestCase):
def test_calculate_distance(self):
tw_power = -59
result = calculate_distance(tw_power, 40)
self.assertEqual(result, 1.122018454301963e-05)
if __name__ == "__main__":
unittest.main()
테스트 코드를 작성해주었습니다. tw_power = -59 이고 40기준으로 1.122 가 검증 코드입니다.