Python으로 BLE 장치와 통신하기
BLE(Bluetooth Low Energy) 장치와 통신하는 방법을 Python을 사용하여 구현해 보았습니다. 이 글에서는 BLE 장치를 검색하고, 서비스와 특성을 확인하며, 데이터를 주고받는 과정을 단계별로 설명합니다.
1. BLE 장치 검색
먼저, bleak 라이브러리를 사용하여 BLE 장치를 검색합니다. bleak는 Windows, macOS, Linux에서 모두 작동하는 BLE 라이브러리입니다.
설치
pip install bleak
코드
import asyncio
from bleak import BleakScanner
async def scan():
devices = await BleakScanner.discover()
for device in devices:
print(device)
asyncio.run(scan())
이 코드는 BLE 장치를 검색하고, 검색된 장치 목록을 출력합니다.
2. BLE 장치의 서비스 및 특성 확인
검색된 장치의 서비스와 특성을 확인하기 위해 bleak 라이브러리를 사용합니다.
코드
import asyncio
from bleak import BleakClient
address = "F6:5B:9F:64:41:37" # BLE 장치의 주소
async def get_services(address):
async with BleakClient(address) as client:
services = client.services
for service in services:
print(f"Service: {service.uuid}")
for characteristic in service.characteristics:
print(f" Characteristic: {characteristic.uuid}")
asyncio.run(get_services(address))
이 코드는 특정 BLE 장치에 연결하여 모든 서비스와 특성의 UUID를 출력합니다.
3. 데이터 전송 및 수신
BLE 장치와 데이터를 주고받기 위해 bleak 라이브러리를 사용합니다.
코드
import asyncio
from bleak import BleakClient
address = "F6:5B:9F:64:41:37"
RX_CHARACTERISTIC_UUID = "6e400002-b5a3-f393-e0a9-e50e24dcca9e" # 데이터 전송
TX_CHARACTERISTIC_UUID = "6e400003-b5a3-f393-e0a9-e50e24dcca9e" # 데이터 수신
async def send_data(client, data):
await client.write_gatt_char(RX_CHARACTERISTIC_UUID, data)
print(f"Sent: {data}")
async def receive_data(client):
def notification_handler(sender, data):
print(f"Received: {data}")
await client.start_notify(TX_CHARACTERISTIC_UUID, notification_handler)
await asyncio.sleep(5) # 데이터 수신 대기 시간
await client.stop_notify(TX_CHARACTERISTIC_UUID)
async def main():
async with BleakClient(address) as client:
if client.is_connected:
print(f"Connected to {address}")
# 데이터 전송
await send_data(client, b'Hello BLE')
# 데이터 수신
await receive_data(client)
asyncio.run(main())
이 코드는 BLE 장치에 연결하여 데이터를 전송하고 수신하는 방법을 보여줍니다. 수신된 데이터는 notification_handler를 통해 출력됩니다.
4. 수신된 데이터 해석
수신된 데이터는 다음과 같은 형식으로 출력됩니다:
Received: bytearray(b'3639,-276\n')
Received: bytearray(b'3673,-435\n')
...
이 데이터를 해석하려면 장치의 프로토콜 문서나 데이터 형식을 참조해야 합니다. 예를 들어, 숫자 쌍 데이터를 파싱하는 코드는 다음과 같습니다:
data = bytearray(b'3639,-276\n')
values = data.decode('utf-8').strip().split(',')
x, y = int(values[0]), int(values[1])
print(f"x: {x}, y: {y}")
이 코드를 사용하면 수신된 데이터를 적절히 파싱하여 의미 있는 값으로 변환할 수 있습니다.
이 글을 통해 Python을 사용하여 BLE 장치와 통신하는 방법을 이해하고, 실제로 데이터를 주고받는 과정을 구현해 보았습니다. 추가로 궁금한 점이 있거나 도움이 필요하시면 언제든지 댓글로 남겨주세요! 😊
'파이썬 스크립트' 카테고리의 다른 글
공공데이터를 사용하여 Python으로 데이터 수집 및 처리하기 (0) | 2024.10.29 |
---|---|
Python과 xlwings를 사용하여 Excel에서 특정 영역 색상 변경 및 셀 넓이 자동 조절하기 (1) | 2024.10.25 |
50 크리에이티브 챗GPT, 소셜 미디어 게임 고도화 프로모션 ...퍼옴 (0) | 2024.07.04 |
AI로 Youtube short Factory 만들기 자동화 혁신과 탐구의 여정 ... 퍼옴 (0) | 2024.07.01 |
GPT로 1시간 만에 유튜브 요약 앱을 만들었습니다. ... 퍼옴 (1) | 2024.06.19 |