56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
import asyncio
|
|
import sys
|
|
try:
|
|
from bleak import BleakScanner, BleakClient
|
|
except ImportError:
|
|
print("Please install bleak first: pip install bleak")
|
|
sys.exit(1)
|
|
|
|
DEVICE_NAME = "WijiBoard"
|
|
SERVICE_UUID = "18f3b235-9831-4c75-8ec0-210469b820a0"
|
|
CMD_UUID = "cd083b06-4447-4cf3-a7c3-322ecf802ce4"
|
|
STATUS_UUID = "82e38c5b-d3ab-41d1-861c-b84dc6bb1e03"
|
|
|
|
async def main():
|
|
print(f"Scanning for {DEVICE_NAME}...")
|
|
devices = await BleakScanner.discover(timeout=5.0)
|
|
|
|
target_device = None
|
|
for d in devices:
|
|
if d.name == DEVICE_NAME:
|
|
target_device = d
|
|
break
|
|
|
|
if not target_device:
|
|
print(f"Could not find {DEVICE_NAME}. Make sure it is powered on and advertising.")
|
|
return
|
|
|
|
print(f"Found {DEVICE_NAME} at {target_device.address}. Connecting...")
|
|
|
|
async with BleakClient(target_device.address) as client:
|
|
print(f"Connected: {client.is_connected}")
|
|
|
|
# Setup notifications
|
|
def notification_handler(sender, data):
|
|
print(f"[STATUS UPDATE] {data.decode('utf-8')}")
|
|
|
|
print("Subscribing to status characteristic...")
|
|
try:
|
|
await client.start_notify(STATUS_UUID, notification_handler)
|
|
print("Successfully subscribed!")
|
|
except Exception as e:
|
|
print(f"Failed to subscribe: {e}")
|
|
|
|
# Send a test command
|
|
test_cmd = "S1+100"
|
|
print(f"Sending test command: '{test_cmd}'...")
|
|
await client.write_gatt_char(CMD_UUID, test_cmd.encode('utf-8'), response=False)
|
|
|
|
print("Waiting 5 seconds to receive any status updates...")
|
|
await asyncio.sleep(5.0)
|
|
|
|
print("Disconnecting...")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|