Всё становится лучше, когда есть Bluetooth

778f6954f6434f08b018ea085d6cceec.jpg
Давно хотел написать про Bluetooth LE (4.0–4.1) кит (CY8CKIT-042-BLE) от Cypress Semiconductor.
Вообще-то планы были написать подробнее другой кит, поверхностный обзор которого я публиковал ранее. Но так и не собрался с мыслями, а тут появилось кое-что более интересное.
Процесс заказа и доставки я описывать не стану, во-первых, это есть в старой статье, во-вторых каких-либо сюрпризов не было.
Итак, я попробую в короткой форме описать сам кит и примеры его использования.

Аппаратная часть


Толковой фотографии у меня не получилось, ограничусь картинкой из пресс-релиза:
2e0f242410a84ca88d492fb9e962d795.jpg
Комплект поставки:

  • Материнская плата
  • Плата (модуль) с CY8CKIT-142 PSoC 4 BLE
  • Плата (модуль) с CY5671 PRoC™ BLE
  • USB-BLE донгл (о нём подробнее далее)
  • Набор кабелей
  • Батарейка
  • Инструкця
  • USB кабель


То есть в комплекте два модуля с похожими, но всё-таки разными чипами.
Стоит отметить, что донгл может быть использован только с ПО от Cypress, средствами ОС с ним не сделать, ну кроме как использовать каким-то образом UART.
Каждый из модулей может быть как использован как самостоятельно, так и использоваться вместе с материнской платой, которая является и программатором.CY8CKIT-142 PSoC 4 BLE
Этот модуль интересен тем, что тут больше аналоговой и цифровой периферии (выдержки из пресс-релиза):

  • 48-MHz ARM® Cortex™-M0 CPU
  • 128 KB Flash and 16 KB SRAM
  • Bluetooth LE (Smart) connectivity with Bluetooth 4.1 (2.4-GHz Bluetooth LE radio; -92-dBm Rx sensitivity, up to +3-dBm Tx power)
  • Programmable analog (4 x Op-amps; 1×12-bit, 1-Msps SAR ADC; 2 x Low-Power Comparators; 1 x Cypress CapSense™ touch controller with SmartSense™ Auto-Tuning)
  • Programmable digital (4 x universal digital blocks; 4×16-bit configurable Timer/Counter/PWM blocks; 2 x configurable serial communication blocks)
  • Flexible Low Power Modes: (1.3-μA Deep-Sleep Current; 150-nA Hibernate Current; 60-nA Stop Current
  • Wide Operating Range 1.7 — 5.5 V (Radio operational 1.9 V onwards)
  • 56-QFN (7×7 x 0.6 mm), 68-ball WLCSP (3.9×3.5×0.55 mm)


Мне же был интересен больше следующий модуль: CY5671 PRoC™ BLE
Для меня интересен он был тем, что с ним можно было использовать библиотеку для распознавания жестов на панели ёмкостного тачпада, которого, кстати, нету в комплекте:

  • 48-MHz ARM® Cortex™-M0 CPU
  • 128 KB Flash and 16 KB SRAM
  • Bluetooth LE (Smart) connectivity with Bluetooth 4.1 (2.4-GHz Bluetooth LE radio; -92-dBm Rx sensitivity, up to +3-dBm Tx power)
  • Flexible Low Power Modes: (1.3-μA Deep-Sleep Current; 150-nA Hibernate Current; 60-nA Stop Current
  • Analog and digital peripherals (One 12-bit, 1-Msps SAR ADC; Four 16-bit TCPWM blocks; Two SCBs, configurable as I2C, SPI or UART; I2S for audio input)
  • Integrated library support for one- and two-finger gestures
  • 56-QFN (7×7 x 0.6 mm), 68-ball WLCSP (3.9×3.5×0.55 mm)


Стоимость кита — 49$ плюс доставка.

Разработка приложений


Как я уже писал, Cypress Semiconductor предоставляет бесплатную IDE — PSoC Creator. Отдельно хотелось бы остановиться на части, которая помогает получить от BLE то, что нужно, иными словами сконфигурировать BLE Stack + Application layer. Я сейчас не хочу углубляться в то, чем является Bluetooth Low Energy (aka BLE). Информации про это есть много, в том числе и на хабре.PSoC Creator
Актуальная версия на данный момент — 3.2 доступна для скачивания на оф. сайте: www.cypress.com/psoccreator после регистрации. Среда разработки не подверглась значительным изменениям с момента написания прошлой статьи, так что особо углубляться не вижу смысла, напомню только что вся разработка базируется на понятии компонент — библиотек которые реализуют тот или иной функционал.BLE стек (компонента BLE)
Тут я бы хотел поподробнее остановиться на описании не самой компоненты BLE, а, скорее на примерах, которые доступны в PSoC Creator:
95366c9733324ff3965a392c9b61488d.png
Каждый из этих примеров это простой проект, который показывает реализацию того или иного профиля. Для данной статьи я планировал использовать BLE_HID_Mouse, но по ряду причин, основная из которых то, что у меня нету тачпада, который я мог бы использовать, чтобы обойтись без симуляции (в примере курсор просто «рисует» квадрат) я решил использовать пример BLE_HID_Keyboard. Забегая вперёд скажу, что там тоже «симуляция» клавиатуры, но так нагляднее.

Итак, откроем пример BLE_HID_Keyboard:

67a6e483bde34c6888922aaeef05f972.png

Сам проект содержит ЦАП (измерение уровня батареи), COM порт для дебага, светодиодные индикаторы (3х цветный светодиод на плате кита), и вотчдог в режиме обычного таймера.

Откроем конфигурацию BLE компоненты:

69ddefd350504908b38bd56470e31f68.png

Вкладка конфигурации профилей:

357029120713489c87ed7b74e19bfaa6.png

Кроме профиля клавиатуры тут также присутствуют сервисы BAS (Battery Service), DIS (Device Information Service), SCPS (Scan Parameter Service). В принципе, при желании можно добавить любой сервис, как стандартный, так и свой:

c8420afaf7f44ae8bdba23841ff80188.png

После чего в GATT базу данных будет внесены все характеристики и дескрипторы сервисов, к тому же, если сервис стандартный, для него будут сгенерированы API.

Каждый из сервисов можно сконфигурировать, например DIS сервис, поле с названием производителя:

c323ba439a0d481dad023badf3064f66.png

Или же имя устройства:

5e3ddb4f8775439a89e4e74e120b3535.png

Попробуем запрограммировать кит и включив BLE 4.0-совместимый адаптер начать поиск новых устройств:

ab49dba847ca41a7bfd22a7890f81b31.png

То же самое с телефона:

818b087729d2428c983fb7f169853731.PNG

Ну и если подключиться к устройству от «клавиатуры» начнут приходить данные:

7e61d1eb31274018a904f23716b4e374.png

36924476295442d2ade307ce46153fae.PNG

a2ca0c37def94f7288b7a038d762712f.png

3312cdda38ed45bba81d0a3544a487aa.png

24200525edcf4635a6cc3d61c7434e74.png

К чему это я

Ну, во-первых, как просто и легко можно окунуться в мир BLE. Есть статьи были и описывали решения от Nordic, TI, но вот упоминания Cypress Semiconductor не было, вот я и решил исправить это. Для меня был интересен еще и тот факт, как сравнительно просто, можно сделать самостоятельно устройство, которое не только будет иметь беспроводную связь, а еще и будет поддерживаться современными ОС «из коробки» и без лишних костылей.

Во-вторых, я давно хотел бы попробовать сделать самостоятельно пульт ДУ для ПК. Собственно для этого я заказал кит и начал с ним разбираться. По что с китом определился, но открыт вопрос про тачпад. Как вириант — заказать еще один кит от Cypress с таким шилдом. Ну или попробовать развести самостоятельно, но тут не факт, что хватит энтузиазма и знаний. Кто знает какие-то еще варианты, напишите в комментариях. Нужен шилд для ёмкостного тачпада хотя бы 5×5.
Еще один интересный кит, который, возможно, подходил бы больше под мои цели:
CY5672 PRoC™ BLE Remote Control Reference Design Kit (RDK)
Но по-моему куда интереснее сделать самому, тем более, когда есть возможность возможность делать всё не спеша, в удовольствие.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

© Habrahabr.ru