РадиоЛоцман - Все об электронике

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

Microchip RN4870 RN4871

Aaron Hanson

allaboutcircuits.com

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

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

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

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

Демонстрационный проект 3. Подключение аналогового датчика.

В качестве аналогового датчика, который подключен к модулю RN487x, используется потенциометр (Рисунок 9).

К Bluetooth модулю RN487x подключен потенциометр в качестве аналогового датчика.
Рисунок 9. К Bluetooth модулю RN487x подключен потенциометр
в качестве аналогового датчика.

Снова наш демонстрационный проект требует реализации трех основных функциональных компонентов:

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

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

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

Входной аналоговый сигнал обеспечивается с помощью потенциометра RV1 (Рисунок 10). В соответствии с техническим описанием на модуль RN487x, входной диапазон встроенного аналого-цифрового преобразователя составляет VCC – GND, поэтому мы подключаем потенциометр к порту P1_2, как указано на схеме (Рисунок 10). Назначение оставшихся компонентов остается без изменений (см. демонстрационный проект 1).

Схема подключения потенциометра к Bluetooth модулю RN4871.
Рисунок 10. Схема подключения потенциометра к Bluetooth модулю RN4871.

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

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

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

PS,59c88760536411e7b114b2f933d5fe66
PC,59c889e0536411e7b114b2f933d5fe66,02,02

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

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

Третий параметр в команде PC определяет размер значения в байтах: в этом случае "02", ввиду того, что аналого-цифровой преобразователь (АЦП) выдает 16-разрядный результат (полный диапазон 0x0000 – 0x0E10).

Скрипт нашей конфигурации для данного примера выглядит следующим образом:

@CONN
SM,2,0010
@DISCON
SM,2,0000
@TMR2
$VAR1=@,2
SHW,0072,$VAR1
SM,2,0010

Этот скрипт заставляет АЦП  каждые 10 мс преобразовывать значение напряжения на аналоговом входе и помещать оцифрованное значение в переменную базы данных. Уникальная для этого примера функция в скрипте – это таймеры.

В скрипте используются методы:

  • @CONN: метод выполняется при подключении клиента. Запускает таймер.
  • @DISCON: метод выполняется при отключении клиента. Останавливает таймер.
  • @TMR2: метод запускается при срабатывании таймера. Передает значение АЦП в базу данных. Таймеры RN487x являются «однократными» (срабатывают только один раз), поэтому мы также должны позаботиться о перезапуске таймера.

Данный скрипт «поддерживает» модуль в активном состоянии пока подключен клиент, соответственно, энергопотребление модуля будет высоким. Лучше всего этот  момент учитывать в проекте клиентского приложения: клиент должен подключаться к периферийному устройству только при необходимости получить результаты АЦП.

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

Программа на Python meter.py доступна для скачивания в разделе загрузок. Не забудьте изменить MAC адрес в тексте программы на MAC адрес вашего Bluetooth модуля. Подайте питание на модуль и запустите клиентское приложение в среде с существующим Bluetooth окружением.

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

Демонстрационный проект 4. Аналоговый выход

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

Как и прежде, для нашей системы требуется создать три функциональных компонента:

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

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

Роль «аналогового выхода» обеспечивается светодиодом D1 (Рисунок 11). Bluetooth модуль RN4870 будет генерировать ШИМ сигнал  (последовательность прямоугольных импульсов) на выводе P2_3. Это распространенный метод выражения аналогового значения, которое также может быть преобразовано в напряжение с помощью фильтра нижних частот.

Схема подключения светодиода к ШИМ выходу Bluetooth модуля RN4870.
Рисунок 11. Схема подключения светодиода к ШИМ выходу Bluetooth модуля RN4870.

Как вы заметили, в этом примере используется модуль RN4870. Это бусловлено тем, что модуль RN4871 не имеет аналоговых выходов. Подключение ШИМ сигнла непосредственно к светодиоду позволит нам оценить аналоговый диапазон по яркости свечения светодиода. Питание схемы и дополнительные элементы в схеме – без изменений.

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

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

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

PS,59c88760536411e7b114b2f933d5fe66
PC,59c889e0536411e7b114b2f933d5fe66,08,14

Первой командой создаем службу, второй – характеристику. Второй параметр в команде PC сообщает Bluetooth уровню, как изменения в значении должны попадать на периферийное устройство. В данном случае параметр "08" говорит, что периферийное устройство должно отправлять подтверждение клиенту при изменении значения. Третий параметр "14" в команде определяет размер значения в байтах – 14 байт в этом случае. Хотя полная команда включения ШИМ может быть выражена 4 байтами, мы используем вызов удаленной функции, который требует больше места. Этот нюанс мы объясним ниже.

Скрипт нашей конфигурации для данного примера выглядит так:

@PW_ON
72=?FUNC1
?FUNC1
[,2,2,$PM1,$PM2

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

  • @PW_ON: выполняется при подаче питания. Метод связывает функцию «?FUNC1» с переменной базы данных. Соответствующая переменная базы данных определяется дескриптором характеристики "72".
  • ?FUNC1: запускается всякий раз, когда клиент записывает значение в переменную базы данных, идентифицированную дескриптором "0072". Параметры метода определяются значениями, которые клиент записывает в переменную. Метод берет эти две переменные "$PM1" и "$PM2" и использует их для управления частотой и скважностью сигнла ШИМ, который подключен к светодиоду.

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

Программа на Python volume.py доступна для скачивания в разделе загрузок. Напомним: перед запуском замените значение MAC адреса.

После запуска приложение сначала будет информировать о статусе подключения к периферийному устройству. После подключения периферийного устройства программа будет отправлять диапазон значений. Значения будут медленно увеличиваться, а затем уменьшаться. В результат яркость светодиода будет сначала увеличиваться, затем снижаться.

Особенностью данного примера является использование вызова удаленной функции.

Ниже представлено видео, демонстрирующее работу всех рассмотренных в статье примеров.

 

 

Для любого из демонстрационных проектов, рассмотренных в статье, можно использовать отладочную плату Microchip RN-4870-SNSR, которая, помимо периферии для наших примеров, содержит дополнительный функционал. Тем не менее, при наличии навыков работы с миниатюрными компонентами (модули RN487x предназначены для поверхностного монтажа), ручная сборка на макетной плате является самым бюджетным вариантом.

Публичные и частные характеристики

128-разрядные UUID, которые мы использовали для идентификации характеристик в проектах, в стандарте Bluetooth называются частными характеристиками. Частная характеристика обычно используется в случае клиентского приложения и периферийных устройств, которые разрабатываются одним производителем (поставщиком) оборудования/ПО. Альтернативой является 16-разрядная характеристика, которая имеет общедоступное определение и зарегистрирована в Bluetooth SIG. Посмотреть зарегистрированные характеристики можно в [1] . Также возможно зарегистрировать новые определения. Следует отметить, что там, где используются общедоступные характеристики (определения), становится возможным взаимодействие между различными поставщиками оборудования и ПО. Модуль серии RN487x поддерживает общедоступные определения.

Несмотря на то, что в каждом из демонстрационных проектов используется только один аппаратный сигнал, это не является ограничением для модуля. Как обсуждалось ранее, модуль RN487x имеет несколько портов ввода/вывода, и их можно использовать одновременно. Скрипты резервирования портов ввода/вывода могут быть объединены для нескольких выводов, памяти NVRAM достаточно для определения множества служб и характеристик. И, конечно же, клиентское приложение может управлять множеством характеристик и связанных событий, и все это в рамках одного подключенного устройства.

Ссылки

  1. GATT Services

Загрузки

  1. Клиентские приложения (Python) для ПК: meter.py для примера 3 и volume.py для примера 4

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Sensors and Controls with the RN487x Bluetooth Module from Microchip. Part 4 - How to Build an Analog Sensor and Analog Output

JLCPCP: 2USD 2Layer 5PCBs, 5USD 4Layer 5PCBs

RN4870 Купить ЦенаКупить RN4870 на РадиоЛоцман.Цены — от 14,71 до 11 904
10 предложений от 8 поставщиков
Модуль: Bluetooth Low Energy; GPIO, PWM, UART; SMD; 4.2; 12x15мм
Триема
Россия
RN4870-V/RM118
15 ₽
Элитан
Россия
RN4870U-V/RM118
Microchip
497 ₽
Интерия
Россия и страны СНГ
RN-4870-SNSR
Microchip
7 565 ₽
ЗУМ-СМД
Россия
RN4870-I/RM128
Microchip
по запросу
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя