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)