Problem: No lights means the board isn't receiving power.
Solution:
Problem: Lights are working but the device isn't recognized in File Explorer. This indicates you're using a power-only cable.
Solution:
Problem: The CIRCUITPY device is recognized but no MIDI is being sent. This is likely a code issue.
Solution:
# This is the default code for the main SPOKE board. If you have the mini version or an older version with a visible Raspbery Pi Pico board attached, then use the code in the /SPOKE-mini folder on Github
#This code sets up the touch pins as capacitive touch sensors, it also sets up the neopixels to match the touch sensor it is next to. The MIDI-out in this example os polyphonic on/off. Read through the code to see what each section does and edit the parts you need!
import time
import board
import touchio
import digitalio
import usb_midi
import adafruit_midi
from adafruit_midi.note_on import NoteOn
from adafruit_midi.note_off import NoteOff
import neopixel
from rainbowio import colorwheel
# MIDI note numbers corresponding to each touch pin
midi_notes = [98, 96, 93, 91, 88, 86, 84, 81, 79, 76, 74, 72, 69, 67, 64, 62, 60, 57, 55, 52, 50, 48, 45, 43, 40, 38, 36]
# Define the touch pins
touch_pins = [
board.GP1, board.GP2, board.GP3, board.GP4, board.GP5, board.GP6, board.GP7, board.GP8,
board.GP9, board.GP10, board.GP11, board.GP12, board.GP13, board.GP14, board.GP15, board.GP16,
board.GP17, board.GP18, board.GP19, board.GP20, board.GP21, board.GP22, board.GP23, board.GP24,
board.GP25, board.GP28, board.VOLTAGE_MONITOR
]
# Initialize touch sensors
touch_sensors = []
for pin in touch_pins:
try:
touch_sensors.append(touchio.TouchIn(pin))
except ValueError:
print(f"No pulldown resistor found on pin {pin}, skipping...")
# MIDI setup
midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
# State tracking
note_played = [False] * len(touch_pins)
# NeoPixel setup
num_pixels = len(touch_sensors)
pixels = neopixel.NeoPixel(board.GP0, num_pixels, brightness=0.03, auto_write=True)
# Startup animation
def rainbow(speed, duration, step_size=10):
start_time = time.monotonic()
while time.monotonic() - start_time < duration:
for j in range(0, 256, step_size):
for i in range(num_pixels):
pixel_index = (i * 256 // num_pixels + j) % 256
pixels[i] = colorwheel(pixel_index)
pixels.show()
if time.monotonic() - start_time >= duration:
return
time.sleep(speed)
# Fill all pixels blue
def all_blue():
pixels.fill((0, 0, 255))
pixels.show()
# Start
rainbow(0.01, 2, step_size=10)
all_blue()
# Main loop
while True:
for i, touch_sensor in enumerate(touch_sensors):
if touch_sensor.value:
if not note_played[i]:
midi.send(NoteOn(midi_notes[i], 120))
note_played[i] = True
pixels[i] = (255, 0, 255)
else:
if note_played[i]:
midi.send(NoteOff(midi_notes[i], 120))
note_played[i] = False
pixels[i] = (0, 0, 255)
Problem: The device is being recognized as a Raspberry Pi (RPI) device instead of CircuitPython. The firmware needs to be installed.
Solution - Follow these firmware installation steps:
# This is the default code for the main SPOKE board. If you have the mini version or an older version with a visible Raspbery Pi Pico board attached, then use the code in the /SPOKE-mini folder on Github
#This code sets up the touch pins as capacitive touch sensors, it also sets up the neopixels to match the touch sensor it is next to. The MIDI-out in this example os polyphonic on/off. Read through the code to see what each section does and edit the parts you need!
import time
import board
import touchio
import digitalio
import usb_midi
import adafruit_midi
from adafruit_midi.note_on import NoteOn
from adafruit_midi.note_off import NoteOff
import neopixel
from rainbowio import colorwheel
# MIDI note numbers corresponding to each touch pin
midi_notes = [98, 96, 93, 91, 88, 86, 84, 81, 79, 76, 74, 72, 69, 67, 64, 62, 60, 57, 55, 52, 50, 48, 45, 43, 40, 38, 36]
# Define the touch pins
touch_pins = [
board.GP1, board.GP2, board.GP3, board.GP4, board.GP5, board.GP6, board.GP7, board.GP8,
board.GP9, board.GP10, board.GP11, board.GP12, board.GP13, board.GP14, board.GP15, board.GP16,
board.GP17, board.GP18, board.GP19, board.GP20, board.GP21, board.GP22, board.GP23, board.GP24,
board.GP25, board.GP28, board.VOLTAGE_MONITOR
]
# Initialize touch sensors
touch_sensors = []
for pin in touch_pins:
try:
touch_sensors.append(touchio.TouchIn(pin))
except ValueError:
print(f"No pulldown resistor found on pin {pin}, skipping...")
# MIDI setup
midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
# State tracking
note_played = [False] * len(touch_pins)
# NeoPixel setup
num_pixels = len(touch_sensors)
pixels = neopixel.NeoPixel(board.GP0, num_pixels, brightness=0.03, auto_write=True)
# Startup animation
def rainbow(speed, duration, step_size=10):
start_time = time.monotonic()
while time.monotonic() - start_time < duration:
for j in range(0, 256, step_size):
for i in range(num_pixels):
pixel_index = (i * 256 // num_pixels + j) % 256
pixels[i] = colorwheel(pixel_index)
pixels.show()
if time.monotonic() - start_time >= duration:
return
time.sleep(speed)
# Fill all pixels blue
def all_blue():
pixels.fill((0, 0, 255))
pixels.show()
# Start
rainbow(0.01, 2, step_size=10)
all_blue()
# Main loop
while True:
for i, touch_sensor in enumerate(touch_sensors):
if touch_sensor.value:
if not note_played[i]:
midi.send(NoteOn(midi_notes[i], 120))
note_played[i] = True
pixels[i] = (255, 0, 255)
else:
if note_played[i]:
midi.send(NoteOff(midi_notes[i], 120))
note_played[i] = False
pixels[i] = (0, 0, 255)
Your SPOKE board appears to be functioning correctly. The lights are on and MIDI is being sent properly.
If you're experiencing other issues not covered by this troubleshooting guide, please consult the documentation or contact support.