Skip to content

Commit a223c5c

Browse files
authored
Merge pull request #16 from spridget/patch-3
Create ble_midi_simple_scanner.py
2 parents 3fd0c61 + bd50143 commit a223c5c

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# SPDX-FileCopyrightText: 2025 spridget
2+
# SPDX-License-Identifier: MIT
3+
4+
"""
5+
This example acts as a BLE scanner for MIDI devices.
6+
Specifically, it connects and pairs with a device running ble_midi_simple
7+
"""
8+
9+
import time
10+
11+
import adafruit_ble
12+
import adafruit_midi
13+
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
14+
15+
# These import auto-register the message type with the MIDI machinery.
16+
from adafruit_midi.control_change import ControlChange
17+
from adafruit_midi.midi_message import MIDIUnknownEvent
18+
from adafruit_midi.note_off import NoteOff
19+
from adafruit_midi.note_on import NoteOn
20+
from adafruit_midi.pitch_bend import PitchBend
21+
22+
import adafruit_ble_midi
23+
from adafruit_ble_midi import MIDIService
24+
25+
# Use default HID descriptor
26+
midi_service = adafruit_ble_midi.MIDIService()
27+
28+
ble = adafruit_ble.BLERadio()
29+
if ble.connected:
30+
for c in ble.connections:
31+
c.disconnect()
32+
33+
midi = adafruit_midi.MIDI(midi_out=midi_service, midi_in=midi_service, out_channel=0)
34+
35+
while True:
36+
print("Waiting for connection to a MIDI device")
37+
for advertisement in ble.start_scan(ProvideServicesAdvertisement, timeout=60):
38+
if MIDIService not in advertisement.services:
39+
continue
40+
ble.connect(advertisement)
41+
break
42+
43+
if ble.connections:
44+
for connection in ble.connections:
45+
if connection.connected and not connection.paired:
46+
print("Connected; Pairing with the MIDI device")
47+
connection.pair()
48+
49+
if connection.connected and connection.paired:
50+
print("Paired")
51+
midi_service = connection[MIDIService]
52+
midi = adafruit_midi.MIDI(midi_out=midi_service, midi_in=midi_service)
53+
54+
while ble.connected:
55+
midi_in = midi.receive()
56+
while midi_in:
57+
if not isinstance(midi_in, MIDIUnknownEvent):
58+
print(time.monotonic(), midi_in)
59+
midi_in = midi.receive()
60+
print("Disconnected")
61+
print()

0 commit comments

Comments
 (0)