Seeed Studio XIAO nRF52840 Sense: Big Capabilities in a Small Package
March 22, 2024
Blog
In conjunction with some WIP guitar hacking for JCo Audio, I needed a very small dev board with battery management built-in for hassle-free portable usage. Per a suggestion, I got much more than that in the form of the Seeed Studio XIAO nRF52840 Sense.
The device has a USB-C connector and battery management circuitry, and its nRF52840 processor enables Bluetooth wireless communications. It features an inertial measurement unit, temperature sensing, and a pulse density modulation (PDM) microphone for standalone sensing capabilities. An onboard RGB LED is provided as a basic output method. All of this is packed into a sub-square inch form factor.
Setup and Troubleshooting
Image Credit: Screencap
As cool as this device (now) seems to me, there were a few initial issues I had to solve before using it:
- Install Board, Select Correct Board: As outlined in Seeed’s wiki, you can install this board via the Arduino IDE board manager. However, there are two possible definitions: the standard nRF52 version and the nRF52 mbed-enabled version. Generally, the board is recognized as the standard version, but you’ll need to change to the mbed version in many cases to get things to work.
- Compilation Permissions: Whether this was a XIAO issue, or a general issue with MacOS, I initially got a compilation error when trying to use this board. Long story short, I had to set permissions appropriately in the terminal as outlined here. Doing so via the MacOS GUI was insufficient.
- Set Programming Mode: Double-click the reset button to put the XIAO into programming mode. What button, you ask? There is a teensy-tiny interface button on the side of the USB connector without built-in LEDs.
- Battery Power: Make sure you are connecting to a good LiPo, and that you plug it in with the correct polarity. I reversed mine with no apparent long-term ill effects. However, it is best not to chance it.
Seeed Arduino Examples
With that bit of yak wrestling out of the way, what can you do with this board? Are there examples available to get you on your embedded journey for IMU/Microphone/BT usage? The short answer: yes, they are there, even if the instructions don’t necessarily jump out at you immediately.
- Inertial Measurement/Temperature: A zip library is listed, but (as with other examples here) you can also install this functionality via the Arduino IDE’s library manager. The HighLevelExample shows thermometer, accelerometer, and gyroscope readings.
- PDM Microphone: The mic_serial_plotter example shows microphone data via the serial output, which can be plotted for better visualization. The example page also notes that it can record audio samples for playback, which could be quite useful.
- Bluetooth Communication: Here you’ll need to add the ArduinoBLE library on the Arduino IDE, and install a program like LightBlue on your phone to allow it to communicate. Using the code listed on the example page under Demo 1, I was able to toggle the onboard LED.
Power Considerations
Image Credit: Jeremy Cook
The big selling point of this board for me is its built-in battery management circuitry. It can be powered off a LiPo cell, with header pins soldered onto the battery pads. You can change the battery charging current via code found on the Getting Started page, though I’ve yet to conclusively verify charging operation.
The device does seem to get warm at times, and it lists its circuit operating current at 200mA. Experimentally, running a blink sketch (modified for 5 seconds on/off time) under battery power used on the order of 120mA, which is higher than I would like. On the other hand, its standby power consumption is listed as less than 5µA, so it could perform very well in intermittent usage scenarios.
Limitations
The inherent drawback to such a tiny dev board is that the number of IO pins is constrained. 14 pins are situated on the left and right sides of the unit. 11 of these are GPIO connections, 6 of which can be used for analog sensing. The other three pins are 5V, 3V3, and GND, leaving a pair of surface mount-style pads for battery connections.
At a list price of $15.99 on Seeed, (and more on Amazon) it’s on the expensive side when compared to something like a Raspberry Pi Pico. Its castellated holes make it usable as a module, but, given the price, for any sort of volume production you’ll likely want to design your own. If you are looking to ramp a design up, be sure to check out my Developing With Arduino class series for discussion about taking your Arduino project from maker to pro.
Bottom Line
Image Credit: Jeremy Cook
After a bit of yak shaving, I love this little board and am excited to use it in upcoming project(s). At the same time, it’s costly enough to make me consider where I use it, and its limited IO won’t always be appropriate. If you like the form factor, BT, and battery management capabilities, but don’t need the extra sensors, also consider the less expensive XIAO nRF52840.
I only used the Arduino IDE for this article, but the board is reportedly capable of running CircuitPython. The microphone and/or IMU could also be used for embedded ML usage, so there are lots of possibilities beyond what’s outlined here!