Using the Generic Attribute Profile (GATT) in Bluetooth Low Energy with your Intel Edison Board

By Promotion Published Date
05 - Jun - 2015
| Last Updated
05 - Jun - 2015
Using the Generic Attribute Profile (GATT) in Bluetooth Low Energ...


This guide will teach you how to use GATT profile, by interfacing with the Texas Instruments SensorTag over Bluetooth* Low Energy.


You have assembled your Intel® Edison board, updated to the latest firmware, connected via serial and connected the board to Wi-Fi*. If you need help completing these steps, please refer to the Getting Started Guides.

Install Gatttool

The TI SensorTag, along with many other Bluetooth devices, uses the Generic Attribute Profile (GATT) to interface with your computer and other devices. Gatttool is a standard tool included in the BlueZ software package, but it is not installed on the Intel Edison board by default. To install it, download and compile BlueZ 5.24 by logging in to your Intel Edison board over serial and entering the following commands:
root@edison: cd ~
root@edison: wget –    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

To be able to launch gatttool from anywhere add it to the path:
root@edison: export PATH=$PATH:~/bluez-5.24/attrib/

Scanning and discovering BLE devices with bluetoothctl

1. First enable Bluetooth on the Intel Edison board.
root@edison: rfkill unblock bluetooth
2. Launch bluetoothctl.
root@edison: bluetoothctl
2. Register an agent and set it to default.
[bluetooth]# agent KeyboardDisplay
[bluetooth]# default-agent
[bluetooth]# scan on
4. If the SensorTag does not show up in the scan, click the pair button on the side of the SensorTag. Once you have discovered the SensorTag MAC address, you can turn off scan mode and quit.
[bluetooth]# scan off
[bluetooth]# quit

In the screen shot above the SensorTag MAC address is highlighted.

Use gatttool to read sensor values

gatttool can now be used to read sensor data from the SensorTag.
1. Launch gatttool in interactive mode using the MAC address you received from the previous step.
root@edison: gatttool -b 34:B1:F7:D5:15:38 -I
2. Connect to the device, turn on the temperature sensor by writing 01 to the configure handle 0x29, and read out the value from the temperature handle 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
The handle values corresponding to the temperature sensor were pulled from the Sensor Tag attribute table:

The output is two 16-bit unsigned values. Tto convert these values to a temperature reading they must be fed into a script that uses the conversion algorithm outlined in the SensorTag wiki:

Download Python* Script to Interpret Sensor Data

1. One way of creating such a script is using the Python* programming language and the pexpect module. As an example, you can download the Python script from: and use it to read out temperature values from the SensorTag.
root@edison: wget
pi/archive/ -–no-check-certificate
root@edison: unzip
root@edison: cd /ble-sensor-pi-master/sensortag
2. Open with vi.
root@edison: vi ./
3. Change line 62 from
tool.expect('Connection successful')
4. Once the edit is made save and quit by pressing Escape and entering:

Installing pip and required Python modules

To run the Python script using pexpect, pexpect must be installed, which is easiest to do with Pip. Pip is not installed on the Intel Edison board by default and is not present in the official opkg repo. However, Pip is in the unofficial Intel Edison board’s repo compiled by Michael Hirsch. The following is an excerpt from his guide on using the unofficial repo from:
1. Use vi to edit the base-feeds.conf file.
root@edison: vi /etc/opkg/base-feeds.conf
2. Enter:
src/gz all
src/gz edison
src/gz core2-32
3. Press Escape and enter:
4. Update opkg and install Python
root@edison: opkg update
root@edison: opkg install python-pip
5. >Install setup-tools for Pip
root@edison: wget
-–no-check-certificate -O - | python>

Launch Python script and read out temperature

You are now ready to run the temperature script. From the  /ble-sensor-pi-master/sensortag directory, type the following command.
root@edison: ./ 34:B1:F7:D5:15:38
The output should be similar to the screen shot below.

For more such intel IoT resources and tools from Intel, please visit the Intel® Developer Zone