lathoub / Arduino-BLE-MIDI

MIDI over Bluetooth Low Energy (BLE-MIDI) 1.0 for Arduino
MIT License
226 stars 33 forks source link

BLE MIDI Client, get servers list #69

Open jhsa opened 2 years ago

jhsa commented 2 years ago

Hi, I have been playing with the BLE MIDI Client example on an ESP32, but can't find a way of scanning available BLE MIDI servers and connecting to one of them. Is that even possible? Thanks.

MicroMidi commented 1 year ago

It looks that the author of the underlying NimBLE-library added a callback for scanned devices: https://github.com/h2zero/NimBLE-Arduino/pull/439 Maybe this could be a good starting point for implementing the requested functionality?

jhsa commented 1 year ago

It looks that the author of the underlying NimBLE-library added a callback for scanned devices: h2zero/NimBLE-Arduino#439 Maybe this could be a good starting point for implementing the requested functionality?

Thank you. Now I need to learn how to use it. I am a beginner as far as Arduino programming is concerned. What I would like to do is to press a button to discover and connect to a discovered device, and then always connect to that device, until I press the button at power ON to connect to another discovered device. So basically just finding a device and saving it somewhere.

MicroMidi commented 1 year ago

I think that the new callback method for scanned devices will really simplify your project, as this callback invokes a piece of code (the respective callback method) when a BLE-MIDI service was found. In this callback method you can implement what should happen when a BLE-MIDI service was found. An alternative might be to connect to the first BLE-MIDI-service that is found, determine the name of the device and disconnect again when this is not the device of your choice. But this approach will only work if the next connection will target the next available BLE-MIDI device. Just give it a try ...

If the preferred BLE-MIDI device to be connected to should be kept even when the Arduino microcontroller is powered off than you need a special area where you store the device data persistently.

Some challenges are about to be mastered – but this is a lot of fun😉

jhsa commented 1 year ago

I think that is what that web server code for connecting to a WiFi hotspot and then save it does. I think it saves in SPIFFS. This library could eventually do the same. The problem would be conflicts when using both of them? The other code also allows to flash the board over the air, which is cool. I tend to always use that method on the devices I build for myself. But as I said, I am a total beginner. :)

RobertoHE commented 1 year ago

Client BLE needs to use the same method that the other transport layer (same functions names, same arguments in functions, etc.) to be compatible with the BLE Midi library. Because of this, it's not possible to add a new function adding a scanning result method.

On the other way, a develop branch exists that allow prints by console each midi server found https://github.com/RobertoHE/Arduino-BLE-MIDI/tree/CustomSettings. This branch is actually under merge request to the main branch adding some configurable settings to MIDI BLE Client. You can add #define MIDIBLECLIENTVERBOSE before #include lib for enabling verbose of Client BLE. With this verbose, ESP32 prints by console every MIDI server that is finding in each scanner. It does not allow the use of the midi server found in the code, but you can have a reference for help.