Reference   Language | Libraries | Comparison | Changes

CurieBLE : BLECharacteristic class

BLECharacteristic constructor


Characteristics contain at least two attributes: a characteristic declaration, which contains metadata about the data, and the characteristic value, which contains the data itself. Since characteristics have:

  • names
  • UUIDs
  • values
  • read/write/notify property

There are many Characteristic constructors depending on the data type you plan to use, like showed below.


  • BLEBoolCharacteristic yourCharacteristicName(UUID, properties)
  • BLECharCharacteristic yourCharacteristicName(UUID, properties)
  • BLEUnsignedCharCharacteristic yourCharacteristicName(UUID, properties)
  • BLEShortCharacteristic yourCharacteristicName(UUID, properties)
  • BLEUnsignedShortCharacteristic yourCharacteristicName(UUID, properties)
  • BLEIntCharacteristic yourCharacteristicName(UUID, properties)
  • BLEUnsignedIntCharacteristic yourCharacteristicName(UUID, properties)
  • BLELongCharacteristic yourCharacteristicName(UUID, properties)
  • BLEUnsignedLongCharacteristic yourCharacteristicName(UUID, properties)
  • BLEFloatCharacteristic yourCharacteristicName(UUID, properties)
  • BLEDoubleCharacteristic yourCharacteristicName(UUID, properties)

Note: BLE characteristics are typed.


  • UUID: standard 16-bit characteristic UUID
  • properties: what remote clients will be able to get notifications if this characteristic changes. It can assume the following values:
    • BLERead
    • BLEWrite
    • BLENotify


 * Copyright (c) 2016 Intel Corporation.  All rights reserved.
 * See the bottom of this file for the license terms.

#include <CurieBLE.h>

BLEPeripheral blePeripheral;  // BLE Peripheral Device (the board you're programming)
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEUnsignedCharCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = 13; // pin to use for the LED

void setup() {

  // set LED pin to output mode
  pinMode(ledPin, OUTPUT);

  // set advertised local name and service UUID:

  // add service and characteristic:

  // set the initial value for the characeristic:

  // begin advertising BLE service:

  Serial.println("BLE LED Peripheral");

void loop() {
  // listen for BLE peripherals to connect:
  BLECentral central = blePeripheral.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("LED on");
          digitalWrite(ledPin, HIGH);         // will turn the LED on
        } else {                              // a 0 value
          Serial.println(F("LED off"));
          digitalWrite(ledPin, LOW);          // will turn the LED off

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));

   Copyright (c) 2016 Intel Corporation.  All rights reserved.

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

See Also

Reference Home

Corrections, suggestions, and new documentation should be posted to the Forum.

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.