Quick Summary (TL;DR):
The Arduino Nicla Vision is a 22.86 × 22.86 mm machine-vision board built around the dual-core STM32H747AII6, with a Cortex-M7 running up to 480 MHz and a Cortex-M4 up to 240 MHz. It combines a 2 MP GC2145 colour camera, Wi-Fi and Bluetooth connectivity, a LSM6DSOX 6-axis IMU, VL53L1CB time-of-flight distance sensor, digital MEMS microphone, secure element, battery charger and fuel gauge. The most important pinout detail is easy to miss: the external digital interfaces pass through programmable level shifters and can operate at 1.8 V or 3.3 V, but the three analogue inputs A0, A1 and A2 are 1.8 V only. Never apply 3.3 V to those analogue inputs. For vision work, the board can be programmed as a normal Arduino using the Mbed OS Nicla core and Camera library, or used with OpenMV/MicroPython for image processing and edge-AI experiments. It is far more capable than a basic camera breakout, but it is still a microcontroller-class vision platform: design around small image sizes, controlled frame rates and local inference rather than treating it like a Raspberry Pi.
Nicla Vision hardware at a glance
| Feature | Nicla Vision |
|---|---|
| Main MCU | STM32H747AII6 dual-core Arm Cortex-M7 + Cortex-M4 |
| Maximum clock | M7 up to 480 MHz, M4 up to 240 MHz |
| Internal memory | 2 MB Flash, 1 MB SRAM |
| External storage | 16 MB QSPI Flash |
| Camera | GalaxyCore GC2145, 2 MP colour sensor |
| Motion sensor | ST LSM6DSOX 6-axis accelerometer + gyroscope |
| Distance sensor | ST VL53L1CB time-of-flight sensor, up to about 4 m under suitable conditions |
| Microphone | Digital omnidirectional MEMS microphone |
| Wireless | Murata 1DX Wi-Fi + Bluetooth module |
| Security | NXP SE050C2 secure element |
| Battery monitoring | MAX17262 fuel gauge |
| External interfaces | SPI, I2C, UART, four low-power digital I/O, three analogue inputs |
| USB | Micro-USB, high-speed USB interface |
| Board size | 22.86 × 22.86 mm |
Nicla Vision is best understood as a complete embedded vision node rather than simply an Arduino board with a camera attached. The camera, processor, wireless radio and sensors are already integrated, so you can build a self-contained inspection, recognition or monitoring device without a stack of modules and jumper wires.
The small form factor also means that the exposed I/O is more specialised than on an Uno, Mega or ESP32 development board. You get enough pins for a sensor, a serial peripheral or a host connection, but not dozens of unrestricted GPIOs. Most designs should treat the onboard camera and sensors as the main purpose of the board and use the external pins for supporting hardware.
Arduino Nicla Vision pinout
The two side headers are labelled J1 and J2. J1 carries the analogue inputs and SPI interface. J2 carries power, UART, I2C and the remaining low-power digital pins.
| Connector | Pin | Arduino function | STM32 pin | Notes |
|---|---|---|---|---|
| J1 | 8 | A0 | PC4 | Analogue input, 1.8 V maximum |
| J1 | 7 | A1 | PF13 | Analogue input, 1.8 V maximum |
| J1 | 6 | SCLK | PE12 | SPI clock |
| J1 | 5 | CIPO | PE13 | SPI controller-in/peripheral-out, formerly MISO |
| J1 | 4 | COPI | PE14 | SPI controller-out/peripheral-in, formerly MOSI |
| J1 | 3 | CS | PE11 | SPI chip select |
| J1 | 2 | A2 | PF3 | Analogue input, 1.8 V maximum |
| J1 | 1 | D0 / LPIO0 | PG12 | Low-power digital I/O |
| J2 | 9 | VIN | — | Power input |
| J2 | 8 | NC | — | No connection |
| J2 | 7 | VDDIO_EXT | — | External I/O reference rail |
| J2 | 6 | GND | — | Ground |
| J2 | 5 | D3 / LPIO3 | PG1 | Low-power digital I/O |
| J2 | 4 | D2 / LPIO2 / RX | PA10 | UART receive |
| J2 | 3 | D1 / LPIO1 / TX | PA9 | UART transmit |
| J2 | 2 | SCL | PB8 | I2C clock |
| J2 | 1 | SDA | PB9 | I2C data |
The board also exposes a small battery header and battery connector. J3 pin 2 is VBAT and J3 pin 1 is NTC. If your Li-Po pack has a temperature-sense lead, that can be connected to the NTC input. Use one battery connection method only; do not connect two battery packs simultaneously through the header and rear connector.
The critical voltage rule: digital I/O is configurable, analogue is not
This is the single most important electrical detail on the Nicla Vision. The external digital signals are translated between the STM32’s internal 1.8 V domain and the external I/O domain. VDDIO_EXT can be configured for 1.8 V or 3.3 V operation, which makes the board flexible when talking to low-voltage sensors or normal 3.3 V logic.
The analogue inputs are different. A0, A1 and A2 operate at 1.8 V only. They do not become 3.3 V analogue inputs just because the digital I/O rail is configured to 3.3 V. If you need to measure a 0–3.3 V signal, use a resistor divider, buffer or external ADC designed for the required range.
The digital level translators are also intended for low-power signals. Do not use the Nicla Vision header pins to drive motors, relays, large LEDs or other loads directly. Use the pin as a logic signal into a transistor, MOSFET, driver or dedicated interface IC.
#include "Nicla_System.h"
void setup() {
nicla::begin();
// Select 3.3 V for the translated external digital I/O.
nicla::enable3V3LDO();
}
void loop() {
}
If your complete design is 1.8 V, the Nicla system API can instead select the 1.8 V external I/O level. Check the voltage requirements of every connected peripheral before changing this setting.
SPI, I2C and UART connections
SPI
The dedicated SPI pins are grouped on J1: SCLK, CIPO, COPI and CS. This is the cleanest interface for a fast external ADC, display controller, flash device or another microcontroller. Arduino now uses the terms CIPO and COPI in its pinout documentation; older libraries may still call the same signals MISO and MOSI.
I2C
I2C is available on PB8/SCL and PB9/SDA. These lines pass through the level translation circuitry. The board can therefore act as a compact vision node while an external environmental sensor, GPIO expander or display shares the I2C bus.
Do not confuse the external I2C bus with the board’s internal sensor buses. The camera, IMU, ToF sensor, fuel gauge, PMIC and secure element are already wired internally. Their internal addresses and buses matter when writing low-level firmware, but they are not additional free headers.
UART
The exposed hardware UART uses PA9 for TX and PA10 for RX. This is particularly useful when the Nicla Vision performs image inference locally and needs to send only a compact result such as PERSON=1, DEFECT=0 or a numeric confidence value to another controller.
That architecture is often better than trying to stream every image to a PLC, ESP32 or second Arduino. Let the Nicla Vision do the expensive camera work and send the decision over UART, I2C, BLE, Wi-Fi or another application-level protocol.
GC2145 2 MP camera: what it can really do
The onboard GalaxyCore GC2145 is a 2-megapixel colour CMOS image sensor. The headline resolution is useful for understanding the sensor, but it does not mean that every edge-AI application should run full-resolution 2 MP frames. Memory bandwidth, inference time and frame-buffer size quickly become more important than the sensor’s maximum pixel count.
For practical embedded vision, start at a lower resolution such as 320×240 and prove the complete pipeline first. That gives you a manageable frame, faster preprocessing and far less memory pressure. Once the application works reliably, increase resolution only if the model or inspection task genuinely needs more spatial detail.
#include "camera.h"
#include "gc2145.h"
GC2145 galaxyCore;
Camera cam(galaxyCore);
void setup() {
Serial.begin(115200);
// QVGA colour capture at 30 frames/s.
if (!cam.begin(CAMERA_R320x240, CAMERA_RGB565, 30)) {
Serial.println("Camera initialisation failed");
while (1) {}
}
Serial.println("GC2145 camera ready");
}
void loop() {
// Add frame capture / processing here.
}
The standard Arduino Mbed camera stack identifies the Nicla Vision and selects the GC2145 driver. This makes the board useful even if you do not want to use MicroPython: you can remain in a conventional Arduino/C++ workflow and still capture frames for custom processing.
One practical limitation is that some camera functions supported by monochrome Himax sensors on other Arduino vision hardware are not identical on the GC2145. For example, do not assume a hardware motion-detection example written for the Portenta Vision Shield will work unchanged on Nicla Vision. Treat examples as sensor-specific unless the documentation explicitly lists GC2145 support.
STM32H747: why the dual-core processor matters
The STM32H747 is dramatically more capable than the 8-bit AVR processors traditionally associated with Arduino. Its Cortex-M7 core provides high clock speed, DSP instructions, cache and floating-point support that are useful for image preprocessing and machine-learning inference. The Cortex-M4 adds a second real-time processing core.
That does not mean every Arduino sketch automatically uses both cores. The normal programming environment abstracts much of the complexity, and many applications run primarily on the M7. Dual-core development is possible, but it should be treated as an advanced optimisation rather than the first step of a project.
A sensible progression is:
- Get camera capture reliable on one core.
- Reduce the image to the smallest useful resolution and colour format.
- Add preprocessing and inference.
- Measure frame time, memory usage and power consumption.
- Only then consider parallelism or second-core work if the measured bottleneck justifies it.
OpenMV and MicroPython on Nicla Vision
Nicla Vision has unusually strong support for OpenMV. Instead of writing every image-processing step in C++, you can run OpenMV firmware and use MicroPython APIs for camera capture, thresholding, blob detection, AprilTags, feature extraction and other vision tasks.
This is one of the board’s main advantages for experimentation. A vision algorithm can be changed interactively without rebuilding a large C++ project every time. It is especially useful during the phase where you are trying different regions of interest, exposure settings, thresholds or model inputs.
OpenMV firmware runs its vision workload on the M7 side. The exact clock configuration used by OpenMV can differ from the maximum frequencies quoted in the Arduino hardware datasheet, so do not compare benchmark numbers between Arduino C++ and OpenMV purely from the headline MCU clock. Compare the complete application.
Edge AI and TinyML: the right way to use the board
Nicla Vision is well suited to small, focused edge-AI models: person/no-person detection, simple object classification, package presence, colour or label classification, hand gesture recognition, machine-state recognition and visual anomaly screening.
The strongest design pattern is to avoid sending raw camera data unless it is actually needed. Instead:
- Capture a frame locally.
- Crop or resize it to the model’s input dimensions.
- Run inference on the Nicla Vision.
- Transmit only the class, score, count, alarm or measurement.
This reduces bandwidth, improves privacy and makes the system less dependent on a cloud connection. A factory node can report “cap missing” instead of uploading a photograph of every product. A room sensor can report occupancy rather than streaming video. A maintenance node can report an abnormal state only when a threshold or model indicates a problem.
Do not overestimate the board because it has an M7 at 480 MHz. Large object-detection networks designed for GPUs are not appropriate. The useful target is a compact quantised model with a deliberately small input image and controlled inference rate.
Wi-Fi and Bluetooth connectivity
The onboard Murata 1DX radio provides Wi-Fi and Bluetooth connectivity through the supplied external antenna. Fit the antenna to the board’s micro-U.FL connector before relying on wireless range. The antenna itself is easy to overlook because the Nicla Vision is so small.
Wi-Fi is useful when the board must publish inference results, sensor readings or captured data to a server, MQTT broker, REST endpoint or Arduino Cloud. Bluetooth is useful for provisioning, local configuration, nearby telemetry and applications where a phone or gateway is physically close to the device.
For battery designs, wireless traffic can consume more energy than the inference itself. Avoid reconnecting to Wi-Fi for every individual sensor sample. Batch results, reduce update frequency and keep the radio off when the application allows it.
Onboard sensors beyond the camera
LSM6DSOX 6-axis IMU
The LSM6DSOX combines a 3-axis accelerometer and 3-axis gyroscope. In a fixed camera this can detect movement, impact or orientation changes. In a wearable or moving asset it can add motion context to the visual classification.
A particularly useful design is sensor fusion at the application level: wake or trigger the camera only when the IMU reports movement. That avoids running the image pipeline continuously.
VL53L1CB time-of-flight sensor
The ToF sensor provides direct distance information without trying to estimate range from the camera image. That can help a visual inspection application decide whether an object is actually in the correct position before capturing or classifying it.
For example, a packaging station can wait until the measured range indicates that a box is inside the inspection window, then capture a frame and run the model. Combining a distance trigger with vision is often more robust than asking the camera to solve both presence and classification.
MEMS microphone
The digital microphone makes mixed audio/vision projects possible, but it is more useful as an event source than as a reason to run a complex multi-modal model immediately. A sound threshold can wake a visual check, or the microphone can capture machine noise while the camera records a visual state.
Powering the Nicla Vision
For development, power the board through its micro-USB connector. A standalone installation can use the supported single-cell 3.7 V Li-Po or Li-ion battery, with the onboard charger and MAX17262 fuel gauge providing battery management and state-of-charge information.
Camera capture and Wi-Fi transmission are relatively demanding compared with deep sleep. Battery runtime therefore depends far more on duty cycle than the battery’s headline capacity. A node that wakes every minute, captures one image, performs inference, transmits a result and sleeps can last vastly longer than a node continuously streaming frames.
For permanent installations, also plan the thermal environment. A tiny board running the M7, camera and radio continuously in a sealed enclosure can become much warmer than the same board doing intermittent inference.
Arduino IDE setup
- Install the current Arduino IDE 2.x release.
- Open Boards Manager.
- Install or update Arduino Mbed OS Nicla Boards.
- Connect Nicla Vision with a data-capable micro-USB cable.
- Select Arduino Nicla Vision as the board and choose its serial/DFU port.
- Start with a board example before adding camera, Wi-Fi and AI code simultaneously.
If uploads stop working after a bad sketch, double-press the reset button to force the board into bootloader mode. Arduino also provides a bootloader-management example in the STM32H747 system examples. Keeping the Mbed OS Nicla core and bootloader current is worthwhile before diagnosing more exotic problems.
Good project architectures
| Project | Recommended architecture |
|---|---|
| People/occupancy indicator | Low-resolution camera inference → publish count/state over Wi-Fi or BLE |
| Machine inspection | External trigger or ToF → capture → classify → UART/I2C result to PLC/controller |
| Battery wildlife/asset node | IMU/event trigger → brief capture/inference → transmit only event metadata |
| Gesture interface | Camera or IMU detects gesture → local command output |
| Package presence/label check | ToF verifies range → camera checks region of interest → pass/fail output |
| Predictive-maintenance node | IMU + microphone collect context; camera captures only when event threshold is met |
The board becomes much more effective when the sensors cooperate. Using the camera for every stage of a task wastes processing power. A cheap range or motion cue can decide when the expensive visual step is necessary.
Common mistakes
- Applying 3.3 V to A0, A1 or A2. The analogue inputs are 1.8 V only.
- Driving loads directly from LPIO pins. The translated digital I/O is for logic, not power switching.
- Forgetting the wireless antenna. Wi-Fi/Bluetooth performance will be poor without the supplied antenna attached correctly.
- Starting with full-resolution images. Use the smallest frame that preserves the information your model needs.
- Assuming every Portenta camera example is compatible. The GC2145 does not support every feature provided by Himax sensors.
- Treating the board like a Linux SBC. It has far less memory and a very different software model from Raspberry Pi-class hardware.
- Streaming everything to the cloud. Local inference is one of the main reasons to choose Nicla Vision.
- Connecting two batteries. Use either the dedicated battery connector or the appropriate header connection, not two packs simultaneously.
Troubleshooting
| Symptom | What to check first |
|---|---|
| Board is not detected by Arduino IDE | Use a data-capable USB cable, update Arduino Mbed OS Nicla Boards, then double-press reset for bootloader mode. |
| Camera fails to initialise | Test the official Camera example with the GC2145 driver before adding Wi-Fi, AI or custom libraries. |
| Image output looks corrupted | Verify image resolution, pixel format, frame-buffer size and host-side byte interpretation all match. |
| External 3.3 V device does not communicate | Confirm the external digital I/O rail is set correctly and both devices share ground. |
| Analogue reading is saturated or unstable | Confirm the signal never exceeds 1.8 V and that the source impedance is suitable. |
| Wireless range is poor | Check the U.FL antenna connection and enclosure placement. |
| Battery drains quickly | Measure camera and radio duty cycle; reduce frame rate, connection time and transmit frequency. |
| Inference is too slow | Reduce image dimensions, crop the region of interest, quantise the model and lower inference frequency. |
Nicla Vision vs ESP32 camera boards
An ESP32-CAM or ESP32-S3 camera board is usually cheaper and has an enormous hobby ecosystem. Nicla Vision costs more, but integrates a much stronger vision-oriented MCU, high-speed USB, extra sensors, secure element, programmable external I/O voltage, battery management and first-class OpenMV support in a very small package.
Choose a typical ESP32 camera board when the project is cost-sensitive and mainly needs snapshots, web streaming or modest image processing. Choose Nicla Vision when the project benefits from deterministic local processing, OpenMV/MicroPython, the STM32H7 architecture, industrial-style sensing or a compact self-contained edge-AI node.
FAQ
Is Nicla Vision a 3.3 V board?
Its external digital I/O can be configured for 3.3 V operation, but the board internally uses lower-voltage rails and the analogue inputs are strictly 1.8 V. Do not apply the usual “all Arduino pins are 3.3 V” assumption.
Can Nicla Vision run without another Arduino?
Yes. It is a standalone microcontroller board with its own processor, camera, sensors, wireless radio, USB and battery support. A host board is optional.
Can I program Nicla Vision with Python?
Yes. OpenMV firmware provides a MicroPython-based workflow specifically suited to embedded machine vision. You can also use the normal Arduino C++ environment.
Does the 2 MP camera mean I should run AI at 1600×1200?
No. Edge-AI models normally work far better with smaller inputs. Start with a low-resolution frame or a cropped region of interest and increase resolution only when measurements show that the extra detail improves the result.
Can I connect a normal 5 V Arduino Uno directly to the UART pins?
Do not feed 5 V logic directly into the Nicla Vision. Use appropriate level shifting or a 3.3 V-compatible interface. The Nicla’s external digital domain is designed around 1.8/3.3 V logic, not 5 V.
Datasheets & external resources
The following manufacturer and framework references are useful when you need electrical limits, current software behaviour or lower-level implementation details.
- Arduino Nicla Vision product documentation — official board overview, tutorials, schematics, datasheet and downloads.
- Arduino Nicla Vision full pinout PDF — J1/J2 pin mapping, VDDIO_EXT behaviour, battery pins and debug/test points.
- Arduino Nicla Vision datasheet — MCU, memory, sensors, power architecture and board operation.
- Arduino Nicla Vision bootloader guide — recovery and bootloader update procedure.
- OpenMV Nicla Vision quick reference — OpenMV/MicroPython pin mapping, hardware notes and vision-specific behaviour.
- Arduino Mbed Camera library — current Camera API and GC2145 examples used by Nicla Vision.