57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
"""This demo connects to a magic light and has it do a color wheel."""
|
|
import adafruit_ble
|
|
import _bleio
|
|
|
|
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
|
|
from adafruit_ble_magic_light import MagicLightService
|
|
|
|
|
|
def find_connection():
|
|
for connection in radio.connections:
|
|
if MagicLightService not in connection:
|
|
continue
|
|
return connection, connection[MagicLightService]
|
|
return None, None
|
|
|
|
|
|
# Start advertising before messing with the display so that we can connect immediately.
|
|
radio = adafruit_ble.BLERadio()
|
|
|
|
|
|
def wheel(pos):
|
|
# Input a value 0 to 255 to get a color value.
|
|
# The colours are a transition r - g - b - back to r.
|
|
if pos < 0 or pos > 255:
|
|
return (0, 0, 0)
|
|
if pos < 85:
|
|
return (255 - pos * 3, pos * 3, 0)
|
|
if pos < 170:
|
|
pos -= 85
|
|
return (0, 255 - pos * 3, pos * 3)
|
|
pos -= 170
|
|
return (pos * 3, 0, 255 - pos * 3)
|
|
|
|
|
|
active_connection, pixels = find_connection()
|
|
current_notification = None
|
|
app_icon_file = None
|
|
while True:
|
|
if not active_connection:
|
|
print("Scanning for Magic Light")
|
|
for scan in radio.start_scan(ProvideServicesAdvertisement):
|
|
if MagicLightService in scan.services:
|
|
active_connection = radio.connect(scan)
|
|
try:
|
|
pixels = active_connection[MagicLightService]
|
|
except _bleio.ConnectionError: # pylint: disable=no-member
|
|
print("disconnected")
|
|
continue
|
|
break
|
|
radio.stop_scan()
|
|
|
|
i = 0
|
|
while active_connection.connected:
|
|
pixels[0] = wheel(i % 256)
|
|
i += 1
|
|
|
|
active_connection = None
|