Я создал двухрежимное устройство Bluetooth, используя BT 121 от Silicon Labs. Устройство реализует SPP по классическому подключению. Имя устройства классического узла - «XYZ Classic». Он также реализует специальный сервис (128-битный UUID) в BLE. Имя устройства узла BLE - «XYZ_BLE». Оба узла имеют одинаковый MAC-адрес.
При сопряжении в настройках «Bluetooth» иногда я вижу «XYZ Classic», а иногда - «XYZ_BLE». Кажется случайным, к какому из них он будет подключаться, но многие устройства Android, которые я тестировал, имеют тенденцию хотеть подключаться к классическому узлу. После сопряжения соединение через классический / SPP ВСЕГДА работает. Однако я могу подключиться к настраиваемой службе только в паре с узлом BLE. В паре с классической версией я могу видеть нестандартные службы BLE, но не свои настраиваемые службы. Обобщить:
Function Classic Pairing BLE Pairing
Spp Works Works
Cust BLE Doesn't Work Works
Когда я выполняю сопряжение в коде (Android), проблема также возникает, несмотря на то, что я ищу устройства с именем «XYZ_BLE», а затем подключаюсь к возвращенному устройству. Я посмотрел, но не вижу способа заставить Android подключиться к узлу BLE.
Единственным обходным решением было изменить прошивку BT 121, чтобы запретить связывание в классическом режиме. Это не идеальное решение, поскольку какие-либо устройства только с Bluetooth Classic не смогут подключиться к моему устройству (на самом деле это может быть не слишком большой проблемой, но у меня есть один планшет, на котором есть только Bluetooth Classic).
Следует отметить, что я использовал «BLE Scanner» из магазина воспроизведения, чтобы убедиться, что моя настраиваемая служба работает / не работает в зависимости от режима сопряжения. Другими словами, это не только мой код. :)
Итак, есть ли у кого-нибудь идеи, как заставить Android подключиться к узлу BLE?