Arduino Nano BLE Sense Rev2 with Headers Documentation
The Arduino Nano BLE Sense Rev2 with Headers is a compact and versatile microcontroller board that combines the power of the Nordic nRF52840 processor with built-in Bluetooth Low Energy (BLE) capabilities, a range of sensors, and a small form factor. This documentation provides an overview of the board's features, pinouts, and code examples to get you started with your IoT projects.
Nordic nRF52840 processor
Bluetooth Low Energy (BLE) capability
Built-in sensors:
+ LPS22HB pressure sensor
+ LSM6DS3 accelerometer and gyroscope
+ HTS221 temperature and humidity sensor
+ APDS-9960 light sensor
+ MP34DT05-A microphone
14 digital I/O pins
8 analog input pins
16 MHz crystal oscillator
USB connectivity and battery charging
Compatible with the Arduino IDE
The Arduino Nano BLE Sense Rev2 with Headers has a compact layout with the following pinouts:
Digital I/O pins: D0-D13
Analog input pins: A0-A7
Power pins: VCC, GND
USB pins: USB+
Reset pin: RST
I2C pins: SCL, SDA
SPI pins: SCK, MOSI, MISO
### Example 1: BLE Peripheral with Sensor Data
In this example, we'll create a BLE peripheral that broadcasts sensor data from the built-in temperature and humidity sensor.
```c
#include <ArduinoBLE.h>
const char deviceName = "Arduino Nano BLE Sense";
const char serviceName = " Temperature and Humidity Service";
const char temperatureCharacteristic = "TemperatureCharacteristic";
const char humidityCharacteristic = "HumidityCharacteristic";
BLEService service(serviceName);
BLEFloatCharacteristic temperatureCharacteristic(temperatureCharacteristic, BLECharacteristic::PROPERTY_NOTIFY);
BLEFloatCharacteristic humidityCharacteristic(humidityCharacteristic, BLECharacteristic::PROPERTY_NOTIFY);
void setup() {
Serial.begin(9600);
while (! Serial);
pinMode(LED_BUILTIN, OUTPUT);
// Initialize BLE
if (!BLE.begin()) {
Serial.println("Failed to initialize BLE");
while (1);
}
// Set device name and start advertising
BLE.setDeviceName(deviceName);
BLE.setLocalName(deviceName);
BLE.advertise();
// Initialize sensors
pinMode(LSM6DS3_INT, INPUT);
pinMode(HTS221_INT, INPUT);
// Initialize the service and characteristics
service.addCharacteristic(temperatureCharacteristic);
service.addCharacteristic(humidityCharacteristic);
BLE.addService(service);
}
void loop() {
BLEDevice central = BLE.central();
if (central) {
Serial.print("Connected to central: ");
Serial.println(central.address());
while (central.connected()) {
// Read temperature and humidity data
float temperature = readTemperature();
float humidity = readHumidity();
// Update characteristic values
temperatureCharacteristic.writeValue(temperature);
humidityCharacteristic.writeValue(humidity);
delay(1000);
}
Serial.print("Disconnected from central: ");
Serial.println(central.address());
}
}
float readTemperature() {
// Read temperature data from HTS221 sensor
uint8_t tempData[2];
HTS221.readTemp(tempData);
int tempRaw = (tempData[0] << 8) | tempData[1];
float temperature = -40 + (tempRaw 160) / 65536;
return temperature;
}
float readHumidity() {
// Read humidity data from HTS221 sensor
uint8_t humidData[2];
HTS221.readHumidity(humidData);
int humidRaw = (humidData[0] << 8) | humidData[1];
float humidity = -6 + (humidRaw 125) / 65536;
return humidity;
}
```
### Example 2: I2C Sensor Interfacing
In this example, we'll demonstrate how to read data from the built-in LPS22HB pressure sensor using the I2C protocol.
const int LPS22HB_I2C_ADDRESS = 0x5C;
void setup() {
Serial.begin(9600);
while (! Serial);
Wire.begin();
// Initialize LPS22HB pressure sensor
if (! lps22hbInit()) {
Serial.println("Failed to initialize LPS22HB");
while (1);
}
}
void loop() {
// Read pressure data from LPS22HB sensor
int pressureData[2];
if (lps22hbReadPressure(pressureData)) {
int pressure = (pressureData[0] << 8) | pressureData[1];
float pressureValue = pressure / 4096.0;
Serial.print("Pressure: ");
Serial.print(pressureValue);
Serial.println(" mbar");
}
bool lps22hbInit() {
Wire.beginTransmission(LPS22HB_I2C_ADDRESS);
Wire.write(0x10); // Reset register
Wire.write(0x00); // Reset value
return (Wire.endTransmission() == 0);
}
bool lps22hbReadPressure(int pressureData) {
Wire.beginTransmission(LPS22HB_I2C_ADDRESS);
Wire.write(0x02); // Pressure register
Wire.endTransmission();
Wire.requestFrom(LPS22HB_I2C_ADDRESS, 2);
pressureData[0] = Wire.read();
pressureData[1] = Wire.read();
return (Wire.available() == 0);
}
```
These examples demonstrate the Arduino Nano BLE Sense Rev2 with Headers' capabilities in IoT applications, including BLE peripheral functionality and I2C sensor interfacing.