[Перевод] Использование GATT в Bluetooth LE на Intel Edison

2cf8f0f10b70445c8dd183f26815009b.png Intel Edison способен стать мозгом любого устройства из армии интернета вещей. Мозг умеет обрабатывать информацию, но для того, чтобы её получать, ему нужны органы чувств. Например, как Edison может узнать, жарко или холодно сейчас в помещении? Ответ прост – с помощью температурного сенсора.

Из этого материала вы узнаете о том, как использовать профиль общих атрибутов (Generic Attribute Profile, GATT) при организации взаимодействия Intel Edison с Texas Instruments SensorTag по протоколу Bluetooth Low Energy.

Перед тем, как мы начнём


Для того чтобы вы смогли воспользоваться этим руководством на практике, вам понадобится собранная плата Intel Edison, прошивка которой обновлена до самой свежей версии. Между платой и компьютером должно быть установлено соединение, эмулирующее подключение по последовательному (serial) порту, кроме того, устройство должно иметь доступ в Интернет по Wi-Fi. Если вам, для подготовки платы, нужна помощь, обратитесь к руководствам по началу работы с Intel Edison.

Установка Gatttool


Texas Instruments SensorTag, как и многие другие Bluetooth-устройства, поддерживает GATT для связи с компьютерами, смартфонами, планшетами. Gatttool – это стандартный набор программных инструментов, который входит в состав пакета BlueZ. Он, однако, по умолчанию на Intel Edison не установлен. Для того чтобы это исправить, нужно подключиться к Intel Edison через эмулятор терминала, после чего – загрузить и скомпилировать BlueZ с использованием следующих команд:

root@edison: cd ~
root@edison: wget       
https://www.kernel.org/pub/linux/bluetooth/bluez-5.24.tar.xz –no-check-certificate
root@edison: tar -xf bluez-5.24.tar.xz
root@edison: cd bluez-5.24
root@edison: ./configure --disable-systemd –disable-udev
root@edison: make
root@edison: make install


Для того чтобы gatttool можно было запускать отовсюду, модифицируем переменную PATH:

root@edison: export PATH=$PATH:~/bluez-5.24/attrib/


Сканирование эфира и обнаружение BLE-устройств с помощью bluetoothctl


1. Включим Bluetooth на Intel Edison.

root@edison: rfkill unblock bluetooth


2. Запустим bluetoothctl

root@edison: bluetoothctl


3. Зарегистрируем агента и установим его в состояние по умолчанию.

[bluetooth]# agent KeyboardDisplay
[bluetooth]# default-agent
[bluetooth]# scan on


4. Если SensorTag найти не получается, нажмём на нём кнопку сопряжения с другими устройствами. После того, как удалось выяснить MAC-адрес SensorTag, режим сканирования можно выключить и выйти из сеанса работы с bluetoothctl.

[bluetooth]# scan off
[bluetooth]# quit


bf5fa1692150fe8975e7baeaaea68c1d.png
Выделенный MAC-адрес SensorTag, обнаруженный в ходе поиска Bluetooth-устройств.

Использование gatttool для чтения показаний датчика


Теперь мы можем воспользоваться gatttool для того, чтобы прочесть показания датчика с SensorTag.

1. Запустим gatttool в интерактивном режиме, используя MAC-адрес, выясненный на предыдущем шаге.

root@edison: gatttool -b 34:B1:F7:D5:15:38 –I


2. Подключимся к устройству и включим температурный датчик, записав 01 в идентификатор настроек (configure handle) 0x29. После этого прочтём показатели температуры из идентификатора 0x25.

[34:B1:F7:D5:15:38][LE]> connect
[34:B1:F7:D5:15:38][LE]> char-write-cmd 0x29 01
[34:B1:F7:D5:15:38][LE]> char-read-hnd 0x25


Код идентификатора, необходимый для доступа к температурному датчику, мы взяли из Таблицы атрибутов SensorTag.

1e65b9ff491082c09caf9715ad138920.png
Показания с температурного датчика, полученные с SensorTag

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

Использование Python для интерпретации показаний датчика


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

root@edison: wget https://github.com/msaunby/ble-sensor-
pi/archive/master.zip -–no-check-certificate
root@edison: unzip master.zip
root@edison: cd /ble-sensor-pi-master/sensortag


2. Откроем скрипт sensortag_test.py с помощью vi.

root@edison: vi ./sensortag_test.py


3. Внесём изменения в строку 62. А именно, этот код:

tool.expect('\[CON\].*>')


заменим на этот:

tool.expect('Connection successful')


4. После внесения правок сохраним их и выйдем, нажав Escape и введя следующую команду:

:wq


Установка pip и необходимых модулей Python


Для запуска Python-скрипта с использованием pexpect, последний нужно установить. Легче всего это сделать с помощью Pip. Pip не установлен на Intel Edison по умолчанию, его нет в официальном репозитории opkg. Однако Pip можно найти в неофициальном репозитории Intel Edison, который собрал Michael Hirsch. Следующие инструкции составлены на основе его руководства по использованию неофициального репозитория.

1. Отредактируем файл base-feeds.conf с помощью vi.

root@edison: vi /etc/opkg/base-feeds.conf


2. Введём следующее:

src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32<source>

3. Нажмём Escape и введем:

<source>:wq


4. Обновим opkg и установим Python.

root@edison: opkg update
root@edison: opkg install python-pip


Установим средства настройки (setup tools) Pip:

root@edison: wget
https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
-–no-check-certificate -O - | python>


Запуск Python-скрипта и чтение показаний температуры


Теперь всё готово для того, чтобы запустить скрипт, который читает показания температурного датчика. Для этого нужно перейти в директорию /ble-sensor-pi-master/sensortag и выполнить следующую команду:

root@edison: ./sensortag_test.py 34:B1:F7:D5:15:38


mm8vVQHs6HswRz76utUCfILa8O6o7oiV1Tev8lPf
Чтение показаний температурного датчика с помощью Python-скрипта

Итоги


Теперь вы знаете, как Intel Edison может получать и обрабатывать данные о температуре от внешнего датчика, подключённого по Bluetooth LE. Похожий принцип можно использовать, во-первых – для того, чтобы подключать к Edison другие Bluetooth-устройства, а, во-вторых – для сбора показаний других датчиков TI SensorTag. Удачных экспериментов!

© Habrahabr.ru