Uuid bluetooth как узнать
Перейти к содержимому

Uuid bluetooth как узнать

  • автор:

Как найти UUID последовательного порта устройства Bluetooth?

Я хочу получать данные с устройства bluetooth последовательного порта на Android-телефон. Но я не знаю UUID этого устройства, как найти UUID этого устройства?

7 ответов

Расширение того, что pwc говорит о том, что UUID равен 0x1101, это 16-разрядная версия UUID, насколько я могу судить. Я не мог понять, как создать экземпляр UUID с 16-битным UUID. Но поскольку этот пост говорит, что вы можете это сделать:

private static final UUID MY_UUID = UUID.fromString(«00001101-0000-1000-8000-00805f9b34fb»);

Это помогло мне подключиться к последовательному модулю bluetooth, который я купил у Deal Extreme

Русские Блоги

Ямы и хитрости в Android ble (Bluetooth Low Energy)

1. Как определить uuid службы в ble?
  • В стандартной спецификации Bluetooth определено множество служебных uuid. Если они конфликтуют, это вызовет множество неожиданных проблем.
  • Формат uuid службы Bluetooth следующий
    UUID.fromString("00001234-0000-1000-8000-00805f9b34fb")
  • Этот принцип можно просто перенять в Android: 1. Используйте эту строку [00002903-0000-1000-8000-00805f9b34fb], чтобы изменить 5-8-е цифры, а остальные числа оставить неизменными. такие как
    UUID.fromString("00007777-0000-1000-8000-00805f9b34fb")
    UUID.fromString("00009999-0000-1000-8000-00805f9b34fb")
2. Устройство в центре экрана начинает сканирование и устанавливает соответствующий сервисный идентификатор.

new ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString("00007777-0000-1000-8000-00805f9b34fb");

3. Периферийное устройство может установить магическое число AdvertiseData [ManufacturerId и ManufacturerSpecificData] во время трансляции. Таким образом, даже если определенный uuid сервиса конфликтует с другими, вы можете отфильтровать магическое число в центре, чтобы найти периферийное оборудование, которое соответствует вашим потребностям.
  • Периферийное построение AdvertiseData
  • Центральная обработка AdvertiseData

В настоящее время вы можете сопоставить периферийные устройства, которые вы установили, в соответствии с данными производителя.

4. Когда центр и периферия мира действительно соединятся? (Вы можете начать передачу данных)

В BluetoothGattCallback есть трехэтапные обратные вызовы по этой проблеме.
1、 public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState)

Это первый обратный вызов, запускаемый после соединения центра и периферии. newstate совпадает с BluetoothProfile. STATE_CONNECTED только означает, что центральное устройство подключено, на этот раз вам нужно вызвать BluetoothGatt, чтобы обнаружить службу.

Обратите внимание на case1, когда новое состояние — BluetoothProfile.STATE_DISCONNECTED, вы должны отключить BluetoothGatt, потому что каждый раз, когда вы звоните mBluetoothGatt = device.connectGatt(SpeakerApp.appContext, false, mGattCallBack); Будет генерировать новые объекты вместо активного закрытия старых

Обратите внимание на проблему case2, 133, iPhone и некоторых телефонов Android в качестве боковых ответвлений, начальное соединение Bluetooth — 133, в этом случае вам следует немедленно повторно просканировать соединение.133 Вопрос Ссылка

2、 public void onServicesDiscovered(BluetoothGatt gatt, int status)
Обратный вызов, полученный после выполнения mBluetoothGatt.discoverServices (), если статус GATT_SUCCESS, вы можете получить службу и дескриптор ветви ble, которая инициирует широковещательную рассылку, и установить широковещательную рассылку, чтобы включить

3、 public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status)
Только на этом шаге status == BluetoothGatt.GATT_SUCCESS данные могут быть действительно переданы. Если данные передаются на первом или втором шаге, это вызовет неизвестные ошибки или ошибки нулевого указателя в некоторых конкретных случаях.

Таким образом, после того, как центральное устройство начнет подключаться к периферийному, вы можете установить период тайм-аута. По истечении этого периода, если вы все еще не можете перезвонить onDescriptorWrite и получить BluetoothGatt.GATT_SUCCESS, процесс завершится ошибкой. Вы можете повторно подключиться в соответствии с реальной ситуацией или Подсказка ошибка

Пять, проблема mtu-20 байт

Источник mtu20: GATT основан на протоколе ATT, и его основная спецификация определяет MTU по умолчанию для ATT как 23 байта. После удаления одного байта кода операции ATT и 2 байтов дескриптора ATT оставшиеся 20 слов Фестиваль для ГАТТ

Что делать, если вы хотите передать данные размером более 20 байт?

1. Системный MTU может поддерживать модификацию до 512 байт для завершения передачи больших объемов данных. Однако из-за необходимости изменить центральную и боковые ветви это вызовет большие ограничения и низкоуровневые модификации, а также вызовет ошибки, такие как некоторые устройства, которые не вступают в силу при первой модификации, и что другое устройство может быть изменено только один раз в соединении. Очень нежелательно и настоятельно не рекомендуется.

2. Передача субподряда. Наиболее предпочтительная схема разработки протокола передачи субподряда самостоятельно. Следует отметить, что после субподряда требуется интервал для записи данных между каждым пакетом, например 100 мс.

6. Выполните проверку перед записью данных, чтобы определить, соответствует ли полученная характеристика правилам чтения, передачи или необходимости ответа.
Семь, проблема потери пакетов

После выполнения 5 и 6 он по-прежнему будет отображаться на некоторых устройствах. По системным причинам первые данные, отправленные ble, потеряли пакеты. Пожалуйста, примите особые меры.

8. Проанализируйте данные.

После того, как центральный конечный mtu передан в субподряд и отправлен на периферию, периферия может быть
public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId, BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) Получать данные и восстанавливать исходные данные

После того, как периферийный конец mtu передан на субподряд и отправлен на центральный конец, центральный конец может быть public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) Получать данные и восстанавливать исходные данные

Обратите внимание, что для некоторых устройств Bluetooth всегда есть какие-то особые состояния, и правильность полученных данных необходимо проверять.

Девять, другая яма

PROPERTY_WRITE_NO_RESPONSE в ble нельзя доверять. Некоторые версии Google не считывали значение этого атрибута, а устанавливали его напрямую так, чтобы он требовал ответа. В безопасном случае лучше всего настроить его на обязательный ответ

Если в проекте есть несколько соединений blu или ble + classic Bluetooth, в некоторых критических ситуациях (например, перезапуск устройства, сбой и перезапуск) может потребоваться подключение bluetooth для удаления устройства, созданного b ble (или b classic Bluetooth). В противном случае это приведет к сбою подключения.

Android – Получите Bluetooth UUID для этого устройства

Я просматривал Stack и Интернет в поисках простого решения, позволяющего получить UUID устройства, которое я сейчас использую. я споткнулся такие сообщения но ни один из них, казалось, не помог мне.

Док говорит мне об этом getUuids() функция, но при просмотре документа для Андроид Bluetooth в итоге у меня Bluetooth адаптер но мне нужен BluetoothDevice для выполнения этой функции.

Итак, мне нужно знать следующее:

Действительно ли функция возвращает устройство UUID ? Поскольку имя говорит о множественном числе (getUuid s )

Как мне получить экземпляр этого BluetoothDevice ?

в любом случае, как вы могли узнать, что UUID предназначен для вашего устройства Bluetooth @Ron? — gumuruh

2 ответы

Используя отражение, вы можете вызвать скрытый метод getUuids() на BluetoothAdater :

Это результат на Nexus S:

где, например, 0000111f-0000-1000-8000-00805f9b34fb для HandsfreeAudioGatewayServiceClass и 00001105-0000-1000-8000-00805f9b34fb для OBEXObjectPushServiceClass . Фактическая доступность этого метода может зависеть от устройства и версии прошивки.

ответ дан 28 окт ’13, 20:10

Я использую SDK16, и он у меня не работает. uuids Он null . Кроме того, я хотел бы иметь только мой uuid Bluetooth. Вы знаете, как получить это? — Ром

Для каждой службы Bluetooth, предоставляемой устройством, существует uuid; вот почему вы видите несколько uuid для смартфона. Я проводил тесты с помощью SDK на Nexus S с Android 4.1.2 и Galaxy Nexus с Android 4.3. Какое устройство вы использовали? — Стефано С.

Bluetooth должен быть включен. Я тестировал Galaxy S2 с Android 4.1.2, и он работал, показывая 12 UUID. — Стефано С.

Хорошо, пока все отлично — спасибо 🙂 Но как мне получить uuid, представляющий мой телефон? Или мне нужны все они для идентификации моего devide? — Ром

@ Рон, ты получил то, что хотел? Я тоже хочу спросить. Ничего, если я определю свой собственный UUID для двух разных устройств Android для связи друг с другом? Я имею в виду, не будет ли конфликта, если я буду использовать один и тот же UUID для двух разных устройств? — гумурух

Для этого вы должны определить разрешение Bluetooth:

Затем вы можете вызвать метод getUuids() используя отражение:

Вы должны включить Bluetooth, чтобы получить Uuids.

ответ дан 22 мар ’18, в 15:03

java.lang.NoSuchMethodException: тип параметра — null — «getUuids» — user924

Как я могу узнать, какой из перечисленных uuid принадлежит устройству, которое я хочу связать? Я могу обнаружить устройство с помощью device.getAddress(), которое возвращает что-то вроде: 24:A0:C4:BF:5C:F2, с другой стороны, используя ваш код, я получаю лики по 3 UUID каждый следующим образом: 0000110a-0000-1000- 8000-00805f9b34fb отличия только в первом блоке. Я хочу вызвать createInsecureRfcommSocketToServiceRecord(UUID), чтобы сын мог связать Android с устройством ESP32. — ЛукасРТ

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками android bluetooth uuid android-bluetooth or задайте свой вопрос.

Как идентифицировать UUID ble из спецификаций услуг bluetooth?

В настоящее время я работаю над пульсометром и обнаружил, что «2A37» — это uuid, который используется для получения данных о частоте сердечных сокращений с устройства hrm. Тогда я много искал, но не нашел, почему я должен использовать «2A37», а не другие для получения данных о частоте сердечных сокращений.

Я прошел через информацию ниже ссылки сайта bluetooth, но все еще я в замешательстве.

Может ли кто-нибудь, пожалуйста, заставить меня понять как я могу выбрать различные UUID для различных служб.

Пример:
Допустим, мне нужно получить данные батареи из устройства управления человеческими ресурсами, то, от информации, услуги Bluetooth, как узнать UUID для обслуживания батареи данные.

1 ответ:

0x2A37 имеет идентификатор UUID измерение пульса характеристика. Вы используете это число, потому что спецификация говорит, что это то, что есть. Служба сердечного ритма — 0x180D. на странице, на которую вы ссылаетесь, есть номера в таблице. Обслуживание аккумулятора 0x180F. Что вам понадобится, чтобы прочитать это Уровень заряда аккумулятора, характерные, которая 0x2A19. Вам просто нужно щелкнуть сервис батареи, а затем нажать на характеристику батареи, чтобы найти соответствующую страницу со всеми деталями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *