Как создать беспроводной BLE-датчик движения и параметров окружающей среды на базе STM32WB

22 января

автомобильная электроникаучёт ресурсовпотребительская электроникаинтернет вещейST Microelectronicsстатьяинтегральные микросхемыбеспроводные технологиисредства разработки и материалы

Программный пакет FP-SNS-MOTENVWB1 для STM32Cube, разработанный STMicroelectronics, позволяет следить на экране смартфона, подключенного по BLE, за показаниями различных датчиков, входящих в устройство интернета вещей наряду с беспроводным микроконтроллером STM32WB55.

Программный пакет FP-SNS-MOTENVWB1 для STM32Cube позволяет подключить ваше IoT-устройство к смартфону через BLE и отслеживать в реальном времени показания различных датчиков, таких как инерционные сенсоры и датчики параметров окружающей среды – температуры, относительной влажности и прочего. Для отображения информации используется специальное Android/iOS-приложение STBLESensor от компании STMicroelectronics.

Программный пакет FP-SNS-MOTENVWB1 предлагает широкий функционал. В частности, пользователи получают доступ к функциям слияния данных датчиков (Sensor Data Fusion) и функциям распознавания движений на основе показаний, получаемых от акселерометра в режиме реального времени.

Предлагаемое решение предназначено для работы с микроконтроллерами STM32WB55 и интегральными датчиками производства ST. Это решение можно использовать в качестве основы для построения собственных портативных устройств, автономных датчиков параметров среды и многих других интеллектуальных приложений.

Программный пакет FP-SNS-MOTENVWB1 содержит все драйверы, необходимые для работы с микроконтроллерами STM32WB, а также другими микросхемами и датчиками, расположенными на отладочной плате Nucleo (P-NUCLEO-WB55) и плате расширения X-NUCLEO-IKS01A3.

Обзор программного пакета FP-SNS-MOTENVWB1

Ключевыми особенностями FP-SNS-MOTENVWB1 являются:

  • наличие законченного программного решения для создания IoT-приложений с датчиками параметров окружающей среды, инерционными сенсорами и беспроводным подключением по BLE;
  • наличие ПО промежуточного уровня, реализующего функции слияния данных датчиков (Sensor Data Fusion) и функцию распознавания движений на основе показаний, получаемых от акселерометра в режиме реального времени;
  • наличие Android/iOS-приложения STBLESensor от ST, позволяющего продемонстрировать работу различных датчиков и алгоритмов обработки данных;
  • наличие готового демонстрационного примера для отладочной платы P-NUCLEO-WB55, работающей совместно с платой расширения X-NUCLEO-IKS01A3;
  • возможность переноса проектов между различными семействами микроконтроллеров благодаря STM32Cube;
  • бесплатная и открытая лицензия.

Программный пакет FP-SNS-MOTENVWB1 реализует следующие функции:

  • Получение по Bluetooth информации от:
    • датчика температуры;
    • датчика давления;
    • датчика влажности;
    • трехосевого гироскопа;
    • трехосевого магнитометра;
    • трехосевого акселерометра.
  • Расчет различных параметров с помощью программных функций обработки данных:
    • определение кватернионов с помощью библиотеки MotionFX;
    • реализация электронного компаса с помощью библиотеки MotionEC;
    • распознавание типа активности с использованием алгоритма MotionAR;
    • распознавание способа переноса устройства с использованием алгоритма MotionCP;
    • распознавание жестов с использованием алгоритма MotionGR;
    • подсчет количества и частоты шагов с помощью алгоритма MotionPM;
    • определение интенсивности движения с использованием MotionID;
  • Работа с консолью:
    • Stdin/Stdout для двунаправленного обмена между клиентом и сервером;
    • Stderr для однонаправленной передачи данных от P-NUCLEO-WB55 к Android/iOS-устройству;
  • Передача/сброс статуса калибровки и активизация поддержки следующих аппаратных функций P-NUCLEO-WB55 (при условии, что LSM6DS0 установлен на плате расширения X-NUCLEO-IKS01A3):
    • шагомер;
    • обнаружение свободного падения;
    • обнаружение одиночных касаний;
    • обнаружение двойного касания;
    • обнаружение пробуждения;
    • обнаружение наклона;
    • 3D-ориентация;
    • обнаружение нескольких событий (3D-ориентация, шагомер, одно касание, двойное касание, обнаружение свободного падения и наклона).

Предлагаемое ПО собирает информацию от датчиков параметров среды, таких как HTS221, LPS22HH, и инерционных сенсоров LSM6DS0, LIS2DW12 и LIS2MDL, расположенных на плате расширения X-NUCLEO-IKS01A3.

Программный пакет FP-SNS-MOTENVWB1 совместим с приложением STBLESensor для Android/iOS (версия 4.4.2 или выше). Приложение STBLESensor доступно для бесплатного скачивания в магазинах Google Play/iTunes. STBLESensor можно использовать для отображения информации, принимаемой от P-NUCLEO-WB55 по BLE.

Архитектура

Программный пакет FP-SNS-MOTENVWB1 использует для работы с микроконтроллерами STM32 драйверы STM32CubeHAL. Кроме того, FP-SNS-MOTENVWB1 расширяет возможности STM32Cube, предоставляя BSP-драйверы (Board Support Package) для взаимодействия с платой расширения и ПО промежуточного уровня.

В FP-SNS-MOTENVWB1 используются режимы пониженного потребления, подходящие для данной области применения и совместимые со спецификацией Bluetooth 5.0 (P-NUCLEO-WB55).

В FP-SNS-MOTENVWB1 реализованы следующие программные уровни (рисунок 1):

  • Уровень HAL-драйверов предоставляет простой и универсальный набор интерфейсов прикладного программирования (API) для взаимодействия с библиотеками, стеками и приложениями более высокого уровня. Данный уровень предлагает базовые и расширенные API-интерфейсы и использует универсальную архитектуру, что позволяет приложениям более высокого уровня реализовывать функции без необходимости какой-либо особой аппаратной настройки микроконтроллера. Такая структура облегчает повторное использование кода и гарантирует простую миграцию проектов при переходе на другие микроконтроллеры STM.
  • BSP-уровень (Board Support Package) обеспечивает поддержку всех периферийных устройств и датчиков, расположенных на платах Nucleo. BSP-драйверы представляет собой ограниченный набор API-функций, реализующих программный интерфейс для взаимодействия с определенными периферийными устройствами, такими, например, как светодиоды, пользовательские кнопки и так далее. Также BSP помогает идентифицировать конкретную версию платы.
  • ПО промежуточного уровня (Middleware) включает в себя библиотеки движений: MotionAR (библиотека распознавания активности), MotionCP (библиотека для определения положения устройства при перемещении), MotionEC (библиотека электронного компаса), MotionFX (библиотека функций слияния данных датчиков), MotionGR (библиотека распознавания жестов), MotionID (библиотека определения интенсивности движения), MotionPM (шагомер).

Рис. 1. Архитектура программного пакета FP-SNS-MOTENVWB1

Рис. 1. Архитектура программного пакета FP-SNS-MOTENVWB1

Дерево каталогов

Программный пакет FP-SNS-MOTENVWB1 можно бесплатно скачать на сайте ST в виде zip-архива. После распаковки в появившейся директории можно найти следующие папки (рисунок 2):

  • папка «Documentation» содержит файл HTML, сгенерированный из исходного кода. В нем подробно описаны программные компоненты и API-функции;
  • папка «Drivers» содержит HAL-драйверы микроконтроллера, BSP-драйверы для всех поддерживаемых плат или аппаратных платформ, драйверы для компонентов, расположенных на платах и CMSIS для процессоров серии ARM Cortex-M;
  • папка «Middlewares» содержит библиотеки и протоколы для STM32 WPAN BLE, библиотеку функций слияния данных датчиков MotionFX (iNEMOEngine PRO), библиотеку распознавания активности MotionAR (iNEMOEngine PRO), библиотеку распознавания положения устройства MotionCP (iNEMOEngine PRO), библиотеку распознавания жестов MotionGR (iNEMOEngine PRO), библиотеку шагомера MotionPM (iNEMOEngine PRO), библиотеку распознавания интенсивности движения MotionID (iNEMOEngine PRO);
  • папка «Projects» содержит примеры приложений, в которых данные от датчиков и программных библиотек передаются по BLE на Android/iOS-устройство. FP-SNS-MOTENVWB1 предлагает шаблоны и готовые проекты для IAR Embedded Workbench, RealView Microcontroller Development Kit (MDK-ARM) и System Workbench.

Рис. 2. Структура FP-SNS-MOTENVWB1

Рис. 2. Структура FP-SNS-MOTENVWB1

API-функции

Подробное и полное описание API-функций и их параметров можно найти в скомпилированном HTML-файле, который находится в папке «Documentation».

Описание примера

Готовый пример для P-NUCLEO-WB55 и X-NUCLEO-IKS01A3 можно найти в папке «Projects», при этом пользователю предлагаются готовые проекты для нескольких IDE. Для отображения процесса инициализации можно использовать обычный терминал. Параметры настройки последовательного канала UART, такие как порт, скорость передачи, разрядность данных, наличие и тип бита четности, количество стоп-битов, представлены на рисунке 3.

Рис. 3. Настройка терминала

Рис. 3. Настройка терминала

После нажатия кнопки сброса, расположенной на плате P-NUCLEO-WB55, микроконтроллер выполняет следующие действия:

  • инициализирует коммуникационные интерфейсы UART и I²C;
  • проверяет, все ли датчики присутствуют и работают;
  • генерирует случайный MAC-адрес BLE;
  • инициализирует датчики и аппаратную часть BLE;
  • инициализирует BLE SW и библиотеки MotionFX, MotionAR, MotionCP, MotionGR и MotionID;
  • инициализирует консоль, добавляя характеристики Stdin/Stdout и Stderr;
  • инициализирует службу конфигурации BLE, передающую/сбрасывающую статус калибровки.

Программа микроконтроллера может генерировать прерывания, сигнализирующие о различных событиях: свободном падении, наклоне, пробуждении, одиночном касании, двойном касании, определенном положении устройства в пространстве или о заданных показаниях шагомера. Эти прерывания передаются по Bluetooth на подключенное Android/iOS-устройство.

Микроконтроллер также передает Android/iOS-устройству:

  • три кватерниона каждые 30 мс;
  • данные о температуре, влажности и давлении каждые 500 мс;
  • показания трехосевого акселерометра, гироскопа и магнитометра каждые 50 мс.

Программа микроконтроллера считывает значения акселерометра, магнитометра и гироскопа с частотой 100 Гц.

Библиотека MotionFX (iNEMOEngine PRO) использует функции слияния данных инерционных сенсоров (Sensor Data Fusion), рассчитывает 100 кватернионов в секунду и передает их клиенту, подключенному по BLE.

Библиотека MotionAR (iNEMOEngine PRO) может распознавать следующие виды активности:

  • неподвижное состояние;
  • ходьба;
  • быстрая ходьба;
  • бег трусцой;
  • езда на велосипеде;
  • езда на автомобиле.

Библиотека MotionCP (iNEMOEngine PRO) в режиме реального времени распознает положение устройства:

  • на столе;
  • в руке;
  • возле головы;

и определяет, каким образом его переносит пользователь:

  • в кармане рубашки;
  • в кармане брюк;
  • в раскачивающейся руке.

Библиотека MotionGR (iNEMOEngine PRO) может распознавать жесты, например:

  • устройство взяли в руку;
  • устройство повернули для просмотра экрана;
  • устройство встряхнули для пробуждения.

Библиотека MotionPM (iNEMOEngine PRO) подсчитывает количество шагов и вычисляет их частоту.

Библиотека MotionID (INEMOEngine PRO) может распознавать уровни интенсивности движения устройства или его пользователя:

  • неподвижное лежание на столе;
  • лежание на кровати или диване;
  • легкое движение;
  • движение на велосипеде;
  • набор текста;
  • медленная ходьба;
  • ходьба;
  • быстрая ходьба;
  • бег трусцой;
  • быстрый бег;
  • спринт.

STBLESensor – клиентское приложение для Android и iOS

Программный пакет FP-SNS-MOTENVWB1 использует приложение STBLESensor (версия 4.4.2 или выше) для отображения данных на экране Android/iOS-устройств. Приложение STBLESensor доступно в Google Play и iTunes. В этом примере мы будем использовать версию для Android.

После запуска приложения STBLESensor на экране устройства будет отображаться стартовая страница, на которой представлены значения параметров окружающей среды: температура, влажность и давление (рисунок 4).

Рис. 4. Стартовая страница STBLESensor (версия для Android) после подключения BLE

Рис. 4. Стартовая страница STBLESensor (версия для Android) после подключения BLE

Если библиотека MotionFX включена, то пользователь сможет отслеживать ориентацию отладочной платы. При этом положение платы визуализируется с помощью трехмерного кубика (рисунок 5).

Рис. 5. Страница, демонстрирующая работу библиотеки MotionFX

Рис. 5. Страница, демонстрирующая работу библиотеки MotionFX

На этой странице внизу расположены две кнопки:

  • кнопка сброса положения куба (слева);
  • кнопка статуса калибровки библиотеки MotionFX (справа). Если калибровка не выполнена, значок подсвечивается черным. Если калибровка выполнена, значок окрашивается зеленым. При нажатии на кнопку происходит принудительная калибровка.

При нажатии любой из кнопок в приложении появляется окно, поясняющее, каким образом пользователь должен расположить плату для сброса или для выполнения калибровки (рисунок 6).

Рис. 6. Всплывающие окна STBLESensor (версия для Android)

Рис. 6. Всплывающие окна STBLESensor (версия для Android)

На следующей странице пользователь может отобразить графики изменения любых параметров, получаемых от датчиков (рисунок 7).

Рис. 7. График показаний акселерометра в STBLESensor (версия для Android)

Рис. 7. График показаний акселерометра в STBLESensor (версия для Android)

Программа микроконтроллера поддерживает различные типы событий, определяемых с помощью акселерометра. По умолчанию в поле «Detected event» выбрано значение «Multiple», это означает, что активизирована поддержка нескольких событий (рисунок 8).

Рис. 8. STBLESensor (версия Android) поддерживает различные события

Рис. 8. STBLESensor (версия Android) поддерживает различные события

В меню «Detected event» можно выбрать одну конкретную аппаратную функцию (рисунки 9 и 10).

Рис. 9. Выбор события в меню STBLESensor (версия для Android)

Рис. 9. Выбор события в меню STBLESensor (версия для Android)

Рис. 10. Примеры активации аппаратных функций в STBLESensor (версия для Android): шагомер, пробуждение при встряхивании, ориентация, двойное касание

Рис. 10. Примеры активации аппаратных функций в STBLESensor (версия для Android): шагомер, пробуждение при встряхивании, ориентация, двойное касание

Если алгоритм MotionAR активен, то пользователь может получать следующую информацию об активности устройства (рисунок 11):

  • неподвижное состояние;
  • ходьба;
  • быстрая ходьба;
  • бег трусцой;
  • езда на велосипеде;
  • езда на автомобиле.

Рис. 11. Страница, демонстрирующая работу библиотеки MotionAR

Рис. 11. Страница, демонстрирующая работу библиотеки MotionAR

Если алгоритм MotionCP включен, то пользователь получает возможность контроля текущего положения устройства (рисунок 12):

  • на столе;
  • в руке;
  • возле головы;
  • в кармане рубашки;
  • в кармане брюк;
  • в раскачивающейся руке.

Рис. 12. Страница, демонстрирующая работу библиотеки MotionCP

Рис. 12. Страница, демонстрирующая работу библиотеки MotionCP

Если алгоритм MotionGR включен, то пользователю оказывается доступна функция распознавания жестов (рисунок 13):

  • устройство взяли в руку;
  • устройство повернули для просмотра экрана;
  • устройство встряхнули;
  • устройство пробудилось в руке. 

Рис. 13. Страница, демонстрирующая работу библиотеки MotionGR

Рис. 13. Страница, демонстрирующая работу библиотеки MotionGR

Если алгоритм MotionPM активен, то на отдельной старание отображаются показания шагомера (рисунок 14). 

Рис. 14. Страница, демонстрирующая работу шагомера MotionPM

Рис. 14. Страница, демонстрирующая работу шагомера MotionPM

На следующей странице выполняется управление включением/выключением светодиода (рисунок 15).

Рис. 15. Панель управления светодиодом

Рис. 15. Панель управления светодиодом

Если алгоритм MotionID активен, то пользователю становится доступна информация об интенсивности движения (рисунок 16). 

Рис. 16. Страница, отображающая интенсивность движения

Рис. 16. Страница, отображающая интенсивность движения

Если библиотека MotionFX включена, то на одной из страниц пользователь может найти компас, который визуализирует положение платы (рисунок 17).

Рис. 17. Страница электронного компаса в приложении STBLESensor (версия для Android)

Рис. 17. Страница электронного компаса в приложении STBLESensor (версия для Android)

На этой странице также присутствует кнопка калибровки. Если калибровка не выполнена – значок подсвечивается черным. Если калибровка выполнена, то значок окрашивается зеленым. При нажатии на кнопку происходит принудительная калибровка магнитного датчика. 

На последней странице отображаются параметры элемента питания и показатель качества принимаемого сигнала Bluetooth (RSSI), как показано на рисунке 18.

Рис. 18. Информация о батарее и качестве принимаемого сигнала Bluetooth

Рис. 18. Информация о батарее и качестве принимаемого сигнала Bluetooth

Описание оборудования

Семейство микроконтроллеров STM32WB

Микроконтроллеры STM32WB55 имеют двухъядерную архитектуру. 32-битный процессор Arm® Cortex®-M4 с рабочей частотой 64 МГц используется для выполнения пользовательских программ, а 32-битный процессор Arm® Cortex®-M0+ с рабочей частотой 32 МГц отвечает за работу беспроводного канала. Микроконтроллеры STM32WB55 поддерживают беспроводные стандарты Bluetooth™ 5 и IEEE 802.15.4.

Благодаря использованию двух абсолютно независимых ядер создателям STM32WB55 удалось оптимизировать архитектуру микроконтроллера для выполнения программ в режиме реального времени (в том числе при работе с радиоканалом), а также обеспечить гибкое использование ресурсов и эффективное управление питанием, что, в свою очередь, позволило снизить стоимость и повысить удобство использования.

Микроконтроллеры STM32WB производятся по той же технологии, что и малопотребляющие микроконтроллеры STM32L4, и предлагают такой же набор цифровой и аналоговой периферии. По этой причине STM32WB становятся отличным выбором для приложений, требующих как длительного срока службы батареи, так и развитого функционала.

P-NUCLEO-WB55

Отладочный набор P-NUCLEO-WB55 представляет собой законченное малопотребляющее беспроводное решение со встроенным радиоканалом и поддержкой Bluetooth® Low Energy (BLE) SIG v5.0 и IEEE 802.15. 4-2011.

Набор P-NUCLEO-WB55 состоит из отладочной платы Nucleo-68 и дополнительной USB-платы с собственным Bluetooth-модулем (рисунок 19).

Рис. 19. Отладочный набор P-NUCLEO-WB55

Рис. 19. Отладочный набор P-NUCLEO-WB55

Основными особенностями P-NUCLEO-WB55 являются:

  • ВЧ-приемопередатчик 2,4 ГГц с поддержкой Bluetooth® v5.0 и IEEE 802.15.4-2011 PHY и MAC;
  • встроенный 32-битный процессор Cortex® M0 + Arm® для работы с радиоканалом в режиме реального времени;
  • три пользовательских светодиода;
  • три пользовательские кнопки и одна кнопка сброса;
  • разъем USB Micro-B;
  • сокет Arduino™ Uno V3;
  • сокет ST morpho;
  • встроенная антенна на печатной плате или SMA-разъем для подключения внешней антенны;
  • гибкая система питания: от 5 В USB или от внешнего источника питания;
  • держатель для батареек CR2032;
  • встроенный отладчик/программатор ST-LINK/V2-1 с подключением через USB. ST-LINK можно использовать не только в качестве программатора/отладчика, но и в качестве запоминающего устройства и виртуального COM-порта;
  • бесплатные библиотеки и примеры, а также поддержка STM32Cube;
  • поддержка различных интегрированных сред разработки (IDE), в том числе IAR™, Keil®, IDE на основе GCC, Arm® Mbed™.

Плата расширения X-NUCLEO-IKS01A3

X-NUCLEO-IKS01A3 – плата расширения производства компании ST, позволяющая оценить работу различных инерционных МЭМС-сенсоров и датчиков параметров окружающей среды (рисунок 20).

Рис. 20. Плата X-NUCLEO-IKS01A3 позволяет оценить работу различных инерционных МЭМС-сенсоров и датчиков параметров окружающей среды

Рис. 20. Плата X-NUCLEO-IKS01A3 позволяет оценить работу различных инерционных МЭМС-сенсоров и датчиков параметров окружающей среды

Данная плата совместима с сокетом Arduino UNO R3 имеет в своем составе комбинированный инерционный модуль LSM6DSO (трехосевой акселерометр + трехосевой гироскоп), трехосевой магнитометр LIS2MDL, трехосевой акселерометр LIS2DW12, датчик влажности и температуры HTS221, датчик давления LPS22HH и датчик температуры STTS751.

X-NUCLEO-IKS01A3 взаимодействует с микроконтроллером STM32 по интерфейсу I²C.

Установка оборудования

Для работы с программным пакетом FP-SNS-MOTENVWB1 необходимы следующие аппаратные компоненты:

  • одна отладочная плата P-NUCLEO-WB55;
  • одна плата расширения X-NUCLEO-IKS01A3;
  • один USB-кабель типа USB A – Mini USB B для подключения платы P-NUCLEO-WB55 к ПК.

Настройка программного обеспечения

Для работы с отладочной платой P-NUCLEO-WB55 и платой X-NUCLEO-IKS01A3 потребуется:

  • FP-SNS-MOTENWB1 – программный пакет STM32Cube для малопотребляющих BLE-приложений. Данный программный пакет и сопутствующую документацию можно найти на сайте.
  • Компилятор и тулчейн. FP-SNS-MOTENWB1 предлагает пользователям три варианта:
    • IAR Embedded Workbench для ARM® (EWARM) + ST-LINK;
    • RealView Microcontroller Development Kit (MDK-ARM) + ST-LINK;
    • System Workbench for STM32 (SW4STM32) + ST-LINK.

Настройка системы

Плата P-NUCLEO-WB55 имеет в своем составе встроенный отладчик/программатор ST-LINK/V2-1. Разработчик может самостоятельно обновлять драйвер и прошивку отладчика USB ST-LINK/V2-1 с помощью программ STSW-LINK008 или STSW-LINK009, которые можно найти на сайте www.st.com.

Рис. 21. Отладочная плата P-NUCLEO-WB55 с установленной платой расширения X-NUCLEO-IKS01A3

Рис. 21. Отладочная плата P-NUCLEO-WB55 с установленной платой расширения X-NUCLEO-IKS01A3

Плата расширения с датчиками X-NUCLEO-IKS01A3 легко подключается к P-NUCLEO-WB55 с помощью сокета Arduino UNO R3 (рисунок 21).

Оригинал статьи

Перевел Вячеслав Гавриков по заказу АО КОМПЭЛ

•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
STM32WB55CGU7 (ST)
STM32WB55CGU6TR (ST)
STM32WB55CGU6 (ST)
STM32WB55CСU6 (ST)
STM32WB55CEU6TR (ST)
STM32WB55CEU6 (ST)
STM32WB55CCU7 (ST)
STM32WB55CCU6 (ST)
STM32WB55CCU6TR (ST)
P-NUCLEO-WB55 (ST)
X-NUCLEO-IKS01A3 (ST)