Настройка автоматического спаривания Bluetooth на Linux
Я хочу использовать любой мобильный телефон для подключения к устройству IoT через Bluetooth Classic с протоколом последовательного порта (SPP). Устройство IoT не имеет экрана и не имеет клавиатуры, и предполагается, что оно автоматически подключается к сети, пока соединительный телефон знает секретный PIN-код (т.е. Я не хочу, чтобы его принудительно вводили в устройство IoT, чтобы каждый раз настраивать сопряжение новый мобильный телефон пытается подключиться).
Это команды, которые я выполнил до сих пор на устройстве IoT:
# Make the device discoverable:
hciconfig hci0 piscan
# Register SPP:
sdptool add --channel=22 SP
# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22
К сожалению, я не смог найти способ настройки PIN-кода, и при попытке подключения к мобильному телефону спариваться не удается. Кроме того, устройство можно обнаружить только на короткий промежуток времени.
Как настроить Bluetooth-стек устройства IoT (с последним Bluez) на автоматическую пару с любым телефоном, который знает данный PIN-код, и как сделать период обнаружения вечным?
Ответы
Ответ 1
Вы можете запустить приложение, которое реализует BlueZ DBus API. Я рекомендую BlueZ >= 5.42.
Используйте интерфейс агента и реализуйте свой собственный PIN-код.
После регистрации вашего агента bluez автоматически вызовет вызов и использует ваш собственный агент при запросе спаривания.
Кроме того, вы можете установить для DiscoverableTimeout значение от 0 до DBus с интерфейсом org.bluez.Adapter1.
"Значение нуля означает, что таймаут отключен, и он останется в доступный/ограниченный режим навсегда".
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt (dbus-адаптер object doc)
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/agent-api.txt (dbus agent object doc)
https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/5.44/test/simple-agent (образец)
http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/ (читайте внизу)