70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
"""
|
|
Demonstration of a Bluefruit BLE Central for Circuit Playground Bluefruit. Connects to the first BLE
|
|
UART peripheral it finds. Sends Bluefruit ColorPackets, read from three accelerometer axis, to the
|
|
peripheral.
|
|
"""
|
|
|
|
import time
|
|
|
|
import board
|
|
import busio
|
|
import digitalio
|
|
import adafruit_lis3dh
|
|
from adafruit_ble import BLERadio
|
|
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
|
|
from adafruit_ble.services.nordic import UARTService
|
|
import neopixel
|
|
|
|
from adafruit_bluefruit_connect.color_packet import ColorPacket
|
|
|
|
|
|
def scale(value):
|
|
"""Scale an value from (acceleration range) to 0-255 (RGB range)"""
|
|
value = abs(value)
|
|
value = max(min(19.6, value), 0)
|
|
return int(value / 19.6 * 255)
|
|
|
|
|
|
i2c = busio.I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)
|
|
int1 = digitalio.DigitalInOut(board.ACCELEROMETER_INTERRUPT)
|
|
accelerometer = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19, int1=int1)
|
|
accelerometer.range = adafruit_lis3dh.RANGE_8_G
|
|
|
|
neopixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=0.1)
|
|
|
|
ble = BLERadio()
|
|
|
|
uart_connection = None
|
|
# See if any existing connections are providing UARTService.
|
|
if ble.connected:
|
|
for connection in ble.connections:
|
|
if UARTService in connection:
|
|
uart_connection = connection
|
|
break
|
|
|
|
while True:
|
|
if not uart_connection:
|
|
print("Scanning...")
|
|
for adv in ble.start_scan(ProvideServicesAdvertisement, timeout=5):
|
|
if UARTService in adv.services:
|
|
print("found a UARTService advertisement")
|
|
uart_connection = ble.connect(adv)
|
|
break
|
|
# Stop scanning whether or not we are connected.
|
|
ble.stop_scan()
|
|
|
|
while uart_connection and uart_connection.connected:
|
|
r, g, b = map(scale, accelerometer.acceleration)
|
|
|
|
color = (r, g, b)
|
|
neopixels.fill(color)
|
|
color_packet = ColorPacket(color)
|
|
try:
|
|
uart_connection[UARTService].write(color_packet.to_bytes())
|
|
except OSError:
|
|
try:
|
|
uart_connection.disconnect()
|
|
except: # pylint: disable=bare-except
|
|
pass
|
|
uart_connection = None
|
|
time.sleep(0.3)
|