The Arduino Nano 33 IoT combines a 48 MHz SAMD21 microcontroller with a separate u-blox NINA-W102 wireless module, an onboard crypto chip and a 6-axis IMU in the compact Nano form factor.
It is a very different board from both the classic ATmega328P Nano and the newer Nano ESP32.
The main application processor is the ATSAMD21G18A, an Arm Cortex-M0+ MCU with:
- 256 kB Flash;
- 32 kB SRAM;
- native USB;
- a 12-bit ADC;
- a 10-bit DAC on A0;
- multiple SERCOM peripherals that can operate as UART, SPI or I²C;
- I²S;
- DMA;
- an event system.
Wireless networking is handled by the separate NINA-W102 module, which is based on an ESP32 and provides 2.4 GHz Wi-Fi and Bluetooth connectivity.
The board is strictly a 3.3 V logic platform. Its GPIO is not 5 V tolerant.
This guide maps every external Nano 33 IoT pin, explains ADC, DAC, UART, SPI, I²C and PWM behaviour, and shows how the SAMD21, NINA module, USB and onboard sensors fit together.
Arduino Nano 33 IoT Specifications
| Feature | Arduino Nano 33 IoT |
|---|---|
| Main MCU | ATSAMD21G18A |
| CPU | 32-bit Arm Cortex-M0+ |
| Clock speed | 48 MHz |
| Flash | 256 kB |
| SRAM | 32 kB |
| Operating logic voltage | 3.3 V |
| Analog inputs | A0-A7 |
| ADC | 12-bit hardware, higher-resolution result possible with oversampling |
| DAC | 10-bit DAC on A0 |
| UART | Serial1 on D0/D1 |
| SPI | D10-D13 |
| I²C | A4 SDA, A5 SCL |
| USB | Native SAMD21 USB through Micro-B connector |
| Wi-Fi | NINA-W102, 2.4 GHz 802.11 b/g/n |
| Bluetooth | NINA-W102 Bluetooth/BLE |
| Crypto | ATECC608A secure element |
| IMU | Onboard LSM6DS3 6-axis accelerometer/gyroscope |
| VIN | 5-21 V |
| Maximum current per GPIO | 7 mA |
Complete Nano 33 IoT Pin Mapping
| Arduino pin | SAMD21 pin | Main functions |
|---|---|---|
| D0 / RX | PB23 | Serial1 RX, digital GPIO |
| D1 / TX | PB22 | Serial1 TX, digital GPIO |
| D2 | PB10 | Digital GPIO, timer/PWM-capable in current core |
| D3 | PB11 | Digital GPIO, timer/PWM |
| D4 | PA07 | Digital GPIO, ADC-capable internally, timer function |
| D5 | PA05 | Digital GPIO, timer/PWM |
| D6 | PA04 | Digital GPIO, timer/PWM |
| D7 | PA06 | Digital GPIO |
| D8 | PA18 | Digital GPIO |
| D9 | PA20 | Digital GPIO, timer/PWM |
| D10 | PA21 | Digital GPIO, timer/PWM, SPI SS alias |
| D11 | PA16 | SPI MOSI/COPI, timer/PWM-capable |
| D12 | PA19 | SPI MISO/CIPO, timer/PWM-capable |
| D13 | PA17 | SPI SCK, LED_BUILTIN |
| A0 / D14 | PA02 | ADC0, 10-bit DAC output, digital GPIO |
| A1 / D15 | PB02 | ADC10, digital GPIO |
| A2 / D16 | PA11 | ADC19, digital GPIO, timer/PWM-capable |
| A3 / D17 | PA10 | ADC18, digital GPIO, timer/PWM-capable |
| A4 / D18 | PB08 | ADC2, I²C SDA, digital GPIO |
| A5 / D19 | PB09 | ADC3, I²C SCL, timer/PWM-capable |
| A6 / D20 | PA09 | ADC17, digital GPIO |
| A7 / D21 | PB03 | ADC11, digital GPIO |
Physical Header Layout
With the Micro-B USB connector at the top, Nano 33 IoT follows the familiar two-row Nano footprint:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Left side Right side D13 / SCK D12 / MISO 3V3 D11 / MOSI AREF D10 / SS A0 / DAC D9 A1 D8 A2 D7 A3 D6 A4 / SDA D5 A5 / SCL D4 A6 D3 A7 D2 5V / VUSB jumper position GND RESET RESET GND D0 / RX VIN D1 / TX |
The physical form is familiar, but the electrical behaviour is not the same as a 5 V classic Nano.
3.3 V Logic Only
Arduino explicitly warns that Nano 33 IoT GPIO is not 5 V tolerant.
Do not connect a 5 V output directly to:
- D0-D13;
- A0-A7;
- AREF;
- other exposed SAMD21 signals.
Use a level shifter, resistor divider where appropriate, or a 3.3 V-compatible peripheral.
This is one of the biggest migration traps for users coming from classic Nano or Nano Every.
GPIO Current Limit
Arduino’s current pinout specifies a maximum current of:
|
1 2 3 4 |
7 mA per pin |
with additional aggregate source/sink limits for pin groups.
The SAMD21 pins are intended for logic signalling, not powering loads.
Use a driver transistor or MOSFET for:
- relays;
- motors;
- solenoids;
- high-current LEDs.
UART: D0 and D1
The external hardware UART is:
|
1 2 3 4 5 |
D0 = RX D1 = TX |
and is accessed through:
|
1 2 3 4 |
Serial1 |
Example:
|
1 2 3 4 5 6 7 8 9 |
void setup() { Serial1.begin(115200); } void loop() { } |
Serial and Serial1 Are Separate
The SAMD21 has native USB.
So:
|
1 2 3 4 5 6 7 8 |
Serial → USB CDC serial over Micro-B Serial1 → physical D0/D1 UART |
This is a major improvement over classic Nano-style USB-to-UART arrangements because using Serial Monitor does not consume the external D0/D1 UART.
Native USB
The SAMD21 contains a native full-speed USB controller.
The board routes:
|
1 2 3 4 5 |
PA24 = USB D- PA25 = USB D+ |
to the Micro-B connector.
Native USB enables applications such as:
- USB serial;
- keyboard;
- mouse;
- MIDI;
- custom USB device classes using suitable libraries.
USB Host Capability
The SAMD21 USB peripheral can operate in host/device modes, but the board power arrangement matters.
Arduino’s current datasheet notes that USB host operation requires the relevant VUSB path/jumper configuration and correct external power.
Do not assume the board can source USB host power in the same way as a dedicated USB host board without checking the power configuration.
Board Recovery
If a sketch locks the SAMD21 badly enough that normal USB upload stops working, Arduino’s standard SAMD recovery method is useful:
- power the board;
- double-tap RESET quickly;
- the bootloader enters programming mode;
- select the temporary bootloader port;
- upload a known-good sketch.
SPI Pins
The default user SPI bus is:
|
1 2 3 4 5 6 7 |
D10 = SS D11 = MOSI / COPI D12 = MISO / CIPO D13 = SCK |
The current SAMD core confirms:
|
1 2 3 4 5 6 7 |
PIN_SPI_SS = 10 PIN_SPI_MOSI = 11 PIN_SPI_MISO = 12 PIN_SPI_SCK = 13 |
Basic SPI Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <SPI.h> const int chipSelect = 10; void setup() { pinMode(chipSelect, OUTPUT); digitalWrite(chipSelect, HIGH); SPI.begin(); } |
D13 Is Also the Built-In LED
D13 is shared with:
|
1 2 3 4 |
LED_BUILTIN |
and the SPI clock.
The onboard LED may therefore flicker during SPI traffic.
I²C Pins
The default user I²C bus is:
|
1 2 3 4 5 |
A4 = SDA A5 = SCL |
and uses:
|
1 2 3 4 |
Wire |
Example:
|
1 2 3 4 5 6 7 8 |
#include <Wire.h> void setup() { Wire.begin(); } |
A4 and A5 Have Pull-Ups and Are Primarily I²C Pins
Arduino specifically notes that A4 and A5 have pull-ups associated with the I²C bus and recommends using them primarily as I²C pins.
Although the SAMD21 hardware maps ADC channels to them, using A4/A5 as precision analog inputs is not recommended in the current Nano 33 IoT documentation.
Onboard IMU and Crypto Chip
Nano 33 IoT contains:
- an LSM6DS3 6-axis IMU;
- an ATECC608A secure element.
The SAMD21 has multiple SERCOM blocks, allowing Arduino’s board design to keep internal peripheral communication separate from the normal external A4/A5 I²C interface.
Eight Analog Inputs
The familiar analog header pins are:
|
1 2 3 4 |
A0-A7 |
All eight map to SAMD21 ADC channels.
| Arduino pin | SAMD21 ADC channel |
|---|---|
| A0 | AIN0 |
| A1 | AIN10 |
| A2 | AIN19 |
| A3 | AIN18 |
| A4 | AIN2 |
| A5 | AIN3 |
| A6 | AIN17 |
| A7 | AIN11 |
12-Bit ADC
The SAMD21 has a 12-bit ADC.
A native 12-bit conversion provides:
|
1 2 3 4 |
0 to 4095 |
possible output codes.
For compatibility, Arduino code may use a lower default resolution unless changed explicitly.
To request 12-bit reads:
|
1 2 3 4 5 6 |
analogReadResolution(12); int value = analogRead(A0); |
Higher-Resolution Results Through Oversampling
The SAMD21 ADC supports averaging/oversampling modes that can produce higher-resolution numerical results, including up to 16-bit output representation under suitable conditions.
This does not make it a precision 16-bit ADC.
Oversampling can improve effective resolution when the input noise and sampling conditions are appropriate, but absolute accuracy remains limited by:
- reference error;
- ADC linearity;
- noise;
- source impedance;
- board layout;
- sensor accuracy.
True DAC on A0
A0 is special because the SAMD21 exposes its hardware DAC output there.
The DAC is 10 bit.
So the full hardware output code range is:
|
1 2 3 4 |
0 to 1023 |
DAC Example
|
1 2 3 4 5 6 7 8 9 10 |
void setup() { analogWriteResolution(10); } void loop() { analogWrite(A0, 512); } |
This produces a true analog voltage level rather than PWM.
A0 cannot simultaneously act as an independent external analog input and DAC output.
PWM Pins
The official pinout and current SAMD variant show timer/PWM capability on more pins than a classic AVR Nano.
Clearly marked common PWM positions include:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
D2 D3 D5 D6 D9 D10 D11 D12 A2 A3 A5 |
Because SAMD21 peripheral multiplexing is flexible, some timer functionality depends on the selected peripheral mode and core implementation.
For portable sketches, use the standard Arduino API rather than configuring TCC/TC registers directly unless you deliberately need low-level timing control.
SAMD21 Timers Are Different from AVR Timers
The SAMD21 uses TCC and TC timer/counter peripherals rather than the ATmega328P Timer0/Timer1/Timer2 architecture.
This provides:
- flexible waveform routing;
- advanced PWM;
- event-system integration;
- multiple capture/compare functions.
It also means direct-register AVR code will not port.
Interrupts
The SAMD21 has an External Interrupt Controller with multiple EIC channels.
Many Nano 33 IoT pins map to external interrupt lines.
For normal Arduino code use:
|
1 2 3 4 5 6 7 8 |
attachInterrupt( digitalPinToInterrupt(D3), myISR, RISING ); |
Keep the ISR short and handle longer work from the main loop.
NINA-W102 Wireless Module
Wireless networking is not performed by the SAMD21 itself.
The onboard NINA-W102 is an ESP32-based module with:
- 2.4 GHz 802.11 b/g/n Wi-Fi;
- Bluetooth/BLE;
- its own CPU, RAM and Flash;
- Arduino’s pre-certified connectivity firmware.
Main Sketch Runs on SAMD21, Not the ESP32
The normal architecture is:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Arduino sketch ↓ SAMD21 48 MHz Cortex-M0+ │ ├── GPIO ├── ADC / DAC ├── USB └── application logic │ ▼ NINA-W102 │ ├── Wi-Fi └── Bluetooth |
This is fundamentally different from Nano ESP32, where the ESP32-S3 itself is the main application processor.
WiFiNINA Library
The normal Wi-Fi API is provided by:
|
1 2 3 4 |
#include <WiFiNINA.h> |
Example:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <WiFiNINA.h> char ssid[] = "YOUR_SSID"; char pass[] = "YOUR_PASSWORD"; void setup() { Serial.begin(115200); while (WiFi.begin(ssid, pass) != WL_CONNECTED) { delay(3000); } Serial.println(WiFi.localIP()); } void loop() { } |
Bluetooth Low Energy
The same NINA-W102 radio also supports Bluetooth Low Energy.
ArduinoBLE allows the board to act as:
- BLE peripheral;
- BLE central;
- sensor beacon;
- phone-connected controller.
Because the wireless module is separate from the SAMD21, your application continues to run on the Cortex-M0+ while NINA handles radio activity.
Communication with NINA-W102
The SAMD21 communicates with NINA using internal SPI, serial/control and handshake signals.
The current Arduino core reserves internal pins for:
- NINA SPI MOSI;
- NINA SPI MISO;
- NINA SPI clock;
- NINA chip select;
- NINA reset;
- attention/acknowledge signalling;
- internal serial communication.
These are not normal user-header SPI pins.
Some NINA GPIOs Reach the External Header
Arduino documents several external Nano pins that are electrically shared with NINA ESP32 GPIOs:
| Header pin | SAMD21 pin | NINA ESP32 GPIO |
|---|---|---|
| A4 | PB08 | GPIO13 |
| A5 | PB09 | GPIO14 |
| A6 | PA09 | GPIO32 |
| A7 | PB03 | GPIO21 |
Arduino notes that those lines can theoretically be driven from the ESP32 side if the corresponding SAMD21 pins are correctly tri-stated.
This is an advanced architecture feature rather than a normal Arduino programming model.
Do Not Reflash NINA Casually
The NINA-W102 normally runs Arduino’s certified connectivity firmware.
Arduino explicitly warns that replacing the radio firmware with custom firmware can invalidate the compliance assumptions under which the module/board is certified.
For normal projects, leave the official NINA firmware installed and use WiFiNINA/ArduinoBLE.
ATECC608A Secure Element
The onboard ATECC608A stores cryptographic secrets in protected hardware.
It can be used for:
- private-key storage;
- certificates;
- authentication;
- secure IoT identity;
- accelerated cryptographic operations.
This was an important part of the Nano 33 IoT’s original design for connected-device security.
Onboard LSM6DS3 IMU
The board includes an LSM6DS3 6-axis IMU containing:
- 3-axis accelerometer;
- 3-axis gyroscope.
This enables:
- motion sensing;
- orientation estimation;
- gesture detection;
- activity logging;
- IoT movement alarms.
No external IMU module is required for basic motion projects.
Powering Nano 33 IoT
The board can be powered from:
- USB;
- VIN;
- the regulated 3.3 V rail in specialised designs.
Arduino’s pinout specifies:
|
1 2 3 4 |
VIN = 5-21 V |
using the onboard MPM3610 regulator.
5 V / VUSB Header Position
The Nano 33 IoT power arrangement is different from classic Nano.
The board includes a 5 V/VUSB header position and solder jumper configuration.
Arduino documents that:
- the 5 V USB rail can be made available through the header when configured appropriately;
- USB host operation requires the VUSB power path to be configured correctly.
Do not assume the 5 V header behaves identically to the classic Nano’s regulated 5 V rail in every configuration.
3.3 V Pin
The main MCU and GPIO operate from 3.3 V.
The 3.3 V pin can power compatible external peripherals, but total regulator and board-current limits still apply.
AREF
The AREF pin is available for analog-reference configuration.
External reference voltage must stay within SAMD21 electrical limits and the Arduino core must be configured accordingly.
Nano 33 IoT vs Classic Nano
| Feature | Classic Nano | Nano 33 IoT |
|---|---|---|
| Main MCU | ATmega328P | SAMD21G18A |
| CPU | 8-bit AVR, 16 MHz | 32-bit Cortex-M0+, 48 MHz |
| Flash | 32 kB | 256 kB |
| SRAM | 2 kB | 32 kB |
| Logic | 5 V | 3.3 V |
| ADC | 10 bit | 12 bit |
| True DAC | No | 10-bit on A0 |
| Native USB | No | Yes |
| Wi-Fi/BLE | No | Yes, via NINA-W102 |
| IMU | No | Yes |
For the original board’s mapping, see our classic Arduino Nano pinout guide.
Nano 33 IoT vs Nano ESP32
These two boards may look similar but use completely different system architectures.
Nano 33 IoT:
|
1 2 3 4 5 6 7 8 |
SAMD21 = main application MCU NINA-W102 ESP32 = connectivity coprocessor |
Nano ESP32:
|
1 2 3 4 5 6 7 |
ESP32-S3 = main application MCU = Wi-Fi/BLE processor = native USB processor |
Nano ESP32 is dramatically faster and has much more memory, while Nano 33 IoT remains interesting for SAMD21 projects, native USB, low-power embedded work and existing SAMD software.
See our Nano ESP32 pinout guide for the newer ESP32-S3 architecture.
Quick Pin Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
UART D0 = RX D1 = TX Serial1 USB native SAMD21 USB Serial SPI D10 = SS D11 = MOSI / COPI D12 = MISO / CIPO D13 = SCK I2C A4 = SDA A5 = SCL Wire ADC A0-A7 12-bit hardware DAC A0 10-bit true DAC Common PWM/timer-capable pins D2 D3 D5 D6 D9 D10 D11 D12 A2 A3 A5 Wireless NINA-W102 Wi-Fi + Bluetooth/BLE Logic voltage 3.3 V only VIN 5-21 V |
Best Practices
- Never connect 5 V logic directly to Nano 33 IoT GPIO.
- Use
Serialfor USB andSerial1for D0/D1. - Remember A0 is the true DAC output.
- Treat A4/A5 primarily as I²C because of their pull-ups and board design.
- Use the standard D10-D13 SPI mapping for portable code.
- Keep GPIO current below Arduino’s 7 mA-per-pin limit.
- Leave official NINA firmware installed unless you specifically need advanced radio development.
- Use the ATECC608A when protected credentials matter.
- Remember Wi-Fi/BLE runs on NINA, not directly on the SAMD21.
- Use double-reset bootloader recovery if a sketch makes the native USB port disappear.
Final Thoughts
The Arduino Nano 33 IoT is best understood as a SAMD21 application board with a separate ESP32-based wireless coprocessor.
The main pin mappings are:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
D0/D1 → Serial1 RX/TX D10-D13 → SPI A4/A5 → I2C A0-A7 → 12-bit ADC A0 → 10-bit true DAC USB → native SAMD21 USB NINA-W102 → Wi-Fi and Bluetooth/BLE |
The most important electrical warning is equally simple:
|
1 2 3 4 5 6 |
Nano 33 IoT GPIO = 3.3 V = not 5 V tolerant |
Compared with the classic Nano, the board provides much more memory, native USB, better analog hardware, an IMU and wireless connectivity. Compared with Nano ESP32, it is slower and far more memory-constrained, but it remains a clean SAMD21 platform with a mature Arduino software ecosystem and a useful separation between the application MCU and wireless module.