Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

파이썬 스크립트

Python으로 BLE 장치와 통신하기 (feat. Copilot)

Billcorea 2024. 9. 15. 15:49
반응형

Python으로 BLE 장치와 통신하기

BLE 장치와 통신해기 feat Copilot

BLE(Bluetooth Low Energy) 장치와 통신하는 방법을 Python을 사용하여 구현해 보았습니다. 이 글에서는 BLE 장치를 검색하고, 서비스와 특성을 확인하며, 데이터를 주고받는 과정을 단계별로 설명합니다.

1. BLE 장치 검색

먼저, bleak 라이브러리를 사용하여 BLE 장치를 검색합니다. bleak는 Windows, macOS, Linux에서 모두 작동하는 BLE 라이브러리입니다.

설치

pip install bleak

코드

Python
 
import asyncio
from bleak import BleakScanner

async def scan():
    devices = await BleakScanner.discover()
    for device in devices:
        print(device)

asyncio.run(scan())
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

이 코드는 BLE 장치를 검색하고, 검색된 장치 목록을 출력합니다.

2. BLE 장치의 서비스 및 특성 확인

검색된 장치의 서비스와 특성을 확인하기 위해 bleak 라이브러리를 사용합니다.

코드

Python
 
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))
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

이 코드는 특정 BLE 장치에 연결하여 모든 서비스와 특성의 UUID를 출력합니다.

3. 데이터 전송 및 수신

BLE 장치와 데이터를 주고받기 위해 bleak 라이브러리를 사용합니다.

코드

Python
 
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())
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

이 코드는 BLE 장치에 연결하여 데이터를 전송하고 수신하는 방법을 보여줍니다. 수신된 데이터는 notification_handler를 통해 출력됩니다.

4. 수신된 데이터 해석

수신된 데이터는 다음과 같은 형식으로 출력됩니다:

Received: bytearray(b'3639,-276\n')
Received: bytearray(b'3673,-435\n')
...

이 데이터를 해석하려면 장치의 프로토콜 문서나 데이터 형식을 참조해야 합니다. 예를 들어, 숫자 쌍 데이터를 파싱하는 코드는 다음과 같습니다:

Python
 
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}")
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

이 코드를 사용하면 수신된 데이터를 적절히 파싱하여 의미 있는 값으로 변환할 수 있습니다.


이 글을 통해 Python을 사용하여 BLE 장치와 통신하는 방법을 이해하고, 실제로 데이터를 주고받는 과정을 구현해 보았습니다. 추가로 궁금한 점이 있거나 도움이 필요하시면 언제든지 댓글로 남겨주세요! 😊

반응형