Чи можливий зв’язок Bluetooth без сполучення?


36

Я працюю над пристроєм, який може бездротово активувати систему «миттєво». Перше, що прийшло в голову, - це використовувати технологію RFID, яка має перевагу миттєвого та дешевого спілкування. Однак мені цікаво використовувати можливості Bluetooth свого телефону для виконання цього завдання.

Отже, моє запитання полягає у використанні зв'язку Bluetooth, чи існує спосіб спілкування без сполучення? Іншими словами, на дуже спрощеному рівні, припустимо, що мій приймач Bluetooth очікує код "abc123". Пристрій Bluetooth, як і телефон, запрограмований постійно передавати цей код. Після отримання коду система починає робити все, що передбачається, колись буде наданий доступ. Така система усунула б бар'єр для парування, звичайно, ціною безпеки.

То чи є ця концепція можливою? Я мало розумію протоколи зв’язків Bluetooth на дуже технічному рівні, але якщо хтось може мені привести, я можу почати вчитися з цього моменту. Не вважайте моє обмежене розуміння обмеженням.


Існує режим Bluetooth, який робить саме це, але я не знаю, як це називається. Він використовувався для надсилання місцевої реклами на мобільні телефони.
джиппі

2
Існують різні модулі 433 МГц, які "миттєво" передаватимуть сигнал увімкнення / вимкнення; часто використовується в відкриваючих двері гаражних дверей. Вони також дешеві і прості в експлуатації, хоча вони не забезпечують притаманну безпеку.
pjc50

Відповіді:


25

Так, цілком можливо. Я коментував це раніше і з того часу вивчив це далі. Ви можете змусити пристрій Bluetooth надсилати сигнал активації через дружнє ім’я .

Дружнє ім’я - це читабельне для людини ім'я, яке відображається у списку під час пошуку Bluetooth-пристрою, з яким можна з'єднатися. Швидкість, з якою це активується, залежить від того, наскільки швидко приймаючий пристрій опитує дружні імена. Ви не згадали, який тип приймаючого пристрою ви використовуєте, але я знайшов цей PDF (Ст.35), який детально описує процес оновлення дружніх імен пристроїв Bluetooth, що знаходяться в межах діапазону.

Ви можете опитувати дружні імена так часто, як вам потрібно. Якщо ваш запускаючий пристрій змінить дружнє ім’я на код активації abc123, то приймаючий пристрій зможе побачити це ім’я без створення пари та активувати будь-яку задачу, яку ви намагаєтеся виконати. Це також дозволяє мати безліч кодів активації, я думаю, ви можете отримати до 248 байт за дружнє ім’я Bluetooth.

Ви також можете навмисно відкрити себе в Bluejacking . Я не знайомий з цим, але якщо безпека не є проблемою, вона може працювати.


2
Ідеально, це здається найбільш перспективним. Мені подобається простота методу дружнього імені, і Bluejacking також здається чудовим кандидатом.
capcom

12

Коротка відповідь - так, можна використовувати Bluetooth без сполучення. Однак це все ще буде завжди точковим зв’язком. Існують також потенційні проблеми із невстановленням парування (в основному відсутність безпеки та відсутність належної підтримки для цього режиму роботи). Чи можна це зробити, залежить від обладнання Bluetooth вашого приймача. Я припускаю, що ви використовуєте «стандартний» Bluetooth замість низько енергетичного Bluetooth (який зовсім інший і не особливо добре підтримується в мобільних телефонах). Якщо ви використовуєте малоенергетичний, то ваш передавач буде пристроєм з низькою енергією, і ви приймач буде те, що слухає повідомлення. Я цього не використовував, тому не можу надати вам жодної інформації щодо цього, тому буду дотримуватися "звичайного" Bluetooth.

Як я бачу, необхідно вирішити два питання:

  1. Вимкнення з'єднання контактів

  2. Автоматичне ініціювання з'єднання

Я спочатку висвітлю номер 2, коли у мене складеться враження, що саме це вас цікавить (вибачте, якщо я читаю це неправильно). Для того, щоб зробити це з телефону чи іншого "головного" пристрою, йому доведеться постійно шукати віддалені пристрої Bluetooth. Коли він розпізнає той, що застосований, він автоматично підключиться до нього та надішле ті чи інші дані, які б ініціювали будь-які дії, які були потрібні. Інші згадали про використання цього способу Bluetooth-імені, і це, безумовно, один із способів. Мій досвід друкуючих імен Bluetooth (особливо, але не виключно зі стеком Microsoft Bluetooth) полягає в тому, що вони не є таким надійним методом сканування. Можливо, ви б набагато краще використали клас пристроїв Bluetooth, яка транслюється одночасно з унікальною адресою пристрою. Цей клас пристроїв має велику кількість попередньо заданих записів для таких речей, як мобільні телефони, ноутбуки, настільні комп'ютери тощо. Якщо ви користуєтесь одним із нестандартних класів пристроїв (наприклад, 00:00:00), миттєво зможете щоб відфільтрувати переважну більшість пристроїв Bluetooth. Потім можна підключитися до пристрою, що залишився, і зробити якесь повідомлення про підтвердження запиту, щоб ініціювати свою дію. Якщо ви зробите це належним чином незрозумілим (або перевірте дружнє ім’я в якості другого розгляду), воно має неявно відфільтрувати всі інші неправильні пристрої.


Щодо числа 1, з'єднання контактів не є особливо логічним, якщо ви створюєте тимчасові з'єднання, але це все ж може бути найкращим способом досягти того, що ви хочете зробити. Якщо ви хочете уникнути з’єднання штифтів, його можна вимкнути та встановити непорядне з'єднання. Як це зробити, залежить від реалізації Bluetooth-приймача, але ось кілька прикладів:

  1. Bluegiga WT12: використовуй команду SET BT AUTH *
  2. Національний напівпровідник LMX9838: використовуйте команду GAP_SET_SECURITY_MODE в режимі безпеки 1 (без сполучення)

тощо.

Підключення до пристрою може бути здійснено без пари. Якщо пристрій, який ініціює з'єднання, такий самий, як у приймача, це дуже просто. Якщо ви використовуєте комп'ютер під керуванням Windows, ви можете пройти кропіткий процес створення нового підключення і вибрати "не використовувати штифт", хоча Windows, ймовірно, все-таки попросить вас ввести PIN-код при підключенні (0000 зазвичай працює, але це дуже лускато). Якщо ви використовуєте python з pybluez, це дуже просто:

import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))

Якщо ви хочете підключитися з мобільного телефону, це стає набагато складніше. Здається, SDK для Android не дуже підтримує парні з'єднання:

Поточний Android Bluetooth API вимагає, щоб пристрої були з'єднані до того, як можна встановити з'єднання RFCOMM. (З'єднання пари виконується автоматично, коли ви ініціюєте зашифроване з'єднання з інтерфейсами API Bluetooth.)

http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Існують способи цього, але вони дуже складні і не дуже підтримувані. Якщо ви використовуєте iPhone, то Bluetooth-з'єднання - це зовсім інша банка глистів (ліцензування тощо), тому я покину це.


Сказавши все це, майже кожен API, який я коли-небудь переглядав, дозволяє поєднувати тавідключення, яке потрібно здійснити (за винятком винятків python / pybluez, але це лише обгортка навколо стека Microsoft в Windows, тому ви завжди можете безпосередньо викликати функцію низького рівня). Отже, коли ви помітили пристрій із правильним класом пристроїв, чому б не просто автоматично з'єднати пару (із заздалегідь визначеним номером шпильки для сполучення), встановити з'єднання, надіслати потрібні дані, від’єднати та відключити. Ніщо з цього не потребує втручання користувача, і поки ви цього не робите тисячі разів (що потенційно може спричинити проблеми з зносом EEPROM), це не повинно створювати вам ніяких проблем. Це також заощадить вам багато клопоту, намагаючись змусити різні API працювати добре з тим, що сприймається як нестандартний метод використання Bluetooth.


1
Дякую за чудову відповідь! Зараз мені багато чого слід розглянути.
capcom

10

Це може бути досягнуто за допомогою технології в межах бренду Bluetooth під назвою Bluetooth Smart (або Bluetooth Low Energy / Bluetooth 4.0), а також залежно від вашого телефону.

Основна перевага з низьким рівнем енергії над звичайним Bluetooth полягає в тому, що він споживає набагато менше енергії, а очікуваний термін експлуатації пристрою може становити роки залежно від інтервалу підключення та кількості реклами на монетній батареї.

Щоб вирішити цю проблему, ви можете поставити код під питання всередині рекламних даних чіпа. ( Основна специфікація Bluetooth 4.0, том 3, частина C, розділ 11.1.4 або 11.1.10)

Є три основні виробники мікросхем, які виробляють мікросхеми низької енергії (TI, CSR та Nordic Semiconductor)

У Nordic є мікросхем підключення під назвою nRF8001 (мікросхем підключення, повністю кваліфікований пристрій) та SoC nRF51822 . Перевага використання nRF8001 полягає в тому, що ви можете використовувати обраний вами процесор, і не потрібно турбуватися щодо специфікації Bluetooth, оскільки цим керує мікросхема. Перевага nRF51822 полягає в тому, що це система на мікросхемі і знижує BOM, вона працює під управлінням Cortex-M0 і повинна бути повністю кваліфікована при випуску.

TI мають мікросхему 8051 SoC cc2540, а CSR мають мікросхему SoC CSR µEnergy

Це все зводиться до ваших потреб та переваг у процесорі та функціональності / вартості



1

Результатом успішного сполучення є ключ посилання, секрет, яким поділяються пристрої, що працюють в парі, і дозволяють їм спілкуватися.

Якщо в системі можна встановити клавішу зв'язку, то так, спарювання не потрібно. Просто встановіть однаковий ключ посилання на обох пристроях. Після цього з'єднання можна буде успішно відімкнути, як ніби два пристрої спарені.

Наприклад, в Linux після спарювання infoфайл зберігається для кожного парного пристрою під / var / lib / bluetooth / local-device-address / remote-device-address /

Після Generalрозділу міститься наступне: [LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0

Це можна встановити безпосередньо без пари. Якщо те ж саме записано на віддаленому пристрої. Прилади спарені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.