Arduino Nicla Sense ME as a MKR Shield
Learn how to set up and use the Nicla Sense ME as a MKR Shield
Overview
The form factor of the Nicla Sense allows the board to be used as a MKR shield. In this tutorial, we will walk you through converting the Nicla Sense Board into a shield to extend some of the functionalities of the MKR boards, using the I2C communications, and explain how this communication functions through an example sketch.
Goals.
- How to solder the headers on the Nicla Sense ME
- How to establish an I2C communication between the MKR WiFi 1010 and the Nicla Sense
Required Hardware and Software
- Arduino IDE 1.8.10+ or Arduino Pro IDE 0.0.4+
- MKR WiFi 1010
- Nicla Sense ME
- 1x USB A Cable to Micro USB
- 2x row of Male Headers (1x9 1x8)
- Soldering tool and Stain.
- Libraries to be downloaded from the Library Manager
The following sketches can be found inside the Arduino_BHY2 and Arduino_BHY2Host libraries, available in the Library Manager. You will need to add the changes shown in this tutorial
Instructions
1. The Setup
You will need the latest version of the mbed_portenta core to be able to install the needed drivers for the Nicla Sense ME (minimum v2.5.2). Install the Arduino_BHY2 and Arduino_BHY2Host libraries from the Library Manager.
To convert the Nicla Sense ME into a Shield, you will have to solder 2 rows of headers: one side has 9 pins and the other 8 pins, the long side of the headers needs to be on the battery connectors side.
Once the headers are soldered, you can plug the Nicla on top of the MKR, having the Nicla Sense ME LED and Reset button pointing upwards. Additionally, to further confirm the correct positioning, the white silk outline in the GND pin of the Nicla Sense ME needs to be aligned with the MKR GND pin. Have a look at the video to figure out the correct orientation of the board.
This set-up works with the ESLOV cable as well. Keep in mind female headers or raw cables can be used as well, but make sure the connections of the pinout match with the MKR pinout (3V3, GND, SCL and SDA).
2. Structure of the Communication
The host (MKR WiFi 1010) will communicate through the BHY2Host library with the Nicla Sense ME (both devices communicate over I2C).
3. Host Communication of the MKR WiFi 1010
To make the host communicate with the Nicla Sense ME mounted as a shield, you can modify one of the existing examples. Open the sketch under Examples > Arduino_BHY2Host > Accelerometer and modify the
setup
function.Add the following parameters to
BHY2Host.begin()
: BHY2Host.begin(false, NICLA_AS_SHIELD);
The first parameter defines if the data should be passed through the Serial connection. This allows to control the Nicla Sense ME from a PC when connected through a host board. You can use the
arduino-bhy
tool to control the Nicla Sense ME from either the PC command line or from a webpage.Full sketch:
1#include "Arduino.h"2#include "Arduino_BHY2Host.h"3
4SensorXYZ accel(SENSOR_ID_ACC);5
6void setup()7{8 // debug port9 Serial.begin(115200);10 while(!Serial);11
12 BHY2Host.begin(false, NICLA_AS_SHIELD);13
14 accel.begin();15}16
17void loop()18{19 static auto printTime = millis();20 BHY2Host.update();21
22 if (millis() - printTime >= 1000) {23 printTime = millis();24 Serial.println(String("Acceleration values: ") + accel.toString());25 }26}
4. Program the Nicla Sense ME
Program the Nicla Sense ME with the App.ino sketch from the BHY2 library. You can find it under Examples > Arduino_BHY2 > App . Modify it as follows:
Navigate to the
setup
function and add two parameters to BHY2.begin()
1BHY2.begin(NICLA_I2C, NICLA_AS_SHIELD);
You may use
, NICLA_I2C
, NICLA_BLE
as first parameter, and as second one NICLA_BLE_AND_I2C
or NICLA_VIA_ESLOV
. Remember to use the corresponding settings on the HOST board.NICLA_AS_SHIELD
These settings will internally adjust the communication parameters, so it can communicate through the headers.
We suggest to unplug the Nicla Sense ME from the host Arduino board while connecting the USB to the computer.
Full sketch:
1#include "Arduino.h"2#include "Arduino_BHY2.h"3
4// Set DEBUG to true in order to enable debug print5#define DEBUG false6
7void setup(){8#if DEBUG9 Serial.begin(115200);10 BHY2.debug(Serial);11#endif12
13 BHY2.begin(NICLA_I2C, NICLA_AS_SHIELD);14}15
16void loop(){17 // Update and then sleep18 BHY2.update(100);19}
Conclusion
This tutorial shows how easy is to access the Nicla Sense ME sensors data and pins if it is plugged as a shield.
The BHY2 Library encapsulates the I2C communication and therefore reduces the complexity of your sketch.
Troubleshooting
Make sure you have installed the latest version of both libraries Arduino_BHY2 and Arduino_BHY2Host.
If you do not see any output on the Serial Monitor, make sure you have set the correct baud rate. In this example sketch we use 115200.
Make sure the pins are soldered on the correct side and the Nicla Sense ME is mounted with the correct orientation on the host board.
Next Steps
Leverage the Arduino Cloud dashboard to select which sensor you want to use and initialize, so you can remotely control your application.
Suggest changes
The content on docs.arduino.cc is facilitated through a public GitHub repository. If you see anything wrong, you can edit this page here.
License
The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.