๋ชฉ์ฐจ
ํ์ด์ฌ์ ๋ชจ๋ ์ค bleak์ ์ด์ฉํ์ฌ Mac์์ BLE ํต์ ์ ํด๋ณด์!
1. BLE๋ ๋ฌด์์ธ๊ฐ
BLE๋ Bluetooth Low Energy์ ์ฝ์๋ก ๋ธ๋ฃจํฌ์ค์ ๊ฐ์ง๋ง ๋ ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ํต์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋๋ฌธ์ ์ค๋งํธ ์์น, ํ๊ทธ, ์์ ์ฅ์น๋ค์ ์ฃผ๋ก ์ด์ฉํ๋ค. ์ด๋ฅผ ์ด์ฉํด์ ์ฌ์ ๋, ๋ฉ์์ง ํต์ ๋ฑ ๋ค์ํ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
2. bleak ๋ชจ๋ ์ด์ฉํ๊ธฐ
bleak๋ ํ์ด์ฌ์์ ๋ธ๋ฃจํฌ์ค LE๋ฅผ ์ง์ํ๋ ๋ชจ๋์ด๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅด ํตํด์ MacOS, Windows, Linux ๋ฑ์์๋ ๊ฐํธํ๊ฒ ์ฅ์น์ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ํต์ ํ ์ ์๋ค.
์๋์์๋ bleak์ ์ด์ฉํ ๊ฐ๋จํ ์์๋ค์ด๋ค.
--- ์ค์ตํ๊ฒฝ
python 3.9.6
bleak 0.20.2
์ํ ๋จ๊ณ ์์ฝ
1. Bluetooth ์ฅ๋น On
2. bleak ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ
3. ์ฃผ๋ณ์์ BLE์ฅ์น ๊ฒ์ ๋ฐ ๋ชฉ๋ก ๋ํ๋ด๊ธฐ
4. ์ํ๋ ๊ธฐ๊ธฐ์ ์ฃผ์๋ฅผ ์ด์ฉํ์ฌ ์ฅ์น์ ์ฐ๊ฒฐ
1) ๋ชจ๋ import
import bleak
1. pip install bleak์ ํตํด ๋ชจ๋ ์ค์น (๊ฐ์ํ๊ฒฝ ์ธํ ๋ฐ pip ์ค์น ๋ฑ์ ์์ ์์ ์๋ต)
2. import bleak์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
2) ์ฅ์น ๊ฒ์ํ๊ธฐ
import asyncio # ๋น๋๊ธฐ ๋ชจ๋๊ฐ์ ธ์ค๊ธฐ
from bleak import BleakScanner # bleak์ Scanner๊ฐ์ ธ์ค๊ธฐ
async def main (): # ๋น๋๊ธฐ ํจ์ ์ ์
devices = await BleakScanner.discover() # ๋น๋๊ธฐ ์ํ์์ ์๋ฆผ
for device in devices:
print (device)
asyncio.run(main()) # main()ํจ์๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋ ๊ฒ์์ ์๋ฆผ(ํ์)
- Asyncio ๋?
๋น๋๊ธฐ ์คํ์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๋ธ๋ฃจํฌ์ค ๊ธฐ๊ธฐ๋ฅผ ์ฐพ๋ ๊ฒ์ ์๋ต ์๊ฐ์ ์์ธกํ ์ ์๊ณ ๋์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ผ์์ ์ง ํ ์ ์๊ธฐ ๋๋ฌธ์
Asyncio ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ฅ์น ๊ฒ์ ์ํ๊ณผ ๋ค๋ฅธ ์ฝ๋๋ค์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํด์ผํ๋ค.
discover()๋ ํ์ฌ ์ฃผ๋ณ์ BLE ์ฅ์น๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋ค.
์ํ๊ฒฐ๊ณผ
๊ฐ ๋๋ฐ์ด์ค์ ๋ด๊ธด ๋ณ์๋ค์
.name .address .details๊ฐ ์๋ค.
์ค๋ ํ์ฉํ ํคํธ๋
F0B8A2B0-CD98-DAC7-FD9B-E2FCC1BF4200 ์ด๋ผ๋ UUID ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฌ๊ธฐ์ MAC์ฃผ์๊ฐ ์๋ UUID ์ฃผ์๋ง ๋ฐํํ ์ด์ ๋ MacOS์ ๋ณด์์์ ์ด์ ์ด๋ค.
๋ฌผ๋ก ์ด๋ฏธ MAC์ฃผ์๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ด์ฉํ์ฌ ์ฐ๊ฒฐํ ์ ์์ง๋ง,
ํ์์ ํ์ฌ ๋ฐํ๋ ๊ฒ์ ์ด์ฉํ ๊ฒฝ์ฐ UUID๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
3) ์ฅ์น์ ์ฐ๊ฒฐํ๊ธฐ
BLE์ฅ์น์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์๋ MAC ํน์ UUID ์ฃผ์๋ฅผ ์ด์ฉํ์ฌ BleakClient์ ์ ๋ฌํ๋ฉด ๋๋ค.
import asyncio
from bleak import BleakClient, BleakScanner
async def main ():
address = "F0B8A2B0-CD98-DAC7-FD9B-E2FCC1BF4200" # Kit UUID
async with BleakClient(address) as client:
print (client.is_connected) # True ๋๋ False ์ถ๋ ฅ
asyncio.run(main())
์ํ๊ฒฐ๊ณผ
BleckClient()์ ์ฃผ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ฉด ์ฐ๊ฒฐํ ์ ์๋ค.
์๋์ ์ฝ๋๋ ์์ ํ์๊ณผ ์ฅ์น ์ฐ๊ฒฐ์ ๋ณํฉ ๋ฐ ์์ฉํ ๊ฒ์ด๋ค.
import asyncio
from bleak import BleakClient, BleakScanner
async def main ():
devices = await BleakScanner.discover()
for idx, device in enumerate(devices):
print(f'{idx}\t\t',device)
select = int(input())
address = devices[select].address
async with BleakClient(address) as client:
try:
print("Connecting...", end='')
await client.connect()
print('Connected!!')
except Exception as e:
print('error: ', e, end='')
finally:
print('Start disconnect')
await client.disconnect()
print('disconnected')
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
print('Done!')
์ํ ๊ฒฐ๊ณผ
'๐ | Python > ํ์ด์ฌ ์ด๊ฐ๋จ ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] BLE ํต์ ํ๊ธฐ with bleak (MacOS) - 2) ๋ฐ์ดํฐ ๋ฐ๊ธฐ (0) | 2023.05.24 |
---|---|
Python_์ฌ์๋ฐค๋ฐ๋ค '์' ํ์๋ฅผ ์ธ์ด๋ณด์ (0) | 2022.01.17 |
์น ํฌ๋กค๋ง _ ๋ฆฌ๊ทธ์ค๋ธ๋ ์ ๋ ์ ์ ๊ฒ์๊ธฐ (0) | 2021.12.27 |
์ฃผ์ฌ์ ๋ฒ ํ ๊ฒ์ (0) | 2021.11.03 |
์ซ์์ผ๊ตฌ (0) | 2021.11.03 |
๋๊ธ