Quick Reference Guide - Adafruit Circuit Playground Bluefruit¶
The adafruit_circuitplayground
library provides a convenient interface to
all the board features. The following tables provide summary information of the
variables and functions in the interface. These can be used in Python scripts
and also tested from the serial command line (REPL).
The library must be accessed (imported) using the following instruction before the following fragments will work:
from adafruit_circuitplayground import cp
This is needed either from scripts or at the serial command line (REPL).
Contents
Raw Sensor Values¶
The library abstracts the sensor inputs into attributes within the cp
module which can be treated as read-only variables within Python code.
Sensor |
Attribute |
Values and Units |
---|---|---|
left ‘A’ pushbutton |
|
True when pressed, else False |
right ‘B’ pushbutton |
|
True when pressed, else False |
slide switch |
|
True is slider is on left, False if on right |
accelerometer |
|
(x,y,z) in meters/sec^2 |
sound-level sensor |
|
(floating-point number, units and range not yet determined) |
light-level sensor |
|
integer, 0-512, units not calibrated |
temperature sensor |
|
floating-point number in degrees C |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
capacitive touch |
|
True when touched, otherwise False, auto-calibrating |
Accelerometer Notes¶
Accelerometer orientation:
X positive when right edge on top (components toward left)
Y positive when USB connector on top
Z positive when component-side up
A typical usage pattern is to assign the signal to three individual variables:
x, y, z = cp.acceleration
Processed Sensor Values¶
The physical sensor data is processed into several derived signals. These are
available as a mix of attributes and function calls within the cp
module.
Signal |
Example Usage |
Notes |
---|---|---|
physical tap |
|
True if a tap has been recorded; resets when the attribute is read. |
physical shaking |
|
True if shaking currently exceeds the default threshold. |
|
|
True if shaking currently exceeds the specified (most sensitive) threshold. |
sound level |
|
True if sound currently exceeds the default threshold. |
|
|
True if sound currently exceeds the specified (more sensitive) threshold. |
Outputs¶
The board has a set of ten RGB LEDS (NeoPixels), a speaker with amplifier, and a single red indicator LED. These are controlled via a combination of attributes and function calls.
Output |
Example Usage |
Notes |
---|---|---|
red indicator LED |
|
True if lit, False if dark |
|
|
turn on indicator LED |
|
|
turn off indicator LED |
ten RGB LEDs |
|
list of ten (red, green, blue) tuples: [(0, 0, 0), (0, 0, 0), (0, 0, 0), … (0, 0, 0)] |
|
|
tuple with color of first LED: (0, 0, 0) |
|
|
set the first LED to pure red |
speaker |
|
start a pure tone playing at a specified frequency (440 Hz is concert ‘A’) |
|
|
stop the sound |
|
|
play a pure tone for the specific frequency (880 Hz) and duration (0.2) before continuing |
|
|
play a WAV file from onboard storage before continuing; example assumes Rooster.wav has been copied to CIRCUITPY |
|
|
play a MP3 file from onboard storage before continuing; example assumes Rooster.mp3 has been copied to CIRCUITPY |
Speaker notes¶
It appears that after start_tone() is invoked, stop_tone() must be called before start_tone() is called again, else it has no effect.
NeoPixel notes¶
Each NeoPixel color tuple has three color channel values. Each channel value is an integer from 0 to 255, where 0 is off and 255 is full intensity.
NeoPixel |
color |
---|---|
(0,0,0) |
black (dark) |
(255,0,0) |
pure red |
(0,255,0) |
pure green |
(0,0,255) |
pure blue |
(0,255,255) |
cyan |
(255,0,255) |
magenta |
(255,255,0) |
yellow |
(255,255,255) |
white |
The ten NeoPixels are arranged like the hours on a clock only with the 12 and 6 positions missing. The following assumes the board is oriented with the USB connector at the ‘up’ 12 o’clock position:
pixel index |
hour |
NeoPixel location |
---|---|---|
0 |
11 |
left of the USB connector viewed with the USB ‘up’ |
1..4 |
10..7 |
counter-clockwise down the left |
5..8 |
5..2 |
counter-clockwise up the right |
9 |
1 |
right of the USB connector |
Analog and Digital Pads¶
The CPB pads can be used to interface to external circuitry and hardware. This requires importing additional modules for access to the hardware:
import board
import digitalio
import analogio
Please see the sample code for examples of this use.
Most CPB pads can be used in either analog or digital modes. But in a confusing twist, the digital names do not correspond to the pad labels.
Pad Name |
Analog Name |
Digital Name |
Other Functions |
---|---|---|---|
A1 |
A1 |
D6 |
|
A2 |
A2 |
D9 |
|
A3 |
A3 |
D10 |
|
SCL A4 |
A4 |
D3 |
SCL clock in I2C mode |
SDA A5 |
A5 |
D2 |
SDA data in I2C mode |
RX A6 |
A6 |
D0 |
RX receive in serial mode |
TX |
D1 |
TX transmit in serial mode |
|
AUDIO |
D12 |
Drives onboard speaker |
|
VOUT |
Voltage Output: USB or battery power |
Reference: https://learn.adafruit.com/adafruit-circuit-playground-bluefruit/pinouts
Further CPB Details¶
The CPB library includes additional functions not listed here to further customize its behavior. For more information, please see the Adafruit Circuit Playground Library - API Reference.
Time¶
The time
module partially implements the standard Python clock functions. It must be imported before use as follows:
import time
-
time.
sleep
(seconds)¶ Pause for the given number of seconds. System activity will continue but your program will wait. Note that this is only suitable for simple scripts, as any polled activity such as reading sensors, updating output, or receiving communications will stop.
-
time.
monotonic
()¶ Return the number of seconds since power was applied as a floating point number. Note that this clock is not cleared by the reset switch. The value initially includes three decimals of precision (milliseconds), but please note that the limited precision of a floating point number means means this resolution is quickly reduced. E.g. CircuitPython evaluates (4096.0 + 0.001 == 4096.0) as True due to limited numerical precision.
-
time.
monotonic_ns
()¶ Return the number of nanoseconds since power was applied as an integer. Note that this clock is not cleared by the reset switch. Since CircuitPython on the CPB support unlimited integer range this value does not lose precision.
General Function Demo Sketch¶
Many of these features are concisely demonstrated in the following general function demo for the Adafruit Circuit Playground Bluefruit board. Bits and pieces are taken from the Adafruit sample code.
Direct download: cpb_demo.py.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # cpb_demo.py
# General function demo for the Adafruit Circuit Playground Bluefruit board.
# The current sensor data is displayed on the serial output stream.
# This program uses only onboard hardware.
# Bits and pieces are taken from the Adafruit sample code.
# Import the board-specific input/output library.
from adafruit_circuitplayground import cp
# Import the standard time module.
import time
# Initialize global variables.
led_index = 0
# Main event loop.
while True:
# Read the accelerometer, which functions primarily as a tilt sensor.
x, y, z = cp.acceleration
# Assemble all the touch True/False values into a list.
touches = [cp.touch_A1, cp.touch_A2, cp.touch_A3, cp.touch_A4, cp.touch_A5, cp.touch_A6, cp.touch_TX]
# Print a one-line status report to the serial console. This uses a Python
# 'formatted string literal' to concisely generate a print string from
# attributes in the environment.
print(f"But: {cp.button_a} {cp.button_b} Sw: {cp.switch} Tilt: {x:6.3f} {y:6.3f} {z:6.3f} Light: {cp.light} Temp: {cp.temperature} degC Touch: {touches}")
# Treat the pushbuttons as a two-tone keyboard.
if cp.button_a:
cp.start_tone(440)
elif cp.button_b:
cp.start_tone(660)
else:
cp.stop_tone()
# Chase the LEDs by lighting one at a time in index order.
cp.pixels[led_index] = (0,0,0) # clear the previous LED to dark
led_index = (led_index + 1) % 10 # choose the next LED pixel index
cp.pixels[led_index] = (0,0,255) # set one blue at a time
# Pause to reduce the rate of output.
time.sleep(0.2)
|