Оглавление:

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

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

Видео: Создание переносного трекера движения (BLE от Arduino до пользовательского приложения Android Studio): 4 шага
Видео: Интернет вещей Кафедра информационных и интернет-технологий Сеченовский университет 2024, Июль
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 и определит, где пользователь все еще находится или движется. ПОСМОТРЕТЬ РЕЗУЛЬТАТЫ Проверьте результаты на экране! Нажмите кнопку синхронизации, чтобы получить еще одно чтение данных.

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