Hi everyone,
I’m encountering a persistent issue trying to get my Squarp Hapax to send MIDI data (Notes, Clock, Transport) via its USB Host port to an Adafruit Metro M7 running CircuitPython. I’m hoping someone might have encountered this or has some insights.
Setup:
- Host: Squarp Hapax (HapaxOS 2.12)
- Device: Adafruit Metro M7 (running CircuitPython 9.2.7 or 10.0.0-alpha.2)
- Connection: Hapax USB Host Port ↔ Metro M7 USB Device Port (using various USB cables)
- CircuitPython Code: Using
adafruit_midi
library, simplified down to a basic MIDI input test that listens on all channels and blinks the onboard NeoPixel upon receiving NoteOn or Clock messages. (Code similar to the basic examples).usb_midi.enable()
is called inboot.py
.
The Problem:
- The Hapax recognizes that a USB device is connected (displays “usb host attached”).
- The Metro M7 boots correctly and the CircuitPython code successfully initializes the
adafruit_midi.MIDI
object (confirmed via LED feedback and serial console when connected to a PC). - However, absolutely no MIDI data (Notes, Clock, Start/Stop) seems to be received by the Metro M7 from the Hapax. The NeoPixel doesn’t blink for incoming messages, and serial debugging (when possible due to memory constraints) shows no incoming
NoteOn
orTimingClock
objects from the Hapax.
What Works / Troubleshooting Done:
- Metro M7 + PC: The Metro M7 works perfectly as a USB MIDI device when connected to a computer. Using Web MIDI testers or DAWs, it receives Notes and Clock signals correctly, and the test code responds as expected. This confirms the M7’s USB MIDI functionality and the CircuitPython code are fundamentally working.
- Hapax + Raspberry Pi Pico: The Hapax works perfectly sending MIDI Notes, Clock, and Transport via the same USB Host port to a Raspberry Pi Pico running similar CircuitPython code. This confirms the Hapax configuration (MIDI output enabled for USB Host, Clock/Transport send enabled) is correct.
- External Power for M7: Tried powering the Metro M7 via its DC barrel jack with an appropriate external power supply – issue persists.
- Different USB Cables: Tried multiple different USB cables – issue persists.
- CircuitPython Versions: Tested with both stable 9.2.7 and 10.0.0-alpha.2 versions of CircuitPython – issue persists.
- Simplified Code: Reduced the CircuitPython code to the bare minimum (MIDI init, loop with
midi.receive()
, LED blink) – issue persists. - Memory: Ensured no
MemoryError
is occurring by removing all non-essential code (like LCD drivers previously attempted). Sufficient memory is reported bygc.mem_free()
.
Conclusion & Question:
It seems there’s a specific USB communication incompatibility between the Hapax (as Host) and the Metro M7/CircuitPython (as Device), happening after the initial USB device detection. The MIDI layer doesn’t seem to establish correctly between these two specific devices, even though both work fine with other partners.
Has anyone else experienced similar USB MIDI host/device communication problems specifically between a Squarp Hapax and some other device? Are there any known workarounds, specific CircuitPython versions, or Hapax settings that might help resolve this?
Thanks in advance for any suggestions!