Оглавление:
- Запасы
- Шаг 1. Разработка индивидуальных услуг и характеристик
- Шаг 2: Код Arduino
- Шаг 3. Код Android Studio
- Шаг 4: Окончательная заявка
Видео: Создание переносного трекера движения (BLE от Arduino до пользовательского приложения Android Studio): 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
Bluetooth Low Energy (BLE) - это форма связи Bluetooth с низким энергопотреблением. Носимые устройства, такие как умная одежда, которую я помогаю создавать в Predictive Wear, должны по возможности ограничивать потребление энергии, чтобы продлить срок службы батареи, и часто используют BLE. Специальная группа по интересам Bluetooth (SIG) определяет несколько спецификаций, которые устройство должно реализовать для взаимодействия с устройством Bluetooth, которые они называют «профилями». Большинство профилей приложений используют профиль общих атрибутов (GATT) для отправки данных по ссылке BLE. В BLE есть три основных понятия: профили, службы и атрибуты.
Bluetooth SIG стандартизировал многие общие профили, службы и атрибуты. Однако при создании настраиваемого оборудования часто возникает необходимость в создании настраиваемых служб и атрибутов, а доступных руководств не так много. Что еще более усложняет ситуацию, Adafruit не дает никаких указаний по разработке мобильных приложений для сопряжения с их модулями BLE, а исходный код для их приложений трудно реконструировать.
Это руководство призвано объяснить:
- Как разработать индивидуальные сервисы и характеристики GATT
- Как запрограммировать Adafruit Bluefruit LE SPI Friend для работы в качестве сервера GATT для этих специальных услуг и характеристик
- Как запрограммировать 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. Определите свойства, необходимые для каждой характеристики
У характеристики может быть несколько свойств.
- Чтение: клиент (приложение для Android) может считывать значение с сервера GATT (Arduino)
- Запись: Клиент может изменить значение с сервера GATT
- Укажите: Клиент будет уведомлен, если значение изменится с сервера GATT, и ожидается, что Клиент отправит подтверждение на сервер GATT.
- Уведомление: клиент будет уведомлен, если значение изменится с сервера 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 здесь.
ОБЗОР
Обратите внимание на несколько важных моментов:
- В методе 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" работать не будет.
- Обратите внимание, что в методе setup () "battery.begin (true);" вызывает "ble.reset ();" автоматически. Если вы не используете службу батареи, как я, вам нужно сбросить модуль ble (используйте ble.reset ();), где у меня есть команда «battery.begin (true);».
- В методе 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 и определит, где пользователь все еще находится или движется. ПОСМОТРЕТЬ РЕЗУЛЬТАТЫ Проверьте результаты на экране! Нажмите кнопку синхронизации, чтобы получить еще одно чтение данных.
Рекомендуемые:
Создание автоматического солнечного трекера с помощью Arduino Nano V2: 17 шагов (с изображениями)
Создание автоматического солнечного трекера с помощью Arduino Nano V2: Привет! Это руководство должно стать второй частью моего проекта Solar Tracker. Чтобы узнать, как работают солнечные трекеры и как я разработал свой первый трекер, воспользуйтесь ссылкой ниже. Это предложит контекст для этого проекта. Https://www.instructables.co
Создание изогнутого пользовательского интерфейса в Unity для виртуальной реальности: 4 шага
Создание изогнутого пользовательского интерфейса в Unity для виртуальной реальности: если вы ищете бесплатное и простое решение для создания изогнутого пользовательского интерфейса для приложения виртуальной реальности или игры VR, вы находитесь в нужном месте. В этом блоге вы научитесь создавать изогнутый элемент пользовательского интерфейса в единстве с помощью расширений пользовательского интерфейса Unity
Создание пользовательского испытательного стенда Arduino с использованием Wirewrapping: 7 шагов (с изображениями)
Создайте собственный испытательный стенд Arduino с использованием проводной обмотки: это руководство покажет вам простой способ подключения Arduino Nano к различным коммутационным платам для печатных плат. Этот проект появился во время моих поисков эффективного, но неразрушающего способа соединения нескольких модулей. У меня было пять модулей, которые я хотел
Создание пользовательского значка USB и имени: 3 шага
Создайте собственный значок и имя USB-накопителя: Привет и добро пожаловать в это короткое руководство! В конце вы сможете изменить этот старый и часто используемый значок флэш-накопителя USB и изменить его имя в окнах. Итак, приступим! PS : Я француз, поэтому могут быть некоторые ошибки или странные предложения, прошу прощения
Создание переносного гитарного кабинета: 11 шагов
Создайте переносной гитарный кабинет: (Создайте его на свой страх и риск. Из-за плохих навыков деревообработки можно потратить много денег, и много пальцев можно потерять из-за неправильного использования оборудования.) Я надеялся купить гитарный кабинет Mesa Boogie Thiele , но цена сдула меня! Так после