Setup Adafruit Feather M0 for CircuitPython
Your Feather M0 should already come with CircuitPython but maybe there's a new version, or you overwrote your board with Arduino code! In that case, see the below for how to reinstall or update CircuitPython. Otherwise you can skip this and go straight to the next page.
CircuitPython Libraries
Install the Adafruit NeoTrellis library for Circuit Python by downloading the latest bundle. Unzip the file and locate the NeoTrellis library. Drop the library into a folder named "lib" on the CIRCUITPY drive.
For non-express boards like the Trinket M0 or Gemma M0, you'll need to manually install the necessary libraries from the bundle:
- adafruit_neotrellis
- adafruit_seesaw
- adafruit_bus_device
Before continuing make sure your board's lib folder or root filesystem has the adafruit_seesaw, adafruit_neotrellis, and adafruit_bus_device files and folders copied over.
Upload The Code
Copy and paste the code below into a new text document (we recommend using Mu as your editor, which is designed for CircuitPython.). Save the file and name it as main.py
Once the files has been uploaded to the drive, the board will automatically reboot and run the code.
NeoTrellis Demo
This is a modified version of the Circuit Python NeoTrellis demo code. On start, the NeoPixels run through a wipe animation. On press down, the buttons will light up white. On release, the NeoPixel will light up in a random color. Press and holding the reset button while pressing any of the elastomer buttons will reset the grid and light up that button in a random color. This makes for a simple color matching game – The point of the game is to match all of the button colors to the first pixel.
# SPDX-FileCopyrightText: 2018 Noe Ruiz for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import time
import random
import board
from board import SCL, SDA
import digitalio
import busio
from adafruit_neotrellis.neotrellis import NeoTrellis
# create the i2c object for the trellis
i2c_bus = busio.I2C(SCL, SDA)
# create the trellis
trellis = NeoTrellis(i2c_bus)
button_pin = board.D6
button = digitalio.DigitalInOut(button_pin)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
# some color definitions
OFF = (0, 0, 0)
RED = (25, 0, 0)
YELLOW = (25, 15, 0)
GREEN = (0, 25, 0)
CYAN = (0, 25, 25)
BLUE = (0, 0, 25)
PURPLE = (18, 0, 25)
WHITE = (127, 127, 127)
PUSH_COLOR = GREEN
ANIM_COLOR = WHITE
COLORS = [RED, YELLOW, GREEN, CYAN, BLUE, PURPLE]
# this will be called when button events are received
def blink(event):
# turn the LED on when a rising edge is detected
if event.edge == NeoTrellis.EDGE_RISING:
if button.value:
trellis.pixels[event.number] = WHITE
else:
for j in range(16):
trellis.pixels[j] = ANIM_COLOR
time.sleep(.05)
trellis.pixels[j] = OFF
time.sleep(.05)
# turn the LED off when a rising edge is detected
elif event.edge == NeoTrellis.EDGE_FALLING:
trellis.pixels[event.number] = random.choice([RED, YELLOW, GREEN, CYAN, BLUE, PURPLE])
for i in range(16):
# activate rising edge events on all keys
trellis.activate_key(i, NeoTrellis.EDGE_RISING)
# activate falling edge events on all keys
trellis.activate_key(i, NeoTrellis.EDGE_FALLING)
# set all keys to trigger the blink callback
trellis.callbacks[i] = blink
# cycle the LEDs on startup
trellis.pixels[i] = ANIM_COLOR
time.sleep(.05)
for i in range(16):
trellis.pixels[i] = OFF
time.sleep(.05)
while True:
# call the sync function call any triggered callbacks
trellis.sync()
# the trellis can only be read every 17 millisecons or so
time.sleep(.02)
Page last edited January 22, 2025
Text editor powered by tinymce.