When you think of an Arduino, the first board in your head has to be the classic Arduino Uno, with its Atmel microcontroller. You wouldn’t think of an Arduino powered by ‘Pi Silicon’ but the last of the initial wave of RP2040 partner boards is the Arduino Nano RP2040 Connect and this is the board we have been waiting for. You see the Arduino Nano RP2040 Connect is the only partner board to come with built-in Wi-Fi and Bluetooth. Neatly integrated into the familiar Nano layout is a Nina W102 uBlox Wi-Fi module which provides 2.4 GHz WI-Fi, Bluetooth Low Energy, an IMU capable of detecting movement and gestures and a microphone which can be used to measure audio levels and more importantly used in machine learning projects.
Should the Arduino Nano RP2040 Connect be the heart of your next project? Well that depends on your needs and budget. If you are happy to blink LEDs and make things move, then a $4 Raspberry Pi Pico is more for you. But if you want to build Internet of Things (IoT) devices with a web interface then Arduino’s latest board may just be what you are looking for. But we don’t truly understand how a board works, and more importantly how it is supported until we use it, and use it we shall!
Arduino Nano RP2040 Connect Hardware Specifications
|System on Chip||RP2040 microcontroller chip designed by Raspberry Pi||Row 0 - Cell 2|
|Row 1 - Cell 0||Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz.||Row 1 - Cell 2|
|Row 2 - Cell 0||264KB of SRAM, and 4 / 16MB of on-board Flash memory||Row 2 - Cell 2|
|GPIO||22× multi-function 3.3V GPIO pins||Row 3 - Cell 2|
|Row 4 - Cell 0||1× SPI, 1 × I2C, 1 × UART, 8 × 12-bit ADC, 20 × controllable PWM channels||Row 4 - Cell 2|
|Row 5 - Cell 0||8× Programmable I/O (PIO) state machines for custom peripheral support.||Row 5 - Cell 2|
|Row 6 - Cell 0||1x User LED (GPIO 13)||Row 6 - Cell 2|
|Row 7 - Cell 0||RGB LED, accessible only via the Nina W102 module.||Row 7 - Cell 2|
|Row 8 - Cell 0||Castellated module allows soldering directly to carrier boards.||Row 8 - Cell 2|
|Extra Features||Nina W102 uBlox Wi-Fi module||Row 9 - Cell 2|
|Row 10 - Cell 0||ST LSM6DSOXTR 6-axis IMU||Row 10 - Cell 2|
|Row 11 - Cell 0||ST MP34DT06JTR MEMS Microphone||Row 11 - Cell 2|
|Row 12 - Cell 0||ATECC608A-MAHDA-T Cryptographic Coprocessor||Row 12 - Cell 2|
|Dimensions||1.77 x 0.7 inches (45 x 18mm)||Row 13 - Cell 2|
Design and Use of the Arduino Nano RP2040 Connect
The design of the Arduino Nano RP2040 Connect is quite clearly based on Arduino’s Nano range of boards such as the Nano 33 IoT and Nano Every. The Nano range of boards share the same pin out, enabling the Arduino Nano RP2040 Connect to be a drop-in replacement for other Nano boards. The bare board has the castellated edges that have become the norm for an RP2040 board and the underside of the board is unpopulated, enabling it to be surface soldered into a project. Of the 22 GPIO pins we have 20 pins which can be used for PWM and of those we have 8 analog inputs, the most of any RP2040 board as the Pico comes with three and most third-party RP2040 boards have four. If you are looking for the I2C pins they are hidden away on pins A4 and A5 and the onboard IMU is accessible on the I2C bus.
The eagle eyed amongst you will have spotted a micro USB connector, something common on many newer Arduino boards. We would’ve liked to have seen a USB-C connector, because it offers a foolproof connection and the mechanical connector is stronger than micro USB. As this is the most expensive RP2040 board, we think that Arduino could’ve included this without impacting the overall cost.
The big feature of the Arduino Nano RP2040 Connect is Wi-Fi and the Nina W102 chip provides us with 802.11 b/g/n 2.4 GHz Wi-Fi and Bluetooth 4.2. The antenna is located opposite the micro USB port. The Nina W102 chip is itself a powerful microcontroller with 520KB SRAM and a 240MHz 32bit Dual Core Xtensa LX6 CPU, but in this board it is relegated to handling communications.
As this is an Arduino, our natural inclination is to use the Arduino IDE, and with a recent update bringing official support for the RP2040 to the IDE, we can easily create projects. We tested the Arduino Nano RP2040 Connect with the Arduino 1.8.15 and 2.0 beta 7 IDE and after installing the board via the board manager we were able to flash the example blink sketch to prove that we had connectivity. To access Wi-Fi we needed to install the WiFiNINA library and then create a secrets file to contain our Wi-Fi login details. We ran the Simple Web Server WiFi example and it flashed with no issue, but we later learned that we needed to change the default GPIO pin used in the example from 9 to “LED_BUILTIN” in order to control via a web interface.
The connection details should appear in the serial monitor, but no matter what we did, we could not connect to the serial monitor and all we saw was an error informing us that the port was busy. This is not unique to the Arduino Nano RP2040 Connect; we have seen this behavior with other RP2040 boards and the Arduino IDE. Our only solution was to close the Arduino IDE and use another application to open a serial terminal. The same issue affected our test of the IMU, so we opened the serial terminal, reset the board and saw raw accelerometer data scroll across the screen. We later discovered that the issue lay with our operating system, Ubuntu 18.04, we had to uninstall modemmanager in order to see the serial data on the port. This issue has not impacted any of our other official and clone boards.
We also tested the onboard microphone, the same model as used in the Nano 33 IoT. We followed the official documentation to flash the test sketch to the Arduino Nano RP2040 Connect, then opened the Serial Plotter hoping to see a visualization of sound. Alas all we saw was a constant flatline value of -128. We were unable to locate any guidance on how to fix this issue.
We had other issues when using the Arduino’s IoT Cloud, a service that we have used before with MKR WIFI 1010 and Nano 33 IoT boards. our Arduino Nano RP2040 Connect was detected, but could not be configured. We followed the official documentation, which at the time of writing looks to be incomplete, and still drew a blank. This is a real shame, as the IoT Cloud is Arduino’s new service to enable IoT “Things” (projects) to be created and monitored via a web interface. It is most likely teething troubles for now, and something that will be fixed in the future. For now the smart maker will stick with the desktop IDEs.
You are probably thinking that this is an RP2040, so I can run other programming languages? Correct! We can use CircuitPython and MicroPython with the Arduino Nano RP2040, the caveat is that you will need to source your own libraries for the onboard microphone, IMU and WiFi. A quirk exists between the pin numbering and the actual GPIO number. The Arduino pin number, used in the Arduino IDE for a pin is say D2, but the RP2040 pin is GPIO25. Another example is the built in LED is D13, but in our MicroPython tests it was GPIO 6.
We tested the Arduino Nano RP2040 Connect with CircuitPython and it was a much more pleasant experience and thanks to the plethora of libraries, especially the ESP32SPI library we quickly had the Arduino Nano RP2040 Connect online and receiving data from a remote API. We also tested with MicroPython and it behaved in much the same manner as a Raspberry Pi Pico, but we had no drivers to use the onboard Wi-Fi.
This is where we noticed a quirk that prevented us from setting the board ready to accept new firmware. Typically we would reset the board and press BOOTSEL. For the Arduino Nano RP2040 Connect we would double press the reset button, but this did not work. After reaching out for help on Twitter we were told that we could connect the REC and GND pins together to force the board into the mode.
Use Cases for the Arduino Nano RP2040 Connect
The most obvious use case is an IoT appliance and this is made quite straightforward via the Arduino IoT Cloud. With the IoT Cloud we can quickly create GUI applications to read data from a remote device. For example we can create a weather station using the Arduino Nano RP2040 Connect and have live data streamed to the cloud which can be accessed from any web connected device.
The same Arduino IoT Cloud user interface can be used to remotely control the Arduino Nano RP2040 Connect, for example a web controlled robot wouldn’t be much more difficult to build than a non web enabled robot.
If you are not an Arduino IoT Cloud user, you can still make the most of this board using the traditional IDE. There are libraries available for HTTP, MQTT and Bluetooth which have existed for some time and can be ported to run on the RP2040. With these libraries we can build web controlled robots, wireless weather stations etc.
It comes down to the price. If you need Wi-Fi and the RP2040 then the Arduino Nano RP2040 Connect is a solid piece of hardware but it is more expensive than any other RP2040 solution we’ve tested, including buying a Raspberry Pi Pico and a Pimoroni Pico Wireless. The extra cost gives us access to GPIO pins, which are sadly blocked with the Pico Wireless. If you need the smallest package possible for an embedded IoT project, then this could be the board, but right now the documentation is not up to Arduino’s usual standards despite this being the last board in the first wave of RP2040 powered devices.
The additional analog inputs mean that the Arduino Nano RP2040 Connect has the most of any RP2040 device, useful for connecting many different components. The smart money for those wanting to connect their RP2040 project to the world is with this board, but for how long? Seeed’s own RP2040 board comes with Wi-Fi and it is expected to retail for half the price of the Arduino.