Arduino:Библиотеки/CurieBLE
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Библиотека CurieBLE[1]
Эта библиотека позволяет задействовать BLE-функции (от «Bluetooth low energy», что значит «Bluetooth с низким энергопотреблением») платы Arduino/Genuino 101, чтобы коммуницировать и взаимодействовать с девайсами вроде смартфонов и планшетов.
Краткое введение в BLE
Bluetooth версии 4.0 включает в себя и традиционный Bluetooth (именуемый теперь «Bluetooth Classic»), и новый Bluetooth Low Energy (Bluetooth LE или BLE). Технология BLE оптимизирована для работы от маломощных источников (к примеру, от простых литиевых батареек-таблеток), используемых при малых скоростях передачи данных.
В отличие от стандартной Bluetooth-коммуникации (которая, как правило, основана на асинхронном последовательном подключении, т.е. UART), BLE-устройство работает сродни доске объявлений. Компьютеры, которые подключаются к BLE-устройству – это что-то вроде людей, читающих доску объявлений (назовем их «читателями»). Каждое устройство функционирует либо как доска объявлений, либо как читатель. Если устройство – доска объявлений (в терминологии BLE такие устройства называют «периферийными»), то оно публикует данные для всех устройств, находящихся в зоне действия сигнала. Если устройство – читатель (такие устройства называют «центральными»), то оно считывает информацию со всех досок объявлений (т.е. периферийных устройств), которые содержат нужную ему информацию.
Если рассмотривать этот вид коммуникации по принципу «клиент-сервер», то сервером здесь будут служить периферийные устройства (поскольку они хранят информацию, которую запрашивают читатели), а клиентами – центральные устройства (поскольку они считывают информацию с периферийных устройств).
Итак, периферийные устройства – это доски объявлений, а центральные устройства – это читатели. Центральные устройства просматривают сервисы, получают необходимые данные и уходят. Каждый сеанс передачи данных проходит очень быстро (в течение нескольких миллисекунд), благодаря чему периферийное устройство может раздавать данные сразу нескольким центральным устройствам.
Информация, представленная периферийным устройством, структурирована в виде сервисов, каждый из которых состоит из характеристик. Если продолжать метафору с доской объявлений, то сервисы можно рассматривать, собственно, как сами объявления, а характеристики – как параграфы в этих объявлениях. Таким образом, периферийное устройство, когда нужно, просто обновляет характеристики, и не беспокоится о том, считало ли их центральное устройство или нет.
Центральное устройство, в свою очередь, просто подключается к периферийному устройству и считывает нужные характеристики. Если какая-либо характеристика поддается и перезаписи, и считыванию, то ее могут менять и периферийное, и центральное устройство.
Уведомления
Спецификация BLE включает в себя механизм уведомлений (notify), позволяющий узнавать, когда были изменены данные. Когда у какой-либо характеристики включены уведомления, и отправитель делает запись на эту характеристику, то это новое значение автоматически отсылается получателю, даже если он не давал команду считывания. Этот метод часто используется для потоковых данных – вроде тех, что генерируют акселерометры и другие датчики. У механизма уведомлений есть разновидность, называемая уведомление с подтверждением (indicate), т.е. получатель перед тем, как принять данные, должен отправить подтверждение.
Клиент-серверная структура BLE в сочетании с механизмом уведомлений называется, как правило, моделью публикации и подписки.
Обновление характеристики
Если характеристика подверглась значительному изменению (к примеру, если состояние переключателя поменялось с «выкл» на «вкл» или значение на аналоговом датчике резко прыгнуло на несколько пунктов вверх или вниз), периферийное устройство должно ее обновить. Обновление характеристики нужно делать регулярно, но если значение характеристики не будет меняться, это приведет к пустым тратам энергии и вычислительной мощности.
Центральные и периферийные устройства
Центральные устройства – это клиенты. Они считывают и записывают данные на периферийные устройства. Периферийные устройства – это серверы. Они публикуют данные от датчиков в виде читаемых характеристик, а также предоставляют доступ к перезаписываемым характеристикам, чтобы с их помощью управлять устройствами-исполнителями вроде моторов, фонарей и т.д.
Сервисы, характеристики и UUID
Периферийное устройство публикует информацию через сервисы, которые, в свою очередь, состоят из характеристик. Вы можете задать собственные сервисы либо использовать стандартные сервисы.
Сервисы идентифицируются уникальными номерами, известными как UUID. Стандартные сервисы имеют 16-битные UUID, а пользовательские – 128-битные UUID. Способность определять сервисы и характеристики зависит от устройства, которое вы используете, и его прошивки.
Способы создания сервиса
Значение характеристики не должно превышать объем в 20 байтов – это главное ограничение при создании сервисов. Его нужно обязательно учитывать при определении того, как лучше всего хранить данные от датчиков и прочих устройств, используемых в вашем проекте. Самый простой способ – каждому значению по характеристике (в ASCII-формате):
Характеристика | Значение |
---|---|
Акселерометр; ось X | 200 |
Акселерометр; ось Y | 134 |
Акселерометр; ось Z | 150 |
Этот способ требует больше ресурсов памяти и больше времени на считывание данных. Впрочем, он проще в разработке и отладке.
Второй способ – это объединение в одной характеристике нескольких значений. Он удобен, к примеру, если эти несколько значений связаны с одним и тем же устройством.
Характеристика | Значение |
---|---|
Мотор; скорость и направление движения | 150, 1 |
Акселерометр; оси X, Y и Z | 200, 133, 150 |
Второй способ более эффективен, однако при его использовании нужно быть осторожнее, чтобы не превысить 20-байтный лимит. К примеру, характеристика для акселерометра из таблицы выше представлена в виде ASCII-строки, занимающей 11 байтов.
Операции для работы с характеристиками
Существует 4 операции, с помощью которых центральное устройство может взаимодействовать с характеристиками:
- Чтение (read). Запрашивает у периферийного устройства текущее значение характеристики. Как правило, используется для характеристик, значения которых меняются нечасто – к примеру, для тех, где хранится информация о настройках, номере версии и т.д.
- Запись (write). Изменяет значение в характеристике. Как правило, используется для команд – к примеру, для того, чтобы приказать периферийному устройству включить или выключить мотор.
- Уведомление (notify) и уведомление с подтверждением (indicate). Запрашивает у периферийного устройства постоянную отправку обновленных значений характеристики, чтобы центральному устройству не пришлось запрашивать каждое из этих значений по отдельности. При использовании операции «indicate» периферийное устройство сначала должно прислать подтверждение на отправку данных.
Пакеты-объявления и GAP
BLE-устройства дают знать о своем существовании при помощи объявлений, и это осуществляется через GAP (от «Generic Access Point», что значит «профиль общего доступа»). Пакеты-объявления могут содержать название устройства, список предлагаемых им сервисов и другую информацию.
Пакет-объявление имеет ограниченный размер – в частности, он вмещает только один 128-битный UUID сервиса. Поэтому убедитесь, что название BLE-устройства не слишком длинное, иначе оно может просто не вместиться с пакет.
Поскольку размер объявления ограничен, есть вероятность, что он может не вместить UUID всех сервисов, имеющихся на периферийном устройстве. Впрочем, вам не обязательно объявлять сразу обо всех сервисах, т.к. центральное устройство будет узнавать о них в момент подключения к периферийному устройству.
Отсюда следует, что эти невидимые (дополнительные) сервисы нельзя использовать в качестве «приманки» для центральных устройств. Но эту проблему можно обойти. К примеру, если вы сами спроектировали какое-нибудь периферийное устройство и снабдили его каким-то особым сервисом, то ПО на вашем центральном устройстве можно запрограммировать так, что оно будет думать в духе: «Ага! Раз на этом периферийном устройстве есть вот этот особый сервис, значит, есть и другие нужные мне сервисы».
GATT
Протокол BLE функционирует на нескольких уровнях, и одним из них является GATT (от «General Attribute Profile», что значит «профиль общих атрибутов») – он определяет, что такое сервисы и характеристики, а также позволяет делать с ними операции чтения, записи, уведомления и уведомления с подтверждением. В большинстве случаев GATT-сервером будет периферийное устройство (поскольку оно предлагает сервисы и характеристики), а GATT-клиентом – центральное устройство. Но имейте в виду, так бывает не всегда.
Структура библиотеки
Библиотека CurieBLE может выполнять разные задачи, поэтому состоит из нескольких классов:
- BLEPeripheral – для активации BLE-модуля
- BLEDescriptor – для определения атрибутов для характеристики
- BLECentral – для репрезентации центрального устройства, которое подключается к плате
- BLECharacteristic – для активации характеристик, предлагаемых платой
- BLEService – для активации сервисов, предлагаемых платой
Примеры
- Genuino101CurieBLEHeartRateMonitor - Отслеживание пульса
- Genuino101CurieBLEBatteryMonitor - Отслеживание уровня заряда батареи
- Genuino101CurieBLEButtonLED - Включение/выключение светодиода нажатием на кнопку
- Genuino101CurieBLECallbackLED - Включение/выключение светодиода нажатием на кнопку (с помощью функций внешнего вызова)
- Genuino101CurieBLELED - Включение/выключение светодиода
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |