Создание переносного трекера движения (BLE от Arduino до пользовательского приложения Android Studio): 4 шага
Создание переносного трекера движения (BLE от Arduino до пользовательского приложения Android Studio): 4 шага
Anonim
Создайте носимый трекер движения (BLE от Arduino до пользовательского приложения Android Studio)
Создайте носимый трекер движения (BLE от Arduino до пользовательского приложения Android Studio)

Bluetooth Low Energy (BLE) - это форма связи Bluetooth с низким энергопотреблением. Носимые устройства, такие как умная одежда, которую я помогаю создавать в Predictive Wear, должны по возможности ограничивать потребление энергии, чтобы продлить срок службы батареи, и часто используют BLE. Специальная группа по интересам Bluetooth (SIG) определяет несколько спецификаций, которые устройство должно реализовать для взаимодействия с устройством Bluetooth, которые они называют «профилями». Большинство профилей приложений используют профиль общих атрибутов (GATT) для отправки данных по ссылке BLE. В BLE есть три основных понятия: профили, службы и атрибуты.

Bluetooth SIG стандартизировал многие общие профили, службы и атрибуты. Однако при создании настраиваемого оборудования часто возникает необходимость в создании настраиваемых служб и атрибутов, а доступных руководств не так много. Что еще более усложняет ситуацию, Adafruit не дает никаких указаний по разработке мобильных приложений для сопряжения с их модулями BLE, а исходный код для их приложений трудно реконструировать.

Это руководство призвано объяснить:

  1. Как разработать индивидуальные сервисы и характеристики GATT
  2. Как запрограммировать Adafruit Bluefruit LE SPI Friend для работы в качестве сервера GATT для этих специальных услуг и характеристик
  3. Как запрограммировать Android-устройство в качестве клиента GATT для чтения данных с сервера GATT

Это руководство не предназначено для перевода в готовое к эксплуатации приложение - это просто введение в BLE.

Справочная информация:

  • Документация Adafruit Bluefruit LE SPI Friend
  • Если вы не знакомы с GATT или BLE

Запасы

  • 1x - устройство Arduino (в этом руководстве я использую UNO)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - перемычки папа-папа
  • Базовое паяльное оборудование (для пайки выводов разъема на SPI Friend)
  • Компьютер (для программирования устройства Arduino и устройства Android)

Шаг 1. Разработка индивидуальных услуг и характеристик

ВСТУПЛЕНИЕ

Эта статья отлично объясняет, как разрабатывать индивидуальные услуги и характеристики. Я настоятельно рекомендую прочитать эту статью. Ниже я даю очень простой обзор, в котором упущены тонкости в пользу простоты.

Услуги GATT - это набор характеристик.

Характеристики GATT содержат свойство, значение и ноль или более дескрипторов.

  • Свойство: как данные должны обрабатываться клиентом (приложение для Android), например. читать, писать, писать без ответа, уведомлять и указывать.
  • Значение: фактическое значение характеристики, например. 1089
  • Дескрипторы: это информация о значении, например единица измерения, миллисекунды

ДИЗАЙН

Хорошо, теперь вы знаете, что такое сервисы и характеристики, нам нужно выяснить, как разработать некоторые сервисы и характеристики, чтобы получать наши пользовательские данные и отправлять их с нашего сервера GATT (Arduino) клиенту (приложение для Android). Давайте рассмотрим устройство Arduino, которое собирает данные из модуля акселерометра-гироскопа (AGM). Мы хотим собрать измерения гироскопа и ускорения по трем пространственным осям и время, когда эти измерения были сделаны, и передать эти данные в наше мобильное приложение. Мы также хотим знать, когда нам нужно зарядить устройство, поэтому мы хотим считать уровень заряда батареи и передать его в наше мобильное приложение.

1. Можем ли мы использовать какие-либо стандартные услуги и характеристики?

Bluetooth SIG стандартизировал многие общие услуги и характеристики. Во-первых, проверьте их, чтобы узнать, можете ли вы использовать какие-либо стандартизированные услуги и характеристики. Стандартные услуги и характеристики могут использовать гораздо меньшие пакеты данных, поскольку универсальный уникальный идентификатор (UUID) составляет 16 бит, в то время как пользовательские услуги и характеристики должны использовать 128 бит для своих UUID. Подробнее о UUID позже. В результате поиска мы нашли стандартизированную «службу батареи», которая содержит одну характеристику «уровень заряда батареи».

2. Разделите все значения данных, которые вы хотите отправить по BLE, на характеристики и службы

Мы можем разбить наши настраиваемые точки данных на семь настраиваемых характеристик в рамках одной настраиваемой службы. Мы будем называть эту услугу «AGM service». Он будет содержать 7 характеристик: x-ускорение, y-ускорение, z-ускорение, x-гироскоп, y-гироскоп, z-гироскоп и привязку времени.

3. Определите свойства, необходимые для каждой характеристики

У характеристики может быть несколько свойств.

  1. Чтение: клиент (приложение для Android) может считывать значение с сервера GATT (Arduino)
  2. Запись: Клиент может изменить значение с сервера GATT
  3. Укажите: Клиент будет уведомлен, если значение изменится с сервера GATT, и ожидается, что Клиент отправит подтверждение на сервер GATT.
  4. Уведомление: клиент будет уведомлен, если значение изменится с сервера GATT, и не ожидается, что клиент отправит подтверждение на сервер GATT.

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

4. Сгенерируйте UUID для пользовательских сервисов и характеристик и найдите стандартные UUID

Как я кратко упоминал ранее, стандартизованные службы и характеристики Bluetooth SIG используют 16-битный UUID, в то время как специальные службы и характеристики используют 128-битные UUID. Например, см. Присвоенный номер службы аккумуляторов на Bluetooth SIG. Присвоенный номер 0x180F представляет 128-битный UUID «0000180F-0000-1000-8000-00805F9B34FB». Четыре цифры (16 бит), выделенные жирным шрифтом, уникальны для конкретной стандартизированной услуги или характеристики, в то время как другие символы сохраняются между всеми стандартизованными услугами и характеристиками. Поскольку и клиент, и сервер GATT знают, что стандартизованные услуги и характеристики различаются только цифрами, выделенными жирным шрифтом, размеры пакетов данных могут быть существенно уменьшены. Однако таможенные услуги и характеристики не могут работать в соответствии с этим предположением.

Вместо этого в настраиваемых сервисах и характеристиках должны использоваться несокращенные 128-битные UUID. Вот онлайн-генератор UUID. Любой UUID, кроме стандартизованного UUID, приемлем для пользовательского UUID. Однако типичное соглашение об именах - обозначение настраиваемой услуги 00000001-… и характеристик внутри этой настраиваемой услуги 00000002-…

Вот сводная таблица сервисов и характеристик, которые мы будем реализовывать вместе с их UUID

Шаг 2: Код Arduino

ОБНОВЛЕНИЕ ДРУГА BLUEFRUIT LE SPI

Сначала подключите Adafruit Bluefruit LE SPI Friend, как указано в их руководстве по подключению, и включите устройство Arduino. Убедитесь, что вы можете найти Adafruit Bluefruit LE SPI Friend на своем устройстве Android при сканировании устройств Bluetooth. Загрузите приложение Bluefruit Connect, подключитесь к Adafruit Bluefruit LE SPI Friend и позвольте ему обновить прошивку на устройстве. Этот шаг важен. Если вы не обновите прошивку, команды, которые вы отправляете устройству через Arduino, скорее всего, завершатся ошибкой, и не будет очевидной ошибки, чтобы вы могли определить, в чем проблема.

Вот мое репо для этого проекта. Вы можете увидеть полный код Arduino здесь.

ОБЗОР

Обратите внимание на несколько важных моментов:

  1. В методе setup () все пользовательские UUID должны содержать «-» между каждыми двумя символами. Например, "AT + GATTADDCHAR = UUID128 = 00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" будет работать. "AT + GATTADDCHAR = UUID128 = 00000005-627E-47E5-A3fCDDABD97AA966" работать не будет.
  2. Обратите внимание, что в методе setup () "battery.begin (true);" вызывает "ble.reset ();" автоматически. Если вы не используете службу батареи, как я, вам нужно сбросить модуль ble (используйте ble.reset ();), где у меня есть команда «battery.begin (true);».
  3. В методе setup () измените «if (! Ble.begin (false))» на «if (! Ble.begin (true))», если вы хотите отлаживать.

Этот код довольно понятен. Я включил описания каждого пользовательского метода. Метод установки подготавливает модуль BLE к работе в качестве сервера GATT. Метод цикла проходит через ложную развертку модуля гироскопа акселерометра (AGM) и генерирует случайное число от 1 до 100 для этих значений. Батарея разряжена на 1% для имитации использования батареи. Вы можете легко заменить этот код фактическими значениями датчика. Этот код предполагает, что вы передаете массив данных AGM, длиной 6 измерений, а не одно измерение, поскольку анализ окна данных AGM, вероятно, более полезен, чем отдельная точка данных. Если вы измените размер массива, обратите внимание, что в код студии Android потребуются изменения. Чтобы захватить массив данных, вы должны передать счетчик вместе с данными, которые вы собираетесь отправить. Этот счетчик позволяет вам найти, где вы находитесь в окне из приложения студии Android, чтобы вы могли подождать, чтобы прослушать недостающие точки данных в окне. Без счетчика или с массивом другого размера проект студии Android либо пропустит точки данных, либо застрянет в цикле, ожидая оставшихся точек данных, которые он ожидает.

Шаг 3. Код Android Studio

Вот мое репо для этого проекта. Вы можете увидеть полный код Android Studio здесь.

ОБЗОР

Я буду продолжать обновлять это с более подробным обзором того, как работает код Arduino и Android в деталях … Приложение полностью функционально, так что не стесняйтесь пока смотреть на код самостоятельно.

Шаг 4: Окончательная заявка

Окончательная заявка
Окончательная заявка
Окончательная заявка
Окончательная заявка
Окончательная заявка
Окончательная заявка

Поздравляю! Ваше приложение загружается на ваш телефон, и ваше носимое устройство заряжается и передает данные.

ЗАПУСТИТЬ ПРИЛОЖЕНИЕ

Чтобы начать, щелкните значок запуска приложения.

ПРЕДОСТАВЛЯТЬ РАЗРЕШЕНИЯ

Вам нужно будет одобрить использование некоторых разрешений для правильной работы приложения.

СКАНИРОВАТЬ УСТРОЙСТВА

Затем нажмите кнопку «Сканировать» в верхнем левом углу приложения.

ВЫБЕРИТЕ НОСНОЕ УСТРОЙСТВО

Затем выберите свое носимое устройство из списка доступных устройств BLE. Его имя - «BLE Arduino Hardware». ПОЛУЧИТЬ ДАННЫЕ Подождите, пока приложение получит данные AGM и определит, где пользователь все еще находится или движется. ПОСМОТРЕТЬ РЕЗУЛЬТАТЫ Проверьте результаты на экране! Нажмите кнопку синхронизации, чтобы получить еще одно чтение данных.

Рекомендуемые: