[Перевод] Использование GATT в Bluetooth LE на Intel Edison
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
Выделенный 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.
Показания с температурного датчика, полученные с 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
Чтение показаний температурного датчика с помощью Python-скрипта
Итоги
Теперь вы знаете, как Intel Edison может получать и обрабатывать данные о температуре от внешнего датчика, подключённого по Bluetooth LE. Похожий принцип можно использовать, во-первых – для того, чтобы подключать к Edison другие Bluetooth-устройства, а, во-вторых – для сбора показаний других датчиков TI SensorTag. Удачных экспериментов!