Модуль SIM868E: использование возможностей Bluetooth Low Energy
Введение
В текущем программном обеспечении, модуль SIM868E способен работать в сетях GSM одновременно по двум сим-картам (Dual Sim Dual Standby), принимать навигационные сигналы GPS/ГЛОНАСС и других систем, а также задействовать стеки Bluetooth Classic и Bluetooth Low Energy. Обзор основных возможностей SIM868Eбыл приведен в статье [3]. Там же подробно рассмотрена сама технология BLE, реализация пользовательских профилей, обзор встроенных, а также процесс взаимодействия с другими устройствами.
В данной статье рассмотрена клиентская часть: сканирование, подключение, взаимодействие с характеристиками и дескрипторами других устройств. Подробное описание всех используемых команд содержится в [4]. В качестве GATT-сервера в описанных примерах использовались приложения BLE Scanner[5], Light Blue[6], а также сам модуль SIM868E[3].
Сканирование адвертов
Процесс сканирования позволяет получить информацию об окружающих устройствах: mac-адрес, транслируемую информацию (advert), мощность сигнала.
Для примера (рис. 1) рассмотрим обнаружение iBeacon-маяка со следующими параметрами:
AT+BTPOWER=1 //включение Bluetooth OK AT+BLECREG //регистрация GATT-клиента +BLECREG: 1,ABCDEF50 //1 — id клиента, AVCDEF0 — имя OK AT+BLESCAN=1,1 //запуск сканирования: 1 — id клиента, 1 — начать сканирование OK +BLESCANRST: ABCDEF50,1,26,1e:dd:82:4b:74:a8,… …. +BLESCANRST: ABCDEF50,10,69,50:2d:ca:b6:38:dd,02011A1AFF4C000215B0702980A295A8ABF734031A98A512DE045708AEC8 //ABCDEF50 — имя GATT-клиента, 10 — индекс при сканировании, 69 — RSSI, 50:2d:.. — MAC адрес, 02011A… — транслируемая информация (advertising data) AT+BLESCAN=1,0 //прекращение сканирования (0) +BLESCAN: 0,0,ABCDEF50 OK
Данный режим может быть полезен для считывания информации с датчиков без подключения путем анализа транслируемой в эфир (advertising data). Другое возможное применение — это ориентация в пространстве, на основе одного или нескольких датчиков благодаря показателю мощности сигнала — RSSI (<RSSI>–127=<значение в дБм>, т.е. в указанном примере –58 дБм).
Также сканирование необходимо как обязательный первый этап перед подключением, т.к. для дальнейших операций используется индекс, полученный при сканировании (10 для iBeacon’a).
Соединение и запись в характеристику
Создадим профиль и добавим к нему характеристику для записи (рис. 2, 3).
Начальное значение — «0x0000»; характеристика доступна только для записи. В данном примере будет показана запись в характеристику без подтверждения (write without response). Для записи с подтверждением (write) требуется соответствующее значение для команды AT+BLECWC и подтверждение на стороне GATT-сервера.
Со стороны модуля SIM868E алгоритм следующий:
AT+BTPOWER=1 OK AT+BLECREG +BLECREG: 1,ABCDEF50 //1 — id клиента, AVCDEF0 — имя OK AT+BLESCAN=1,1 //запускаем сканирование OK +BLESCANRST: ABCDEF50,1,70,6b:fc:af:75:4d:7b,02011A030310100B09424C4520446576696365 … +BLESCANRST: ABCDEF50,4,25,… AT+BLESCAN=1,0 //останавливаем сканирование +BLESCAN: 0,0,ABCDEF50 OK AT+BLECCON=1,1,1 //соединение с удаленной стороной: 1 — id клиента, 1 — индекс при сканировании (самое первое устройство), 1 — тип соединения (прямое) OK +BLECCON: 1,ABCDEF50,6b:fc:af:75:4d:7b,1 //1 — соединение установлено, далее: имя клиента, mac-адрес, id соединения (1) AT+BLECSS=1,1 //получение сервисов в профиле устройства: 1 — id клиента, 1 —id соединения +BLECSS: ABCDEF50,1,1,0018,0,1 +BLECSS: ABCDEF50,2,1,0118,0,1 +BLECSS: ABCDEF50,3,1,6643AE107948F8A59145B4BB781E61D0,0,1 +BLECSS: ABCDEF50,4,1,AE045DDC43D3909342456749E080A49F,0,1 +BLECSS: ABCDEF50,5,1,0F18,0,1 +BLECSS: ABCDEF50,6,1,0518,0,1 +BLECSS: ABCDEF50,7,1,0A18,0,1 +BLECSS: ABCDEF50,8,1,D0002D121E4B0FA4994ECEB531F40579,0,1 +BLECSS: ABCDEF50,9,1,DCF855AD02C5F48E3A43360F2B50D389,0,1 +BLECSS: ABCDEF50,10,1,5BF1A927902AEC89C3411FE7D439940C,0,1 //имя GATT-клиента, 10 — порядковый номер сервиса в профиле, 1 — id соединения, id сервиса (CUSTOM SERVICE в настройках профиля сервера), номер для этого UUID-сервиса, 1 — тип сервиса: основной OK AT+BLECGC=10 //получение информации о характеристике +BLECGC: 0,ABCDEF50,1,10,1,9D539DBE320748B8954F7A4DAA8BC23D,0,140 //запрос информации о характеристике: 0 — информация получена, имя GATT-клиента, 1 — id соединения, 10 — порядковый номер сервиса, 1 — номер характеристики, id характеристики (в скриншоте из приложения — вторая строка «CUSTOM SERVICE»), номер для этой UUID характеристики, атрибуты данной характеристики (это число — доступные возможности: запись, расширенные свойства и т. д.) OK AT+BLECWC=10,1,0,1a2b3c,1 //запись в характеристику: 10 — порядковый номер сервиса, 1 — номер UUID-характеристики, 0 — тип аутентификации (нет), значение, 1 — тип записи — запись без подтверждения OK +BLECWC: 0,ABCDEF50,1,10,1 //подтверждение: 0 — успешно записано, имя GATT-клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики AT+BLECDISC=1,1 //команда на разрыв соединения, id клиента, id соединения OK +BLECCON: 0,ABCDEF50,6b:fc:af:75:4d:7b,1 //0 — соединение разорвано, имя клиента, mac-адрес, id соединения
Сразу после подачи AT+BECWCзначение на удаленной стороне изменилось на соответствующее (рис. 4).
Чтение характеристики
Создадим характеристику внутри сервиса с атрибутом чтения, значение — «0x223322» (рис. 5).
Процесс подключения аналогичен, отличия лишь в используемых командах при чтении:
AT+BLECCON=1,1,1 //подключение OK +BLECCON: 1,ABCDEF50,7d:ef:ad:c0:02:03,1 AT+BLECSS =1,1 //получение списка сервисов +BLECSS: ABCDEF50,1,1,0018,0,1 +BLECSS: ABCDEF50,2,1,0118,0,1 +BLECSS: ABCDEF50,3,1,6643AE107948F8A59145B4BB781E61D0,0,1 +BLECSS: ABCDEF50,4,1,AE045DDC43D3909342456749E080A49F,0,1 +BLECSS: ABCDEF50,5,1,0F18,0,1 +BLECSS: ABCDEF50,6,1,0518,0,1 +BLECSS: ABCDEF50,7,1,0A18,0,1 +BLECSS: ABCDEF50,8,1,D0002D121E4B0FA4994ECEB531F40579,0,1 +BLECSS: ABCDEF50,9,1,DCF855AD02C5F48E3A43360F2B50D389,0,1 +BLECSS: ABCDEF50,10,1,ABFC554CD54AFA9D8B4C6C648BE6C156,0,1 OK AT+BLECGC=10 //информация о характеристике +BLECGC: 0,ABCDEF50,1,10,1,9630AD29E03050A7E044362DD4D123CD,0,2 //атрибут 2 в конце — только чтение OK AT+BLECRC=10,1,0 //чтение характеристики: порядковый номер сервиса, номер UUID-характеристики, тип аутентификации (0 — нет) OK +BLECRC: 0,ABCDEF50,1,10,1,223322 //результат: 0 — успешно прочитана, имя GATT-клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики, значение //Меняем значение в характеристике на удаленном устройстве AT+BLECRC=10,1,0 //считываем заново OK +BLECRC: 0,ABCDEF50,1,10,1,001122 //значение изменилось на 001122 AT+BLECDISC=1,1 //разрываем соединение OK +BLECCON: 0,ABCDEF50,7d:ef:ad:c0:02:03,1
Получение нотификаций и работа с дескрипторами
Стандарт BLEпозволяет присылать уведомления об изменении характеристик. Существуют два типа уведомлений — индикация и нотификация. Первый тип лишь сообщает об изменении значения характеристики, второй также предоставляет измененную информацию в уведомлении.
Рассмотрим пример для сервиса, где есть атрибут нотификации:
AT+BLECCON=1,1,1 //подключение OK +BLECCON: 1,ABCDEF50,7d:ef:ad:c0:02:03,1 AT+BLECSS =1,1 //получение списка сервисов +BLECSS: … OK AT+BLECRN=1,1,1,10,1 //регистрация запроса на нотификацию: 1 — регистрация, id клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики +BLECRN: 1,0,ABCDEF50,1,10,1 //1 — регистрация, 0 — подтверждение, имя GATT-клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики OK //Внесены изменения в характеристику +BLECN: ABCDEF50,1,10,1,1,12345 //имя GATT-клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики, 1 — тип (нотификация), измененное значение Для работы с дескрипторами существуют отдельные команды — для записи и чтения: AT+BLECWD=1,1,10,1,1,0,121212,1 //id клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики, номер дескриптора, аутентификация (0 — нет), записанное значение, тип записи (1 — без подтверждения) OK +BLECWD: 0,ABCDEF50,1,10,1,1 //0 — успешно записан AT+BLECRD=1,1,10,1,1,0 //запрос на чтение: id клиента, id соединения, порядковый номер сервиса, номер UUID-характеристики, номер дескриптора, аутентификация (0 — нет) OK +BLECRD: 0, ABCDEF50,1,10,1,1,121212 //0 — дескриптор успешно прочитан, последний параметр — значение
Заключение
Модуль SIM868E, выполненный на обновленном чипсете от MediaTek, предоставляет широкие возможности для производителей М2М-оборудования. Наличие полноценного BLE-стека позволяет реализовать на базе модуля удобный и энергоэффективный обмен данными. В качестве возможных применений BLE может использоваться для навигации внутри помещений, идентификации пользователей, контроля доступа, мобильных приложений и считывания показаний беспроводных датчиков уровня топлива. Выбирая SIM868E, пользователь получает универсальное и доступное решение, сочетающее модуль сотовой связи, навигации и Bluetooth в едином корпусе.
1. www.simcomm2m.com.
2. www.mt-system.ru.
3. Новинский Д. Модуль SIM868E: обзор новых возможностей комбинированного решения // Беспроводные технологии. № 3. 2017.
4. SIM800 Series Bluetooth Application Note.
5. www.bluepixeltech.com.
6. www.punchthrough.com/blog.