Bluetooth решения Microchip

Bluetooth Low Energy

Технология Bluetooth Low Energy (BLE или Bluetooth Smart) начала развиваться как часть спецификации Bluetooth 4.0. Но не правильно представлять BLE как меньшую и более оптимизированную часть классического Bluetooth (Bluetooth Classic, BTC), так как BLE имеет другое происхождение и другие цели.

Изначально разрабатываемая компанией Nokia, технология Wibree в последствии была переработана Bluetooth Special Interest Group (SIG) в BlueTooth Low Energy. Первоначально авторы акцентировались на разработке радиочастотного стандарта с минимально возможным потреблением, ориентированным на низкую пропускную способность, малую сложность и минимальную стоимость решения. Однако в процессе разработки BLE получил возможность расширения (добавления частных, приватных сервисов) для обмена данными. Это фундаментальное отличие от классического Bluetooth (Bluetooth Сlassic), который сфокусирован на строгом наборе вариантов применения. BLE же предполагает разрешать любому, кто имеет идею и набор данных, поступающих от устройства, реализовать обмен без необходимости глубокого изучения основ технологии. Производители смартфонов и планшетов давно осознали предоставляемые возможности технологии и предоставляют гибкий низкоуровневый API чтобы дать разработчикам мобильных приложений больше свободы в использовании BLE для любых задач, где он может быть применим.

Спецификация Bluetooth 4.0 (а так же 4.1 представленная в декабре 2013г) описывает два стандарта: Bluetooth Classic (известный еще с более ранних спецификаций) и Bluetooth Low Energy. Эти два стандарта напрямую не совместимы и Bluetooth устройства спецификаций до 4.0 не могут связываться с BLE устройствами, но могут общаться со всеми BTC: радио протокол, протоколы верхнего уровня и протоколы приложений не совместимы между двумя стандартами. Устройства Dual Mode (Smart Ready) могут общаться как с BTC, так и BLE.

Совместимость BlueTooth устройств

Classic Bluetooth Smart ready Smart (BLE)
Classic Bluetooth (версии до 4.0) Да Да Нет
Smart ready Да Да Да
Smart (BLE) Нет Да Да

Компания Microchip предлагает несколько Bluetooth решений – от отдельных микросхем до модулей. Одно из ключевых преимуществ модулей это то, что обычно они уже сертифицированы производителем и имеют сертификаты FCC или CE/ETSI и прошли испытания в Bluetooth SIG (речь не идет о «китайских» no name изделиях).

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

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

Модуль Bluetooth Low Energy RN4020

Ключевые особенности:

  • Интегрированный стек Bluetooth 4.1 Low-Energy (BTLE)
  • Законченное решение для управления и контроля через малопотребляющее беспроводное соединение
  • Простые ASCII команды для управления модулем
  • Возможность применения в автономном режиме без внешнего микроконтроллера
  • Совместимость с другими Bluetooth LE устройствами

Компания Microchip Technology Inc. начала массовое производство своего первого BlueTooth Low-Energy модуля RN4020. Модуль соответствует спецификации BlueTooth и имеет сертификат Special Interest Group (SIG). Интегрированный BlueTooth Low Energy (BTLE) стек и поддержка SIG low-energy профилей ускоряет время разработки и выхода законченных решений на рынок, а гарантированная Bluetooth-совместимость устраняет необходимость в дорогостоящей сертификации.

Модуль RN4020 работает в диапазоне напряжений питания 3.0 … 3.6 В, содержит BlueTooth приемо-передатчик, контроллер радиоканала (BaseBand) и API, тактовый генератор, регулятор напряжения, Flash память 64Мб, UART интерфейс для связи с внешним микроконтроллером, 3 аналоговых и 7 цифровых порта В/В, имеет схему согласования с встроенной печатной антенной. Размеры модуля 11.5 x 19.5 x 2.5 мм.

Рис. 1

Модуль RN4020 может выступать в роли центрального (Central) или периферийного (Peripheral) узла сети, сервера (Server) или клиента (Client), поддерживает роли широковещательного передатчика (Broadcaster) или приемника (Observer).

Поддерживаемые сервисы

«Из коробки» модуль RN4020 поддерживает несколько стандартных BLE сервисов.

Таблица 1. Поддерживаемые стандартные сервисы и их UUID.

Название Сервиса Bluetooth SIG UUID Название Сервиса Bluetooth SIG UUID
Device Information 0x180A Next DST Change 0x1807
Battery 0x180F Reference Time Update 0x1806
Heart Rate 0x180D Link Loss 0x1803
Health Thermometer 0x1809 Immediate Alert 0x1802
Glucose 0x1808 TX Power 0x1804
Blood Pressure 0x1810 Alert Notification 0x1811
Running Speed Cadence 0x1814 Phone Alert Status 0x180E
Cycling Speed Cadence 0x1816 Scan Parameters 0x1813
Current Time 0x1805    

Активация стандартных сервисов позволяет BLE модулю быть понятым и общаться с другими совместимыми устройствами и программами, при этом RN4020 имеет возможность определения собственных сервисов.

Команды

Модуль RN4020 может быть подключен к любому микроконтроллеру, имеющему интерфейс UART. По UART передаются настройки, команды и данные.

Команды и их параметры вводятся в виде ASCII символов (заглавными или строчными – не имеет значения). Команды и параметры разделяются запятыми. Признаком окончания команды является символ перевода строки (<CR>).

Все команды делятся на следующие типы:

  • Команды Установки/Получения параметров
  • Команды действий
  • Команды доступа к характеристикам
  • Команды конфигурации приватного сервиса
  • Команды MLDP
  • Команды удаленного управления
  • Команды обновления прошивки

Команды Установки/Получения параметров (Set/Get команды)

Эта группа команд служит для конфигурирования специфических функций RN4020. Команды установки (Set) начинаются с символа S (s) и следующие за ним один или два символа, задающие идентификатор команды. Все команды Set должны иметь параметры, разделенные запятыми. Для вступления Set команд в силу в большинстве случаев требуется перезагрузка модуля. Конфигурируемые через Set команды параметры модуля хранятся в энергонезависимой памяти и восстанавливаются после перезагрузки или включения питания.

Команды получения параметров (Get) имеют те же идентификаторы, что и команды Set, но начинаются с символа G (g).

К командам установки/получения параметров относятся команды изменения режимов работы модуля, параметров UART, возможности обновления прошивки по воздуху и др., а также включения сервисов, параметров соединения, задание времени таймеров, имени модуля, версии прошивки и др.

Примеры:

SN,myDevice задает имя модуля
GN возвращает имя модуля

Команды действий (Action)

В основном используются для изменения функциональности модуля и индикации важной информации. К командам действий относятся: задание направления портов В/В, задание выходного уровня на цифровых и аналоговых портах В/В, считывание состояния портов, управление сканированием BT LE устройств, установки соединения, получения RSSI, перезагрузки модуля и др.

Команды доступа к характеристикам (Characteristic Access Commands)

Предоставление доступа к значениям и характеристикам – основа функционирования BTLE профилей и сервисов. Модуль RN4020 может выступать одновременно в роли сервера и клиента.

Поэтому существуют два набора сервисов и характеристик. Когда модуль выступает в роли сервера, то мы имеем сервисы сервера (server services) и все значения и конфигурации характеристик хранятся локально. Когда модуль является клиентом, то имеем сервисы клиента – все значения и конфигурации характеристик хранятся на удаленном сервере. При адресации к сервисам сервера первая буква команды доступа будет S (server), а при адресации к сервисам клиента – C (client).

Группой Bluetooth SIG одобрен общий набор спецификаций сервисов (public services specifications), которые предоставляют совместимость между устройствами различных производителей (к общим, «стандартизованным» сервисам относятся профили мониторов сердечного ритма, термометра, уровня заряда батареи и пр.). Все публичные сервисы и их характеристики имеют выделенные 16-и битные короткие UUID. Однако каждый может определить свой собственный приватный (private) сервис и его характеристики, но в этом случае нужно использовать 128-и битные UUID. Так как одна и та же характеристика может использоваться в разных сервисах (например, расположение сенсора используется в сервисах “Running Speed and Cadence”, “ Cycling Speed and Cadence” и др.), то адресация к 128-и битным приватным характеристикам не очень удобна. Для этого к каждой характеристике предоставляется уникальная 16-и битная ссылка (reference handle). Таким образом, каждая характеристика может адресоваться по её уникальному номеру UUID или по ссылке (handle). Отсюда вторая буква команды доступа: U – адресация по UUID или H – адресация по ссылке. Значение или конфигурация характеристики может быть прочитана (Read) или записана (Write) – отсюда следующая буква команды: R или W.

И наконец, обращение к характеристике может относиться к её значению (Value) или к её конфигурации (Configuration). Если доступ осуществляется по Handle, то проблемы нет – значение и конфигурация характеристики имеют разные номера Handle. Однако, если адресация по UUID, то в командах доступа необходима четвертая буква: V (обращение к значению Value) или C (обращение к конфигурации Configuration).

Пример:

SUW – Обращение к серверу (S) по UUID (U) на запись (W) значения
CHR – Обращение к клиенту (C) по хэндлу (H) на чтение (R) значения
CURC – Обращение к клиенту (C) по UUID (U) на чтение (R) значения конфигурации (С)

Две команды: LC – список сервисов клиента и LS – список сервисов сервера помогают определить какие сервисы активированы для конкретного BLE устройства.

Например, есть два BLE устройства. Одно сервер, другое клиент. Команды LS и LC, запущенные на клиенте, покажут список активных сервисов клиента и пустой список сервисов сервера. Но после установки соединения клиент дополнительно будет иметь доступ к сервисам сервера и наоборот, т.е. каждое из устройств будет иметь доступ как к сервисам клиента, так и сервера, а команды LS и LC покажут появление «чужих» доступных сервисов.

Команды конфигурации приватного сервиса (Private Service Configuration Commands)

Спецификация Bluetooth SIG определяет стандартизованные публичные сервисы и характеристики, что обеспечивает совместимость между стандартными BLE устройствами.

Но если вам не подходят определенные стандартом сервисы, вы можете определить приватные сервисы (при желании можно убедить Bluetooth SIG стандартизировать ваши сервисы, как например Apple стандартизировала iBeacon). Модули RN4020 предоставляют возможность описания своих приватных сервисов и характеристик как для режима сервера, так и клиента. Команды конфигурации приватных сервисов и характеристик начинаются с символа P.

Примеры:

PC,11223344556677889900AABBCCDDEEFF,1A,05
// Определяет приватную характеристику с UUID
// 0x11223344556677889900AABBCCDDEEFF
// Она читаема, записываемая и может присылать нотификации
// Максимальный размер характеристики 5 байт

PS,010203040506070809000A0B0C0D0E0F
// Определяет приватный сервис с UUID 0x010203040506070809000A0B0C0D0E0F

Команды MLDP

Microchip разработал приватный сервис, реализующий SPP-подобную передачу данных (SPP – Serial Port Profile, стандартный профиль потоковой передачи данных для классического BlueTooth). Соответственно модуль RN4020 имеет пару команд для конфигурирования режима шифрования и установления связи по MLDP.

Команды поддержки скриптов (Scripting Commands)

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

Команды удаленного управления Remote Command

Управление BLE модулем RN4020 осуществляется по проводному интерфейсу UART. Но также реализовано выполнение команд по воздуху на удаленном модуле, с которым предварительно установлено соединение (должен быть разрешен MLDP режим на обоих устройствах).

Наличие удаленного управления открывает такие возможности, как доступ к аналоговым и цифровым портам и автономное использование удаленного модуля, т.е. модуля без своего внешнего управляющего микроконтроллера – вся логика выполняется на контроллере центрального BLE модуля.

Команды обновления прошивки (DFU команды)

Позволяют осуществить обновление прошивки модуля RN4020 (Device Firmware Upgrade – DFU) в конечном изделии.

Модуль RN4020 поддерживает два метода обновления прошивки:

  • обновление через проводное соединение UART
  • беспроводное обновление по воздуху (Over-the-Air – OTA)

Профиль MLDP. Эмуляция беспроводного последовательного соединения

Спецификация BlueTooth Low-Energy не предусматривает стандартного варианта с поддержкой потоковой передачи данных, но в модуле RN4020 реализован приватный профиль MLDP (Microchip Low-Energy Data Profile), эмулирующий профиль SPP (Serial Port Profile), имеющимся в классическом BlueTooth.

Скорость потока передаваемых данных зависит от заданных параметров BT LE соединения. Для получения большей скорости потока требуется установка минимальных интервалов и таймаутов, что в свою очередь, влечет увеличение потребления. При установке MLDP соединения между двумя модулями все данные, передаваемые через UART транслируются через BlueTooth канал связи.

Профиль MLDP поддерживает 3 режима защищенной связи (устанавливается с помощью команды SE):

0 – передаваемые данные не защищены
1 – передаваемые данные зашифрованы (требуется привязка устройств – Bonding до начала передачи)
2 – передаваемые данные будут аутентифицированы (требуется разрешить аутентификацию, требуются свободные I/O для ввода кода аутентификации, требуется Bonding до начала передачи)

Профиль MLDP позволяет устанавливать связь между модулями RN4020, а также между смартфоном/планшетом и RN4020. Пример Android приложения с реализацией MLDP профиля можно скачать с сайта Microchip в исходных кодах.

Скрипты

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

В типовом применении микроконтроллер ASCII командами через UART управляет BLE модулем. Однако, для простых приложений могут не требоваться порты и вычислительные возможности внешнего микроконтроллера и обслуживание модуля может быть поручено скриптам. Даже при наличии внешнего микроконтроллера скрипты могут пригодиться для разгрузки внешнего приложения: выполнения инициализации модуля, выполнения действий при получении данных или возникновении других событий (изменения состояния портов ввода, срабатывание таймера и др.).

Скрипты в основном представляют собой те же ASCII команды, которые доступны через UART интерфейс.

Основа скриптов это События (Event).

События

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

Таблица 2. События для активации скриптов.

Событие Event Метка
Включение питания Power On @PW_ON
Таймер 1 Timer1 expired @TMR1
Таймер 2 Timer2 expired @TMR2
Таймер 3 Timer3 expired @TMR3
Установка соединения Connected @CONN
Разрыв соединения Disconnected @DISCON
Изменение состояние PIN13 в низкое состояние PIO4 (pin 13) Input Change to Low @PIOL
Изменение состояние PIN13 в высокое состояние PIO4 (pin 13) Input Change to High @PIOH
Высокоприоритетное оповещение High Priority Alert @ALERTH
Низкоприоритетное оповещение Low Priority Alert @ALERTL
Снятие оповещения Alert Off @ALERTO

Скрипт выполняется строка за строкой. Скрипт может содержать комментарии (начинаются с символа # и заканчиваются символом окончания строки).

Скрипты могут использовать две переменные ($VAR1 и $VAR2). Оператор «=» присваивает константу или результат выполнения ASCII команды. Например:

$VAR1 = “1234” # Присвоение переменной $VAR1 значения 0x1234
$VAR2 = @I,1 # Присвоение переменной $VAR2 значения уровня напряжения входа AIO1

После присвоения значения переменная может использоваться в ASCII командах. Например:

SHW,0019,$VAR1 # Значение переменной $VAR1 записывается в хэндл характеристики сервера 0x0019

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

Пример:

$VAR1 > “0050” && $VAR1 < “0120”  
$VAR2 > “0100” || $VAR2 < “0020”  
$VAR1 = @I,0  
$VAR2 = @I,1  
SHW,0019,$VAR1 # выполняется, если $VAR1 в заданном диапазоне
SHW,0021,$VAR2 # выполняется, если $VAR2 в заданном диапазоне

Первые две строки скрипта определяют переменные и диапазон валидности. Следующие две строки читают значения с аналоговых входов. Если переменные находятся в заданных диапазонах, то значения присваиваются соответствующим характеристикам сервера.

Handle Association

Порт ввода/вывода может быть ассоциирован с ссылкой (хэндлом) характеристики сервера. Как только от удаленного BLE устройства поступит запрос на чтение или запись характеристики, то будет считано состояние порта или изменено напряжение на нем без дополнительных инструкций. Аналоговый порт и четыре цифровых порта ассоциируются с хэндлом с помощью идентификатора «%».

Пример:

%0021 = @I,2

Эта строка скрипта ассоциирует хэндл-характеристику 0x0021 с чтением аналогового порта AIO2. Таким образом, когда удаленное устройство обращается за чтением характеристики 0x0021, будет произведено чтение АЦП с вывода AIO2 и результат отправлен на удаленное устройство.

@O,0,%0023

Данная строка ассоциирует хэндл-характеристику 0x0023 с операцией записи в аналоговый порт AIO0. То есть, когда удаленное устройство пишет по хэндлу в 0x0023, то значение используется для установки напряжение на AIO0.

Значение характеристики может быть ассоциировано с несколькими портами с помощью операнда И (“|I” для входов и “|O” для выходов). Например, следующая команда ассоциирует значения на выводах PIO1 и PIO7 к характеристики 0x0021 для чтения:

%0021 = |I,09

Следующей командой значение характеристики 0х0023 записывает в порты PIO2 и PIO3:

|O,06,%0023

Итоги

Одно из ключевых достоинств модулей это их сертификация, так как Bluetooth SIG. FCC или CE сертификация стоит порядка $10000.

Другое достоинство готовых модулей это то, что модули имеют отлаженную радиочастотную часть, для качественной разработки которой нужны специальные знания, оборудование и тестирование. Правильная разработка антенны и ВЧ-часть это нетривиальная задача, а плохо разработанная Радио-часть существенно влияет на дальность и потребление конечного устройства.

Модули RN4020 имеют встроенный BlueTooth Low Energy стек, набор простых ASCII команд и возможность создания скриптов. Эти особенности упрощают создание готовых BLE устройств и не требуют низкоуровнего программирования, установки специальных сред разработки, библиотек и компиляторов – разработчик может использовать привычные ему инструменты.

Разработчики встраиваемых приложений, для которых стоимость является немаловажным фактором, часто ищут законченные решения, позволяющие достаточно просто реализовать передачу данных по радиоканалу. Модули RN4020, помимо обеспечения энергоэффективной радиосвязи, соответствуют стандарту Bluetooth Low Energy и позволяют подключаться к большинству современных смартфонов и планшетов.

BlueTooth LE модуль RN4020 включает в себя все необходимое аппаратное и программное обеспечение, требуемое для легкого построения малопотребляющего беспроводного соединения. Все настройки модуля хранятся в энергонезависимой памяти, включая стандартные профили SIG low-energy и приватный профиль потоковой передачи данных MLDP. Помимо стандартных профилей имеется возможность создать собственные сервисы с помощью ASCII-команд. RN4020 обеспечивают мощность излучения до 7 dBm, чувствительность приема -92.5 dBm и имеет встроенную PCB антенну, что позволяет устройствам взаимодействовать друг с другом на расстоянии до 100 м.

Компания Microchip выпускает отладочную дочернюю плату RN4020 Bluetooth Low Energy «PICtail/PICtail Plus» (http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=rn-4020-pictail), совместимую с интерфейсами PICtail и PICtail Plus других отладочных плат Microchip. Данная плата позволяет проводить отладку кода путем подключения ее к компьютеру через USB.

Рис. 2. Отладочная плата RN4020 Bluetooth Low Energy «PICtail/PICtail Plus».

Примеры работы с модулем RN4020

Пример #1. Использование стандартных BLE сервисов

Монитор сердечного ритма. Настройки модуля:

ss,20000000 // Включаем heart rate monitor
sr,20000000 // Модуль как периферия, Auto Advertise
r,1 // Перезагрузка (запись новых параметров)

Отсылаем данные характеристики Heart Rate Measurement в соответствии со спецификацией BLE, см.: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml

suw,2a37,0045 // 0x2A37 – UUID характеристики Heart Rate Measurement (в соответствии со стандартом)
// 00 – флаги формата представления данных, тип данных и т.п.
// 45(hex) = 69 частота сердечного ритма

На устройстве с поддержкой BLE в любом приложении сердечного монитора можем наблюдать отображение данных (рис. 3).

Рис. 3. Отображение данных сердечного ритма в окне приложения для смартфона.

Пример #2. Обновление прошивки BLE модуля RN4020 по воздуху (OTA)

Удаленный модуль (на котором обновляем прошивку), конфигурируется как Peripheral с поддержкой MLDP (приватный сервис, эмуляция SPP-профиля классического BlueTooth):

+ // Echo On
V // Запрос версии прошивки
// Ответ: MCHP BTLE v1.10.09 06/09/2014
sr,10208000 // Флаги настойки модуля:
// 1 - Support MLDP
// 2 - Enable Remote Command
// 8 - Enable OTA
r,1 //Reboot
+ // Echo On
A // Start Advertise (можно задать Auto Advertise в параметре команды SR)

На модуле, с которого обновляется прошивка:

+ // Echo On
sr,92000000 // Флаги настойки модуля
// 9 – Central, Support MLDP
// 2 – UART Flow Control – обязательно для OTA
r,1 //Reboot
+ // Echo On
F // Начать сканирование
// ответ в виде 001EC01AA67F,0,MCHP-LE,-27
// формат: <BTADDR>, <PRIVATE>, <BTName>, <RSSI>
// где BTADDR (001EC01AA67F) – MAC адрес модуля, к которому подключаемся и у которого обновляем прошивку

Для модуля с прошивкой 1.20 ответ будет в формате <BTADDR>, <PRIVATE>, <BTName>, <UUID>, <RSSI>:

X // остановить сканирование
e,0,001ec01aa67f // подключиться к модулю с MAC адресом 001EC01AA67F
// Ответ: Connected
~,2 // перевод удаленного модуля в режим OTA обновления прошивки
// Ответ: OTA

Далее нужно выбрать передаваемый .bin файл обновления и отправить как текстовый файл (Textfile).

Через некоторое время (около минуты) ответ:

Upgrade OK

После этого (на удаленном модуле):

V // Запросить версию модуля
// Ответ: MCHP BTLE v1.20 12/09/2014

Пример #3. Удаленные команды

Все команды, которые доступны для управления модулем, можно выполнять на удаленном BLE модуле. Для этого должен быть включена возможность работы через MLDP.

Удаленные команды могут быть полезны для реализации дешевых датчиков, не содержащих микроконтроллер. Например, к удаленному модулю RN4020 подключена микросхема памяти 24LC256, в которую мы будем писать и читать из нее данные.

Сигнал 24LC256 RN4020
A0, A1, A2, Vss 1, 2, 3, 4 GND
SDA 5 21 pin
SCL 6 22 pin
WP 7 GND
Vcc (питание) 8 PIO7

Удаленное устройство:

sr,30208000 // Set features flags
// 3 = 2|1 = Auto Advertise | Support MLDP
// 2 Enable Remote Command
// 8 Enable OTA (не обязательно в данном примере)
r,1 // Reboot

Локальное устройство:

e,0,001ec019f6b0  
!,1 // включить режим выполнения удаленных команд
// ответ: RMT_CMD
// следующие команды будут выполняться на удаленном устройстве
]a,4,7 // инициализируем I2C интерфейс. Скорость 400кГц (параметр 4), управление питанием на PIO7 (параметр 7)

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

]ew,0050,0010,AABBCCDDEE // Записываем данные AABBCCDDEE начиная с адреса 10 (hex)
]er,0050,0000,17 // читаем 17(hex) байт данных, начиная с адреса 0000, с микросхемы, адрес которой 0050
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAABBCCDDEEFFFF // ответ
]ew,0050,0000,1122334455 // пишем 1122334455, начиная с адреса 0000
]er,0050,0000,17 // читаем 17(hex) байт данных, начиная с адреса 0000
1122334455FFFFFFFFFFFFFFFFFFFFFFAABBCCDDEEFFFF // ответ
]er,0050,0010,10 // читаем 10(hex) байт данных, начиная с адреса 0010
AABBCCDDEEFFFFFFFFFFFFFFFFFFFFFF // ответ
]z // Отключение I2C, снятие высокого лог. уровня с PIO7 (питание внешней EEPROM)

Аналогично к шине I2C можно подключить датчики температуры, часы реального времени, расширители портов и пр. периферию и считывать данные с них с удаленного BlueTooth LE модуля.

Пример #4. Команды формирования ШИМ

Модуль RN4020 может генерировать на 4-х портах независимые ШИМ сигналы, причем на каждом выводе можно сформировать ШИМ из двух паттернов (ШИМ последовательность 1 + ШИМ последовательность 2).

Формат команды:

[,PIO,UU,VV,WW,XX,YY,ZZ

Где PIO (значение 1, 2, 3, 7) – ШИМ на PIO1/2/3/7
UU(XX) – длительность лог.1 (кратно 30мкс)
VV(YY) – длительность лог.0 (кратно 30мкс)
WW(ZZ) – длительность 1-го (2) паттерна (кратно 16мс)

Пример команды:

[,7,01,02,01,02,01,01

С помощью ШИМ можно управлять исполнительными устройствами, формировать 2-х тональные звуковые сигналы. Как и все другие команды, формирование ШИМ на выводах можно осуществлять на удаленном BLE устройстве.

Пример #5. Скрипты

Для работы со скриптами есть несколько команд:

LW # показывает листинг существующего скрипта
WR,<параметр> # запуск скрипта на выполнение
WP # остановка выполнения скрипта
WC # очистка памяти скриптов
WW # режим ввода скрипта

Пример скрипта:

@PW_ON # событие: включение питания
SM,1,00500000 # инициализируем Таймер 1 на срабатывание через 5.24сек (0x00500000 = 5242880 мксек)
@TMR1 # событие: срабатывание таймера
SM,1,00500000 # инициализируем Таймер 1 на срабатывание через 5.24сек
N,0011223344556677889900 # данные для Broadcast сообщения
A,0064,00C8 # шлем пакет Broadcast сообщения с периодом 100мсек в течение 200мсек (т.е. 2 раза за сеанс)

Выход из режима ввода скрипта клавиша <ESC>.

Запускаем скрипт командой WR. Можно запускать скрипт автоматически по включению питания, для этого нужно сконфигурировать модуль на автозапуск скрипта (команда SR с установленным флагом 0x01000000 - Run Script After Power On).

С помощью снифера видим по два BLE Broadcast сообщения с интервалами 5.24 секунды.

Следующий пример скрипта раз в 5 секунд читает данные из внешней EEPROM по интерфейсу I2C (см. пример работы с I2C) и отсылает данные широковещательным (бродкаст) сообщением:

@PW_ON  
SM,1,00500000  
@TMR1  
SM,1,00500000  
]A,4,7 # инициализируем I2C, включаем питание внешней микросхемы (PIO7)
$VAR1 = ]ER,0050,0010,03 # читаем 3 байта
]z # отключаем I2C, снимаем питание с внешней микросхемы (PIO7)
N,$VAR1 # отсылаем 2 бродкаст пакета с данными из EEPROM
A,0064,00C8  

Если включить второй модуль RN4020 в режим Observer (приемник широковещательных сообщений), то в терминале увидим:

001EC019F6B0,0,-31,Brcst:AABBCC // в формате <MAC-адрес>, <тип MAC>, <RSSI>, <Broadcast: данные>

Аналогично можно организовать чтение данных из любой I2C периферии – датчика температуры, акселерометра, писать в ЖКИ и т.п.

На осциллограмме оранжевой линией обозначено потребление модуля (напряжение снято с шунта 10Ом). Синяя линия – напряжение на выводе PIO7 – питание микросхемы EEPROM, подключенной к модулю BLE.

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

Пример скрипта вывода данных на ЖКИ с драйвером PCF8576:

@PW_ON  
]a,4,7  
]c,0  
]w,70E0CFF380F8 # настройка драйвера
]c,1  
]w,706055555555 # 55555555 – данные, передаваемые в память драйвера ЖКИ
]c,2  
]z  

Модуль RN4677 BlueTooth Dual Mode

Модуль Microchip RN4677 поддерживает спецификацию 4.0 Bluetooth Dual Mode, то есть обеспечивает связь через Bluetooth Classic (BTC) и/или Bluetooth Low Energy (BLE). В режиме Bluetooth Classic модуль RN4677 поддерживает стандартный профиль последовательной передачи данных (Serial Port Profile, SPP), поэтому может использоваться для потоковой передачи данных между Bluetooth Classic устройствами, другими модулями, персональным компьютером, Android-устройствами и пр..

Особенность Apple iOS устройств это невозможность потоковой передачи данных без одобрения Apple и получения лицензии MFi (Made For i-device). Другими словами, чтобы открыть возможность передавать данные через BlueTooth Classic по протоколу iAP (iPod Accessory Protocol, проприетарный протокол аналогичный SPP) нужно быть лицензированным участником программы MFi, иметь возможность работы с чипом аутентификации от Apple. В режиме BTC модули RN4677 имеют интерфейс связи с крипточипом и могут общаться через iAP по BlueTooth при условии получения лицензии MFi.

В то же время BlueTooth Low Energy в iOS не имеет ограничений со стороны Apple и не нужно быть участником MFi для разработки устройств, способных работать с iOS-устройствами. Однако, как писалось выше, BLE не предназначается для потоковой передачи данных. Но модули RN4677 в дополнение к SPP в режиме BlueTooth Classic, имеют собственный приватный (private) GATT сервис (Generic Attribute Profile) для организации потоковой передачи данных между двумя BLE устройствами. Этот сервис называется «Прозрачный UART» (Transparent UART). При этом не нужно получать лицензию MFi от Apple для организации потоковой передачи данных между iOS устройством и RN4677.

Таким образом, особенность модуля RN4677 BlueTooth Dual Mode это возможность организовать «прозрачный UART» канал передачи данных для всех BlueTooth устройств (Apple iOS через BLE, Android и др. через BlueTooth Classic SPP).

Модули RN4677 базируются на BlueTooth чипе IS1677. Основное отличие между RN4677 и стандартной прошивкой чипа IS1677 (на этом же чипе со стандартной прошивкой выпускается модуль BM77) это предоставление интерфейса связи и конфигурации на основе ASCII команд. Командный интерфейс модулей RB4677 очень похож на описанный выше интерфейс модулей RN4020 и других (RN41, RN42, RN52).

Подобно другим RN модулям, RN4677 может выступать в роли матера/центрального узла, поддерживает активное сканирование для подключения к другим устройствам. Модуль работает в двух режимах: режим передачи данных (по умолчанию) и командный режим. Когда RN4677 подключен к другому BT устройству и находится в режиме передачи данных, то модуль выступает в роли «коммуникационной трубы» - все что приходит с UART передается через SPP, если модуль подключен к устройству с BlueTooth Classic, или через приватный GATT сервис «Прозрачный UART», если подключен к BLE. И наоборот – все что принимается через SPP или «Transparent UART» выходит из UART модуля.

Командный режим служит для настройки и конфигурирования модуля. Все настраиваемые параметры сохраняются в энергонезависимой памяти.

Так как по сути модуль RN4677 это тот же самый BM77, но с измененной прошивкой в части интерфейса общения по UART, то для нового модуля подходят те же утилиты, что и для BM77. Для проверки работы Transparent UART через BLE на iOS служит программа BLETR, доступная из AppStore. На стороне компьютера можно использовать любую терминальную программу или утилиту «BlueTooth chat».