安装与配置
概述
Arduino Nicla Vision (简称 NiclaV)是一款集成双处理器、可并行运行任务的开发板。它属于同一系列的开发板家族,拥有相同的外形尺寸,但针对不同场景设计,如 Nicla Sense ME 和 Nicla Voice 。Nicla 系列可高效运行 TensorFlow Lite 创建的模型。例如,NiclaV 的一个核心可实时运行计算机视觉算法(推理),另一个核心则负责底层操作,如电机控制、通信或用户界面。板载无线模块支持 WiFi 与蓝牙低功耗(BLE)同时管理。

硬件简介
双核并行架构
主控芯片为双核 STM32H747 ,包含 480 MHz 的 Cortex M7 和 240 MHz 的 Cortex M4。两核通过远程过程调用(RPC)机制通信,可无缝调用对方函数。两核共享片上所有外设,支持:
- 基于 Arm Mbed OS 的 Arduino sketch
- 原生 Mbed 应用
- MicroPython / JavaScript 解释器
- TensorFlow Lite

存储与内存
内存对嵌入式机器学习项目至关重要。NiclaV 板载最大 16MB QSPI Flash 用于存储。但需注意,机器学习推理主要依赖 MCU 的 SRAM,STM32H747 仅有 1MB(两核共享)。芯片还集成 2MB FLASH,主要用于代码存储。
板载传感器
- 摄像头:GC2145 2MP 彩色 CMOS
- 麦克风:
MP34DT05
数字 MEMS 麦克风,超小型、低功耗、全向 - 6 轴 IMU:
LSM6DSOX
,3D 陀螺仪 + 3D 加速度计 - ToF 距离传感器:
VL53L1CBV0FY
,高精度、低功耗,集成红外 VCSEL 激光器与接收光学系统,位于摄像头下方
Arduino IDE 安装与配置
首先用 micro USB 线连接开发板到电脑:

在 Arduino IDE 中安装 Nicla 板卡的 Mbed OS 内核。依次进入 工具 > 开发板 > 开发板管理器
,搜索 Arduino Nicla Vision 并安装。

接着,选择 工具 > 开发板 > Arduino Mbed OS Nicla Boards
,选中 Arduino Nicla Vision
。连接 USB 后,端口应能识别 Nicla 并选择。
打开示例 Blink(Examples/Basic),点击上传。板载绿灯(RGB)闪烁即表示 Nicla 安装与硬件正常!
测试麦克风
在 Arduino IDE,进入 Examples > PDM > PDMSerialPlotter
,运行并打开绘图仪,可实时查看麦克风音频波形:

可尝试不同频率声音,确认麦克风工作正常。
测试 IMU
测试 IMU 前需安装 LSM6DSOX 库。打开库管理器,搜索 LSM6DSOX,安装 Arduino 官方库:

然后运行 Examples > Arduino_LSM6DSOX > SimpleAccelerometer
,可测试加速度计(也可测试陀螺仪和温度):
\clearpage
测试 ToF 距离传感器
同理,需先安装 VL53L1X ToF 库。库管理器搜索 VL53L1X,安装 Pololu 官方库:

运行 proximity_detection.ino 示例:

串口监视器可实时显示摄像头前方物体距离(最大 4 米):

测试摄像头
可用 Examples > Camera > CameraCaptureRawBytes
测试摄像头,虽然不能直接预览,但可获取原始图像数据。
推荐使用
Web Serial Camera
(
API 说明
)网页应用,可通过 Web Serial 实时预览摄像头画面。该应用演示了如何用 JavaScript 解包并渲染 Arduino 板卡传输的图像数据,源码见
GitHub
。
Arduino 端代码(CameraCaptureWebSerial)见 此处 ,也可在 IDE“Examples→Camera”菜单下找到。
网页端应用可直接访问 这里 ,详细教程见官方文档。

安装 OpenMV IDE
OpenMV IDE 是 OpenMV 相机(与 Nicla Vision 类似)专用的集成开发环境,内置强大的文本编辑器、调试终端和帧缓冲区查看器(含直方图)。我们将用 MicroPython 编程摄像头。
访问 OpenMV IDE 官网 ,下载适合操作系统的版本并安装。

IDE 默认打开 helloworld_1.py 示例。若未自动打开,可通过 Files > Examples > HelloWord > helloword.py
手动打开。

串口输出(print 或错误信息)会实时显示在 Serial Terminal,摄像头画面显示在 Camera Viewer(帧缓冲区)及下方直方图区域。
升级 Bootloader
连接 Nicla 前,需确保 Bootloader 为最新版。用 Arduino IDE 选择 Nicla 板卡,打开 Examples > STM_32H747_System STM32H747_manageBootloader
,上传并按串口提示操作。
安装固件
升级 Bootloader 后,双击复位键进入 bootloader 模式,绿灯呼吸闪烁。回到 OpenMV IDE,点击左侧连接图标:

弹窗提示检测到 DFU 模式板卡,选择 Install the latest release firmware (vX.Y.Z)
,安装最新版 OpenMV 固件。

可不勾选 Erase internal file system
,点击 [OK]
。
绿灯闪烁表示固件上传中,终端窗口显示进度。

等待绿灯停止闪烁,出现“DFU firmware update complete!”提示,点击 [OK]
。

连接成功后工具栏出现绿色播放按钮。

电脑会出现名为 “NO NAME” 的新磁盘。

每次按 [RESET]
,板载 main.py 会自动执行。可通过 IDE 加载
main.py
(File > Open File...
)。

该代码为“Blink”示例,用于确认硬件正常。
测试摄像头
运行 helloword_1.py,在 File > Examples > HelloWorld > helloword.py
选择脚本。
点击绿色播放按钮,MicroPython 脚本上传并运行,Camera Viewer 区域可实时预览视频流,Serial Monitor 显示帧率(约 27fps)。

helloworld.py 示例代码如下:
import sensor, time
sensor.reset() # 传感器初始化
sensor.set_pixformat(sensor.RGB565) # 设置像素格式
sensor.set_framesize(sensor.QVGA) # 设置帧尺寸
sensor.skip_frames(time = 2000) # 等待设置生效
clock = time.clock() # 创建时钟对象
while(True):
clock.tick() # 更新时钟
img = sensor.snapshot() # 拍照
print(clock.fps())
更多 Python 示例见 GitHub 。
代码分为两部分:
- Setup:导入库、初始化变量
- Loop:循环采集图像(img),每帧可用于机器学习推理
点击红色 [X]
可中断程序。
注意:OpenMV Cam 连接 IDE 时速度约为断开时一半,断开后帧率更高。
更多 Python 示例见 Micropython 目录 ,可尝试测试板载各类传感器。
连接 Nicla Vision 到 Edge Impulse Studio
后续实验将用到 Edge Impulse Studio。 Edge Impulse 是领先的边缘设备机器学习开发平台。
Edge Impulse 官方支持 Nicla Vision。请先在 Studio 新建项目并连接 Nicla,步骤如下:
- 下载适合操作系统的 Arduino CLI
- 下载最新版 EI 固件
- 解压两者并放在同一文件夹
- 双击复位键进入 Boot 模式
- 运行对应操作系统的 uploader(EI FW):

- 执行批处理脚本,上传 arduino-nicla-vision.bin 到板卡
使用
Chrome
浏览器可通过 WebUSB 直接连接 Nicla 到 EI Studio,无需 EI CLI。
进入 Studio 项目,在 Data Acquisition
标签页选择 WebUSB
(1),弹窗选择 Nicla is paired
(2),点击 [Connect]
(3)。

可在 Collect Data 区域选择采集的传感器数据:

如采集 IMU 数据(惯性):

或采集摄像头图像:

还可测试外部 ADC(Nicla pin 0)及其他板载传感器,如麦克风、ToF(距离)或多传感器融合(fusion)。
Nicla Vision 扩展板(可选)
原型开发时常需外接传感器。推荐 Arduino MKR Connector Carrier (Grove 兼容) 。
该扩展板含 14 个 Grove 接口:5 路单独模拟输入(A0-A5)、1 路双模拟输入(A5/A6)、5 路单独数字 I/O(D0-D4)、1 路双数字 I/O(D5/D6)、1 路 I2C(TWI)、1 路 UART(串口),全部 5V 兼容。
Nicla Vision 17 个引脚全部连接到 Shield,但部分 Grove 接口未连接。

该扩展板兼容 MKR 系列,可与 Nicla Vision、Portenta 搭配使用。

例如,在 TinyML 项目中,你可用 LoRaWAN 设备发送推理结果,并采集环境光强,建议配合 OLED 显示屏用于离线显示:

Grove 光照传感器 可接 A0/PC4, LoRaWAN 设备 接 UART, OLED 接 I2C。
Nicla 引脚 3(Tx)和 4(Rx)连接到扩展板串口,用于 LoRaWAN 通信。UART 示例代码如下:
# UART 测试 - By: marcelo_rovai - Sat Sep 23 2023
import time
from pyb import UART
from pyb import LED
redLED = LED(1) # 板载红灯
# 初始化 UART
# Nicla Vision 的 UART (TX/RX) 在 "LP1"
uart = UART("LP1", 9600)
while(True):
uart.write("Hello World!\r\n")
redLED.toggle()
time.sleep_ms(1000)
可用 Arduino UNO 作为接收端,串口监视器显示 “Hello World”, 代码见此 。

OLED 示例代码如下(需上传 Adafruit 的 ssd1306.py 驱动,见 GitHub ):
# Nicla_OLED_Hello_World - By: marcelo_rovai - Sat Sep 30 2023
import ssd1306
from machine import I2C
i2c = I2C(1)
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, World', 10, 10)
oled.show()
ADC 采集 A0(PC4)光照传感器示例:
# 光照传感器 (A0) - By: marcelo_rovai - Wed Oct 4 2023
import pyb
from time import sleep
adc = pyb.ADC(pyb.Pin("PC4")) # 创建模拟输入对象
val = adc.read() # 读取模拟值
while (True):
val = adc.read()
print ("Light={}".format (val))
sleep (1)
ADC 也可用于温度等其他传感器。
以上脚本( GitHub 下载 )仅演示如何用 MicroPython 连接外部设备。
总结
Arduino Nicla Vision 是一款极具工业与专业应用价值的 tiny device。它强大、可靠、低功耗,内置多种常见嵌入式机器学习应用所需传感器,如视觉、运动、传感器融合与声音。
本实验所有代码均可在 GitHub 仓库 获取。