Короткий ответ - да, можно использовать Bluetooth без сопряжения. Тем не менее, он по-прежнему всегда будет связью точка-точка. Существуют также потенциальные проблемы, связанные с отсутствием сопряжения (в основном из-за недостаточной безопасности и недостаточной поддержки этого режима работы). Может ли это быть сделано, зависит от аппаратной части Bluetooth вашего ресивера. Я предполагаю, что вы используете «стандартный» Bluetooth вместо Bluetooth с низким энергопотреблением (который полностью отличается и не особенно хорошо поддерживается в мобильных телефонах). Если вы используете низкое энергопотребление, то ваш передатчик будет устройством с низким энергопотреблением, а ваш приемник будет тем, кто слушает сообщения. Я не использовал это, поэтому я не могу дать вам никакой информации по этому поводу, поэтому я буду придерживаться «нормального» Bluetooth.
На мой взгляд, нужно преодолеть две проблемы:
Отключение сопряжения контактов
Автоматическое инициирование соединения
Сначала я расскажу о номере 2, так как у меня сложилось впечатление, что это то, что вас действительно интересует (извиняюсь, если я читаю это неправильно). Чтобы сделать это с телефона или другого «главного» устройства, он должен будет постоянно искать удаленные устройства Bluetooth. Когда он распознал тот, который был применим, он автоматически подключался к нему и отправлял те или иные данные, которые могли бы инициировать любые необходимые действия. Другие упоминали об использовании дружественного имени Bluetooth для этого процесса, и это, безусловно, один из способов сделать это. Мой опыт использования дружественных имен Bluetooth (особенно, но не исключительно со стеком Microsoft Bluetooth) заключается в том, что они не настолько надежны, как метод сканирования. Возможно, вам лучше использовать класс устройств Bluetooth, который транслируется одновременно с уникальным адресом устройства. Этот класс устройств имеет большое количество предварительно определенных записей для таких вещей, как мобильные телефоны, ноутбуки, настольные компьютеры и т. Д. И т. Д. Если вы используете один из нестандартных классов устройств (например, 00:00:00), вы сразу сможете отфильтровать подавляющее большинство устройств Bluetooth. После этого вы можете подключиться к оставшемуся устройству и выполнить какое-либо соединение для подтверждения запроса, чтобы инициировать ваше действие. Если вы сделаете это соответствующим образом неясным (или проверите дружественное имя в качестве второго соображения), оно должно неявно отфильтровывать все оставшиеся неправильные устройства.
Что касается номера 1, соединение пар не особенно логично, если вы создаете временные соединения, но все же может быть лучшим способом достижения того, что вы хотите сделать. Если вы хотите избежать сопряжения контактов, его можно отключить и установить непарное соединение. Как это сделать, зависит от реализации приемника Bluetooth, но вот несколько примеров:
- Bluegiga WT12: используйте команду SET BT AUTH *
- National Semiconductor LMX9838: используйте команду GAP_SET_SECURITY_MODE с режимом безопасности 1 (без сопряжения)
и т.п.
Подключение к устройству можно выполнить без сопряжения. Если устройство, инициирующее соединение, совпадает с приемником, это очень просто. Если вы используете ПК с Windows, вы можете выполнить трудоемкий процесс создания нового соединения и выбрать «не использовать пин-код», хотя Windows, вероятно, по-прежнему будет запрашивать пин-код при подключении (обычно работает 0000, но это очень облезло). Если вы используете Python с Pybluez, это очень просто:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
Однако, если вы хотите подключиться с мобильного телефона, все становится намного сложнее. Android SDK не поддерживает непарные соединения:
Текущие API-интерфейсы Bluetooth для Android требуют, чтобы устройства были сопряжены до установления соединения RFCOMM. (Сопряжение выполняется автоматически при инициации зашифрованного соединения с API-интерфейсами Bluetooth.)
(с http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Есть способы обойти это, но они очень сложны и плохо поддерживаются. Если вы используете iPhone, то Bluetooth-соединение - это совершенно иная червь (лицензирование и т. Д.), Поэтому я оставлю это сейчас.
Сказав все это, почти каждый API, на который я когда-либо смотрел, позволяет создавать пары иотмена пары (за исключением python / pybluez, но это всего лишь оболочка для стека Microsoft в Windows, поэтому вы всегда можете вызвать функцию низкого уровня напрямую). Итак, когда вы обнаружили устройство с правильным классом устройств, почему бы просто не выполнить автоматическое сопряжение (с предварительно определенным номером контакта), выполнить подключение, отправить необходимые данные, отключить и затем разорвать соединение. Ничто из этого не потребует вмешательства пользователя, и, если вы не делаете это тысячи раз (что может вызвать проблемы с износом EEPROM), это не должно вызывать у вас никаких проблем. Это также избавит вас от хлопот, связанных с попыткой заставить различные API работать хорошо с тем, что воспринимается как нестандартный метод использования Bluetooth.