Съдържание:

Изградете носим механизъм за проследяване на движение (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 приятел
  • 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 услуга“. Той ще съдържа 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 FRIEND

Първо, свържете 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 данните и определи къде се намира потребителят или се движи. ВИЖТЕ РЕЗУЛТАТИТЕ си Проверете резултатите на екрана! Щракнете върху бутона за синхронизиране, за да получите друго четене на данни.

Препоръчано: