Simple test
Ensure your device works with this simple test.
examples/ble_midi_simpletest.py
1# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
2# SPDX-License-Identifier: MIT
3
4"""
5This example sends MIDI out. It sends NoteOn and then NoteOff with a random pitch bend.
6"""
7
8import random
9import time
10
11import adafruit_ble
12import adafruit_midi
13from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
14from adafruit_midi.control_change import ControlChange
15from adafruit_midi.note_off import NoteOff
16from adafruit_midi.note_on import NoteOn
17from adafruit_midi.pitch_bend import PitchBend
18
19import adafruit_ble_midi
20
21# Use default HID descriptor
22midi_service = adafruit_ble_midi.MIDIService()
23advertisement = ProvideServicesAdvertisement(midi_service)
24# advertisement.appearance = 961
25
26ble = adafruit_ble.BLERadio()
27if ble.connected:
28 for c in ble.connections:
29 c.disconnect()
30
31midi = adafruit_midi.MIDI(midi_out=midi_service, out_channel=0)
32
33print("advertising")
34ble.start_advertising(advertisement)
35
36while True:
37 print("Waiting for connection")
38 while not ble.connected:
39 pass
40 print("Connected; waiting for pairing")
41 for connection in ble.connections:
42 while not connection.paired:
43 if not connection.connected:
44 break
45 if connection.paired:
46 print("Paired; sending MIDI messages")
47 # Sleep briefly so client can get ready and send setup
48 # writes to the MIDIService. 0.5secs was insufficient.
49 time.sleep(3.0)
50 # Send one unique NoteOn/Off at the beginning to check that the
51 # delay is sufficient.
52 midi.send(NoteOn(20, 99))
53 midi.send(NoteOff(20, 99))
54 while ble.connected:
55 midi.send(NoteOn(44, 120)) # G sharp 2nd octave
56 time.sleep(0.25)
57 a_pitch_bend = PitchBend(random.randint(0, 16383))
58 midi.send(a_pitch_bend)
59 time.sleep(0.25)
60 # note how a list of messages can be used
61 midi.send([NoteOff("G#2", 120), ControlChange(3, 44)])
62 time.sleep(0.5)
63 print("Disconnected")
64 print()
65 ble.start_advertising(advertisement)