nRF52832 Breakout Board Hookup Guide

Pages
Contributors: jimblom
Favorited Favorite 6

BLE Button Example

This example demonstrates how to use the BLE read and notify features. It monitors the button on pin 6 of the nRF52832 Breakout. When the button state changes a BLE notification is sent.

The Code

Using the BLEPeripheral library, upload this code to your Breakout:

language:c
// Import libraries (BLEPeripheral depends on SPI)
#include <SPI.h>
#include <BLEPeripheral.h>

//////////////
// Hardware //
//////////////
#define BTN_PIN    6 // BTN pin on 6
#define BTN_ACTIVE LOW

///////////////////////
// BLE Advertisments //
///////////////////////
const char * localName = "nRF52832 Button";
BLEPeripheral blePeriph;
BLEService bleServ("1234");
BLECharCharacteristic btnChar("1234", BLERead | BLENotify);

void setup() 
{
  Serial.begin(115200); // Set up serial at 115200 baud

  pinMode(BTN_PIN, INPUT_PULLUP);
  digitalWrite(7, HIGH);

  setupBLE();
}

void loop()
{
  blePeriph.poll();

  // read the current button pin state
  char buttonValue = digitalRead(BTN_PIN);

  // has the value changed since the last read
  bool buttonChanged = (btnChar.value() != buttonValue);

  if (buttonChanged) 
  {
    // button state changed, update characteristics
    btnChar.setValue(buttonValue);
  }
}

void setupBLE()
{
  // Advertise name and service:
  blePeriph.setDeviceName(localName);
  blePeriph.setLocalName(localName);
  blePeriph.setAdvertisedServiceUuid(bleServ.uuid());

  // Add service
  blePeriph.addAttribute(bleServ);

  // Add characteristic
  blePeriph.addAttribute(btnChar);

  // Now that device, service, characteristic are set up,
  // initialize BLE:
  blePeriph.begin(); 
}

Use the nRF Connect to Test

Use nRF Connect to connect to your nRF52832 Breakout -- just like last time. This time the name of the device should change to nRF52832 Button (if it's still "LED", try connecting anyway -- sometimes the local ID doesn't change until you've connected to it).

Tap into the "Unknown Service" again, but, this time, try tapping the single-down arrow to read the service's characteristic. This will read the state of the nRF52832 Breakout's pin 6 button. While the button is un-actuated, the value of the property should be 0x01. If you can hold the button down while also tapping the single-down arrow, the value should change to 0x00.

Reading the nRF52832's button in nRF Connect

Activate notify by tapping the triple-down-arrow. Then when you press the button, the value should automatically update.

You can also try setting the characteristic to notify, by tapping the triple-down arrow. In this mode, the value should automatically be notified when there's a change in state. Press and release the button to see the value change from 0x00 to 0x01.