This page covers the development boards I have encountered that are based around Nordic Semiconductor nRF52 Bluetooth SoCs (System on a Chip) and my experiences of using them. You can view and learn more about the range of nRF52 SoCs at:
You can email me at james.boshikoopa@gmail.com
I bought a Promicro Nrf52840 Development Board from Temu for £3.59 ($4.79) even though there were no reviews for it but it was appealing to work with a different SoC. On the Temu page there was a link to the user manual (just mentions in multiple languages that fiberglass material has been used and attention should be made to the module's heat dissipation), and an image with some technical information, which I've written out here:
"The default factory built-in program is Blink-All-IO (all IO ports automatically flip is 1S). To enter the Nice! Nano V2 Bootloader, please short RT to GND twice within 0.5S. For the keyboard, just press the RST button twice within 0.5S. Product parameters
Powerful wireless capabilities: wireless 5.0, onboard antenna
Powerful CPU: nRF52840 chip uses ARM Cortex-M4F processor with a main frequency of 64MHz, built-in 1MB flash memory and 256KB RAM
Battery charging chip: supports lithium battery charging and discharging
Power consumption: Standby power consumption can reach ~20uA"
The Promicro looks similar to:
Selling for £13.50 ($17.88).
From research, it seems the original name for the Promicro was SuperMini.
But the Temu one I received doesn't have ‘SuperMini’ written on the board so possibly the Temu ones are clones. Oddly, the Temu page shows the board has ‘proMicro’ written on the underside but the one I received doesn't.
On the mechboards page it says the board supports ZMK and BlueMicro Firmware, and it seems the board is designed for Nice!Nano for building wireless keyboards.
Another product page for SuperMini can be found at:
https://www.tindie.com/products/adz1122/supermini-nrf52840-development-board-for-nicenano/
Selling for $9.90 (£7.47) and claims ‘Designed by Maker go in China’.
The board measures 33 x 17.8mm and came with x2 13-way male header and x1 3-way male header for soldering to the board’s various connections. The top PCB side has the following notable components:
Blue and red LEDs.
N52840 Bluetooth 5.3 SoC
32MHz crystal
USB-C connector
13 labelled connections on both long sides carrying power and I/O.
3 connections toward one end (labelled on underside) for additional I/O.
On the PCB bottom side there are pads for RST, VCC, VDD, DO, CLK, and GND.
The nRF52840 datasheet can be found at:
To get to know the SoC better.
I soldered the two 13-way male headers to the board - I had trouble soldering so I had to use flux, note I used lead solder, some PCBs don't take lead solder as well as others. I then breadboarded the module and connected an LED with a 220R series limiting resistor, cathode end to GND, anode end to the board’s 106 (P1.06) connection. I plugged the module into my laptop via USB-C and the blue LED was rapidly flashing and after a few secs the on-board red LED was flashing in time with the LED I had connected to the board. I checked a couple of other I/O pins in turn with the external LED and it flashed as expected. According to the Temu page the built-in program switches all I/O on/off every second.
In device manager the board showed up as a serial port.
To try to program the board I followed this tutorial to use the Arduino IDE:
I installed the Adafruit nRF52 board package as instructed and there were now a number of new boards available under Tools->Board->Adafruit nRF52 and examples under File->Examples.
None of the new boards matched the board I bought but we can select a similar one that has the same main processor, which should work at least for simple testing. So I selected ‘Adafruit Feather nRF52840 Express’ after opening the standard Blink sketch. I clicked Upload and after less than 10 seconds the Arduino IDE reported ‘Device programmed’ and the on-board LED and the external LED stopped flashing, the on-board blue LED was still rapidly blinking.
I wasn't sure what pin LED_BUILTIN would actually use (hovering over it in the Arduino IDE reports PIN_LED1), so I replaced LED_BUILTIN with 9 but when I tried to upload it complained that the target isn’t in DFU mode, which can be accessed by grounding both DFU and RESET and releasing both at same time. On the Temu page it says:
“To enter the Nice! Nano V2 Bootloader, please short RT to GND twice within 0.5S.“
The RST pin is located on one side below GND, using a wire connected to RST quickly take it to GND twice and the on-board red LED will pulse slowly and the board will show up as a COM port (for me, it showed up as a different COM port to when I first connected the board), and it also showed up as a NICENANO drive in windows explorer of 31.8MB.
Opening up the NICENANO drive it had the following files:
CURRENT.uf2
INDEX.HTM
INFO_UF2
Opening up INFO_UF2 it had the following contents:
UF2 Bootloader 0.6.0 lib/nrfx (v2.0.0) lib/tinyusb (0.10.1-41-gdf0cda2d) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: nice!nano
Board-ID: nRF52840-nicenano
SoftDevice: S140 version 6.1.1
Date: Jun 19 2021
Returning to the Arduino IDE I selected the new COM port number (Tools->Port) and tried uploading again. This time it took about 20 seconds and it said ‘Device programmed.’ and the COM port disappeared. However, I couldn't get the external LED to light no matter what I/O pin it was connected to.
Next I tried central_scan eg (File->Examples->Adafruit Bluefruit nRF52 Libraries->Central->central_scan), uploading took around 25 seconds and I had to do the RST to GND ‘trick’ again. Opening up the serial monitor set to 9600 baud I saw continually displayed data (Timestamp, Addr, Rssi, and Data), which was a good sign that the device was programmed. Note that the board was now using the COM port number when I first connected the board to my laptop so it seems if the sketch uses the serial port it will still show up as a COM port in device manager.
I also tried central_scan_advanced and that also worked, the serial monitor showed various information after uploading.
Possibly the reason LED blink didn't work is because of different mapping from the Adafruit board I selected.
Looking at the schematic for the Promicro on this page (scroll down toward the bottom):
https://chat.nologo.tech/d/80/14
We can see the user LED connected to BLED, which is connected to AD10/P0.15. However, using 15 for the pin number in the Blink sketch didn't work. So I modified the sketch to initialise and turn on a large number of I/O in setup():
for (int i=2; i<33; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
Note: I started on 2 as I though it unlikely the first two I/O would be significant.
After uploading, the on-board red LED was on and connecting an external LED to some of the I/O pins lit the LED, which were the following:
P0.06, P0.08, P0.17, P0.20, P0.22, P0.11, P0.31, P0.29, P0.02, P1.15, P0.10.
Also, VCC was now giving 3.3V (VCC can be disabled by making P0.13 low).
We could write a sketch to turn on/off the I/O pins in turn and print the current active pin number to the serial port to work out how each one’s mapped. But through process of elimination I found the on-board red LED was controlled with pin number 24 in the Arduino sketch. It seems we can't just add an offset as 22, for e.g., doesn't control P0.13. However, pin number 20 controls P0.29, which matches the Arduino pin mapping shown on the mechboards product page, so by chance adding an offset will work for some pins. I can confirm through testing that Arduino pin 25 controls P0.13, which enables/disables the VCC pin (high to enable).
One solution to ease with the I/O mapping issue when using the Arduino IDE is to create a custom variant.h file.
The Promicro was very good value for money and I have only begun to scratch the surface, its support for Bluetooth is especially appealing in small form factor.
All content of this and related pages is copyright (c) James S. 2024