Изучаем Bluetooth-модули RN487x для применения в своих периферийных проектах с низким энергопотреблением. Часть 3 - Настройка и использование цифровых входов/выходов

Изучаем Bluetooth-модули RN487x для применения в своих периферийных проектах с низким энергопотреблением. Часть 3 - Настройка и использование цифровых входов/выходов

Microchip  RN4870  RN4871

Aaron Hanson

allaboutcircuits.com

Часть 1
Часть 2

 

 

 

Изучаем, как использовать Bluetooth Low Energy модуль серии RN487x для прототипирования периферийных устройств  с цифровыми входами и выходами

В этой части статьи мы приступаем к рассмотрению и реализации основных целей: покажем, как создать и использовать в своих проектах цифровой вход (подключить кнопку) и цифровой выход (управление светодиодом) Bluetooth модуля RN487x. Пожалуйста, изучите инструкции по конфигурированию и инициализации модуля, рассмотренные в предыдущей части статьи.

Демонстрационный проект 1. Цифровой вход модуля RN487x, подключение кнопки

Для первого демонстрационного проекта нам потребуется реализовать три основных функциональных компонента:

  • Аппаратная реализация: специфическая для нашей задачи аппаратная часть для создания цифрового сигнала.
  • Конфигурация: команды модулю RN487x для выделения переменной в базе данных и связки сигнала с переменной.
  • Клиентское приложение: программа на Python для ПК для доступа к значению в базе данных.

Рассмотрим эти компоненты отдельно.

Аппаратная реализация цифрового входа

Роль цифрового входа выплняет простая кнопка SW1 (Рисунок 5).

Кнопка, установленная на монтажной плате модуля RN487x, для демонстрации работы цифрового входа.
Рисунок 5. Кнопка, установленная на монтажной плате модуля
RN487x для демонстрации работы цифрового входа.

Порты ввода/вывода RN487x имеют внутренние подтягивающие резисторы, поэтому кнопка SW1 с нормально разомкнутыми контактами, подключенная к «земле» при замыкании, даст нам два стабильных состояния (Рисунок 6).

Принципиальная схема подключения кнопки к Bluetooth модулю RN487x.
Рисунок 6. Принципиальная схема подключения кнопки к Bluetooth модулю RN487x.

Поскольку мы контроллируем только один входной цифровой сигнал и не используем ШИМ, мы выбрали модуль RN4871. Схема может питаться от двух батарей типа AAA или даже от одной 3 В батарейки (например, CR2032). Дополнительные элементы в схеме: С1 – шунтирующий конденсатор для стабилизации питания; R1, C2 – цепь формирует задержку сброса процессора при подаче питания; J1 – сигналы последовательного порта для конфигурирования.

Конфигурация модуля для работы с цифровым входом

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

Нам нужна только одна характеристика в базе данных модуля для предоставления состояния нашей кнопки. Таким образом, мы создаем одну службу и одну характеристику в этой службе. Для этого предназначены две следующие команды:

PS,59c88760536411e7b114b2f933d5fe66
PC,59c889e0536411e7b114b2f933d5fe66,10,01

Первая команда (PS) создает службу. Вторая команда (PC) создает характеристику. В обеих командах первый параметр – это идентификатор, который позволяет нашему периферийному устройству существовать во вселенной других периферийных Bluetooth устройств, и при этом доступ к нему будет уникальным. Этот параметр должен соответствовать стандарту UUID. Вы можете использовать указанные в примере значения, а также можете легко создать любое количество стандартных UUID с помощью сервиса [1].

В команде PC второй параметр сообщает Bluetooth уровню, как изменения в значении должны поступить клиенту. В данном случае параметр "10" говорит, что изменение значения должно привести к немедленному уведомлению клиентов. Это важная часть для нашей текущей задачи и примера. Наконец, в команде PC третий параметр определяет размер значения в байтах; в этом случае 1 байт (01).

Что касается скрипта (программа Bluetooth модуля для нашего примера) в конфигурации, то он должен иметь вид:

@PW_ON
SW,0A,09
@PIO1H
SHW,0072,01
@PIO1L
SHW,0072,00

Как видно, в скрипте используются три метода, каждый с префиксом «@». Каждый метод выполняется для определенного системного события.

  • PW_ON: данный метод запускается при подаче питания на модуль RN487x. Этот метод настраивает интересующий нас порт P1_2 как вход, «ожидающий» цифровой сигнал.
  • PIO1H: метод запускается всякий раз, когда сигнал на цифровом входе переходит в высокий уровень. Метод записывает «1» в базу данных.
  • PIO1L: метод запускается всякий раз, когда сигнал на цифровом входе переходит в низкий уровень. Метод записывает «0» в базу данных.

Клиентское приложение для получения данных от периферийного устройства

Программа на Python для примера работы с цифровым входом с именем switch.py доступна для скачивания в разделе загрузок. Отредактируйте программу и измените пример MAC-адреса на MAC-адрес вашего Bluetooth модуля. Далее, чтобы проверить демонстрационный проект, подайте питание на периферийное устройство и запустите программу Python на  выполнение в среде с поддержкой Bluetooth. Клиентское приложение будет уведомлять вас о процессе подключения к периферийному устройству. После подключения нажмите несколько раз на кнопку на периферийном устройстве: вы увидите, что каждое событие (замыкание/ размыкание контактов кнопки) будет отмечено соответствующим сообщением из клиентского приложения.

Программа на Python короткая, каждый функциональный блок программы и вызовы GATT API имеют подробные комментарии.

Используемая в нашем примере функция BLE – это уведомления. Мы используем метод обратного вызова для обработки события изменения сигнала от периферийного устройства, когда это происходит. Нет необходимости опрашивать периферийные устройства, чтобы узнать состояние сигнала (кнопки).  Для этого необходимо сообщить периферийному устройству, что нам нужны уведомления, путем записи системной характеристики.

Демонстрационный проект 2. Управление цифровым выходом (цифровое управление)

Для второго демонстрационного проекта нам снова потребуется реализовать три основных функциональных компонента:

  • Аппаратная реализация: специфическая для нашей задачи аппаратная часть для "доставки" цифрового сигнала.
  • Конфигурация: команды модулю RN487x для выделения переменной в базе данных и связки сигнала с переменной.
  • Клиентское приложение: программа на Python для ПК для записи значения в базу данных.

Рассмотрим эти компоненты отдельно.

Аппаратная реализация цифрового выхода

Для данного примера роль «цифрового выхода» обеспечивается светодиодом D1 (Рисунок 7).

Для демонстрации управления цифровым выходом RN487x используется светодиод.
Рисунок 7. Для демонстрации управления цифровым выходом
RN487x используется светодиод.

Принципиальная схема подключения светодиода к модулю RN487x изображена на Рисунке 8. Как вы можете заметить, отличия от первого примера (Рисунок 6) только в том, что к порту P1_2 вместо кнопки подключен светодиод с резистором. Типовые схемы для RN487x говорят о портах ввода/вывода с открытым коллектором, поэтому мы соответствующим образом подключаем светодиод через токоограничительный резистор.

Принципиальная схема подключения светодиода к модулю RN487x.
Рисунок 8. Принципиальная схема подключения светодиода к модулю RN487x.

Для примера управления цифровым выходом снова будем использовать модуль RN4871. Назначение дполнительных элементов в схеме без изменений (см. демонстрационный проект 1)

Конфигурация модуля для управления цифровым выходом

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

Нам нужна только одна характеристика в базе данных модуля для предоставления значения сигнала. Таким образом, мы создаем одну службу и одну характеристику в этой службе. Для этого предназначены две следующие команды:

PS,59c88760536411e7b114b2f933d5fe66
PC,59c889e0536411e7b114b2f933d5fe66,08,01

Первая команда (PS) создает службу, вторая (PC) создает характеристику. Идентификатор UUID можете использовать указанный в примере, либо сгенерировать свой [1].

В команде PC второй параметр сообщает Bluetooth уровню, как изменения в значении должны попадать на периферийное устройство. В данном случае параметр "08" говорит, что периферийное устройство должно отправлять подтверждение клиенту при изменении значения. Третий параметр в команде PC определяет размер значения в байтах, в этом случае 1 байт.

Скрипт в конфигурации Bluetooth модуля для данного примера управления цифровым выходом должен иметь вид:

@CONN
|O,08,72

В этом скрипте только один метод @CONN; он запускается каждый раз, когда клиент подключается к периферийному устройству.

Единственная строка скрипта представляет собой команду «обработки зависимости» с очень мощным результатом. Она связывает переменную в базе данных с командой вывода цифрового порта модуля. Параметр "08" является битовой маской, которая указывает порт, к которому подключен наш светодиод. Параметр "72" – это уникальный и постоянный дескриптор характеристики, которую мы создали в базе данных. Таким образом, каждый раз при подключении клиента, когда клиент записывает новое значение в переменную базы данных, наш светодиодный индикатор включается или выключается.

Клиентское приложение для управления цифровым выходом

Программа на Python для примера работы с цифровым входом с именем light.py доступна для скачивания в разделе загрузок. Отредактируйте программу и измените пример MAC-адреса на MAC-адрес вашего Bluetooth модуля. Далее, чтобы проверить демонстрационный проект, подайте питание на периферийное устройство и запустите программу Python на  выполнение в среде с поддержкой Bluetooth.

Программа будет выдавать сообщения о состоянии подключения к периферийному устройству. После выполнения подключения программа каждую секунду будет отправлять новую команду, в результате светодиод на периферийном устройстве будет включаться и выключаться. Каждый функциональный блок программы и вызовы GATT API снабжены подробными комментариями. Уникальная для этого примера функция BLE – привязка дескриптора.

Видео ниже демонстрирует примеры в действии.

 

 
 
Оригинал здесь.

Комментарии

Чтобы оставить комментарий, Вам нужно авторизоваться.