The Arduino Nano 33 BLE packs a Nordic nRF52840 ARM Cortex-M4 processor and a u-blox NINA-B306 Bluetooth module into the classic 30-pin Nano footprint. The direct answer for bench setup: this board operates strictly at 3.3V logic. Unlike the classic 5V Nano, feeding 5V into any digital I/O pin will permanently destroy the nRF52840 silicon. Furthermore, the physical pin labels (D0-D13, A0-A7) map to specific Nordic port pins (P0.xx/P1.xx), and the board routes its internal IMU/environmental sensors on a completely separate I2C bus from the external header pins.
Complete Arduino Nano 33 BLE Pinout Reference Table
The table below maps the physical silkscreen labels to the underlying nRF52840 microcontroller ports. Use this as your primary bench reference when writing bare-metal mbed OS code or debugging signal routing.
| Physical Pin | Arduino API Name | nRF52840 Port | Primary Function | Alternate / Special Functions |
|---|---|---|---|---|
| D0 | RX / D0 | P1.03 | UART RX | GPIO, PWM |
| D1 | TX / D1 | P1.10 | UART TX | GPIO, PWM |
| D2 | D2 | P1.11 | GPIO | PWM, I2S |
| D3 | D3 | P1.12 | GPIO | PWM |
| D4 | D4 | P1.15 | GPIO | PWM |
| D5 | D5 | P1.13 | GPIO | PWM |
| D6 | D6 | P1.14 | GPIO | PWM |
| D7 | D7 | P0.23 | GPIO | PWM |
| D8 | D8 | P0.21 | GPIO | PWM |
| D9 | D9 | P0.27 | GPIO | PWM |
| D10 | D10 / CS | P1.02 | SPI Chip Select | GPIO, PWM |
| D11 | D11 / MOSI | P1.01 | SPI MOSI | GPIO, PWM |
| D12 | D12 / MISO | P1.08 | SPI MISO | GPIO |
| D13 | D13 / SCK | P0.13 | SPI Clock / LED | GPIO |
| A0 | A0 | P0.04 | ADC Input | GPIO, UART RTS |
| A1 | A1 | P0.05 | ADC Input | GPIO, UART CTS |
| A2 | A2 | P0.30 | ADC Input | GPIO |
| A3 | A3 | P0.29 | ADC Input | GPIO |
| A4 | A4 / SDA | P0.31 | External I2C SDA | ADC Input, GPIO |
| A5 | A5 / SCL | P0.02 | External I2C SCL | GPIO |
| A6 | A6 | P0.28 | ADC Input (Only) | Not usable as digital GPIO |
| A7 | A7 | P0.03 | ADC Input (Only) | Not usable as digital GPIO |
| VIN | VIN | N/A | Unregulated Input | Accepts 7V-21V DC |
| 5V | 5V / VUSB | N/A | USB Power Rail | Outputs ~4.6V when on USB |
| 3V3 | 3.3V | N/A | Regulated Output | Max ~150mA external draw |
| GND | GND | N/A | Common Ground | Tied to USB shield |
The Rows People Get Wrong (And How to Fix Them)
When builders transition from a classic 5V Nano to the Nano 33 BLE, three specific pinout assumptions routinely cause hardware failures or silent communication bugs.
1. The Dual I2C Bus Trap (A4/A5 vs. Internal Sensors)
On a classic Nano, A4 and A5 are the only I2C pins, and they share the bus with everything. On the Nano 33 BLE, the onboard sensors (LSM9DS1 IMU, APDS9960, LPS22HB) are wired to a dedicated internal I2C bus (nRF52840 pins P0.14 and P0.15). The external header pins A4 (SDA) and A5 (SCL) map to P0.31 and P0.02. If you try to read an external sensor using the internal Wire1 object, or sniff the internal IMU on A4/A5, your code will hang or return NaN. Use the standard Wire library for A4/A5 external peripherals.
2. The "5V" Pin is Actually VUSB
The pin silkscreened as "5V" is not a regulated 5V output from the onboard buck converter. It is tied directly to the USB VBUS line through a protection MOSFET. If you power the board via the USB-C port, this pin outputs roughly 4.6V (accounting for the MOSFET voltage drop and USB cable sag). If you power the board via the VIN pin, the "5V" pin will output 0V. Do not use this pin to power external 5V logic unless the board is actively plugged into a high-quality USB hub.
3. A6 and A7 are Analog-Only
Unlike D0-D13, the A6 and A7 pins on the Nano 33 BLE lack digital input/output buffers on the nRF52840 silicon. They are hardwired to the ADC. Calling digitalWrite(A6, HIGH) or pinMode(A7, INPUT_PULLUP) will silently fail. Use A0-A5 if you need pins that can toggle between analog reads and digital I/O.
Arduino API vs. nRF52840 Datasheet Naming Standards
Which standard applies to your code depends on your software stack. The Arduino ecosystem uses the Wiring API abstraction, while advanced power-optimization or RTOS tasks require Nordic's bare-metal register names.
- Arduino Core (Wiring API): Uses
D0-D13andA0-A7. This is the standard for 95% of makers. The underlying mbed OS core translates these integers to Nordic port registers at compile time. Use this when writing standard sensor loops or BLE advertising sketches. - nRF52840 Product Specification (Nordic Semi): Uses
P0.xxandP1.xxnotation. You will see this in the Nordic nRF52840 Datasheet. You must use this naming convention if you are writing custom mbed OS interrupt handlers, configuring the GPIOTE (GPIO Tasks and Events) peripheral for ultra-low-power wakeups, or debugging with a Segger J-Link SWD probe.
digitalPinToPinName(pin) macro provided by the Arduino mbed core. It returns the exact PinName enum required by the underlying OS.
Faded Silkscreen and Clone Board Interpretation
If you are working with a heavily used board where the silkscreen has worn off, or a third-party clone with non-standard labeling, you can safely identify the critical pins using a multimeter in continuity mode. Never guess pinouts on a 3.3V board; a single VCC-to-GND short will destroy the MPM3630 power module.
- Identify GND: Place your black probe on the metal USB-C connector shell. Probe the header pins with the red probe. The GND pins will read < 1 ohm. There are typically two GND pins on the bottom right of the standard orientation.
- Identify 3.3V: Locate the large inductor and the MPM3630 power module near the USB port. The output capacitor directly adjacent to the inductor is tied to the 3.3V rail. Trace continuity from that capacitor pad to the header pins to confirm the 3V3 pin.
- Identify External I2C (A4/A5): Look for the two 4.7kΩ pull-up resistors near the NINA-B306 BLE module. One side of these resistors is tied to 3.3V; the other side connects directly to the external SDA and SCL header pins.
Decision Path: Choosing the Right Pins for Your Peripherals
Use this decision matrix to terminate your design choices. Do not route high-speed or noise-sensitive signals to arbitrary GPIOs; use the hardware-optimized paths.
| Peripheral Type | Condition / Constraint | Concrete Pin Pick | Required Hardware / Code Action |
|---|---|---|---|
| I2C Sensor (3.3V) | Sensor operates natively at 3.3V (e.g., BME280) | A4 (SDA) & A5 (SCL) | Use Wire library. No external pull-ups needed (board has 4.7k internal). |
| I2C Sensor (5V) | Legacy 5V module (e.g., standard 1602 LCD with I2C backpack) | A4 & A5 via Level Shifter | Route A4/A5 through a TXS0108E or BSS138 bidirectional shifter. Power shifter VCCA from 3V3, VCCB from 5V. |
| SPI Display / SD Card | High-speed data transfer required | D11 (MOSI), D12 (MISO), D13 (SCK), D10 (CS) | Use SPI library. Keep traces under 5cm. Add a 100nF decoupling cap at the SD card VCC pin. |
| Hardware UART | Connecting to GPS module or secondary MCU | D0 (RX) & D1 (TX) | Use Serial1 object (not Serial, which is USB CDC). Remember nRF TX (D1) goes to peripheral RX. |
| Analog Audio / Mic | Reading an electret mic or analog envelope detector | A0 to A5 | Use analogRead(). Avoid A6/A7 if you need to toggle a digital bias pin on the same channel. |
| High-Current Load | Driving a relay, motor, or high-power LED (>10mA) | Any Digital Pin + MOSFET | Do NOT drive directly. Use pin to gate a logic-level N-channel MOSFET (e.g., IRLZ44N) with a 10kΩ gate pulldown. |
By strictly adhering to the 3.3V logic boundaries and respecting the split I2C bus architecture, the Nano 33 BLE provides a highly capable, low-power foundation for embedded BLE sensor nodes. Always verify your peripheral voltage tolerances against the official Arduino Nano 33 BLE documentation before applying power to your breadboard.






