Я хочу использовать любой мобильный телефон для подключения к устройству IoT через Bluetooth Classic с протоколом последовательного порта (SPP). Устройство IoT не имеет экрана и не имеет клавиатуры, и предполагается, что он автоматически подключается к подключению, если соединительный телефон знает секретный PIN-код (т. Е. Я не хочу, чтобы меня заставляли ssh в устройстве IoT настраивать сопряжение каждый раз новый мобильный телефон пытается подключиться).Настройка автоматического спаривания Bluetooth на Linux
Это команды, которые я до сих пор работают на устройстве IoT:
# Make the device discoverable:
hciconfig hci0 piscan
# Register SPP:
sdptool add --channel=22 SP
# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22
К сожалению, я не мог найти способ, чтобы создать ПИН-код, и спаривание происходит сбой при попытке подключения с мобильным телефоном. Кроме того, устройство можно обнаружить только на короткий промежуток времени.
Как настроить Bluetooth-стек устройства IoT (запуск последнего Bluez) для автоматической пары с любым телефоном, который знает данный PIN-код, и как сделать период обнаружения вечным?
Вы можете использовать утилиту «bluetoothctl», который поставляется с Bluez библиотеки , Необходимо активировать агент для аутентификации. Поскольку ваша система безголовая, использование может использовать «NoInputNoOutput». Это позволяет избежать взаимодействия ключа доступа для аутентификации (bluetoothctl agen NoInputNoOutput). Но если вы хотите принять все соединение, используйте интерфейс Dbus «org.bluez.AgentManager1», чтобы зарегистрировать собственный агент с минимальным методом «RequestAuthorization», реализованный в «org.bluez.Agent1» –
Но если я запустил bluetoothctl и установил " агент NoInputNoOutput ", он все равно спросит меня, следует ли принимать соединение. Вы говорите мне, что у него другое поведение, если оно установлено в пакетном режиме? Что касается создания моей собственной реализации AgentManager1, это похоже на переосмысление колеса. Разве Bluez не поставлялся с менеджером агента? –
Да, он по-прежнему просит подтверждения (да/нет). Но вы можете ответить на него «Да», написав собственный простой агент, используя интерфейс Agent1. Да, BlueZ предоставляет менеджеру агента «DisplayOnly», «DisplayYesNo», «KeyboardOnly», «NoInputNoOutput» и «KeyboardDisplay» эти возможности. Поскольку вам нужен специальный случай для принятия без какого-либо вмешательства, вы можете добиться этого с помощью своего собственного агента1, отправляющего «Да», –