安装与配置

概述

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

图 1: Nicla Vision 板卡外观
图 1: Nicla Vision 板卡外观

硬件简介

双核并行架构

主控芯片为双核 STM32H747 ,包含 480 MHz 的 Cortex M7 和 240 MHz 的 Cortex M4。两核通过远程过程调用(RPC)机制通信,可无缝调用对方函数。两核共享片上所有外设,支持:

  • 基于 Arm Mbed OS 的 Arduino sketch
  • 原生 Mbed 应用
  • MicroPython / JavaScript 解释器
  • TensorFlow Lite
图 2: 双核架构与外设共享示意图
图 2: 双核架构与外设共享示意图

存储与内存

内存对嵌入式机器学习项目至关重要。NiclaV 板载最大 16MB QSPI Flash 用于存储。但需注意,机器学习推理主要依赖 MCU 的 SRAM,STM32H747 仅有 1MB(两核共享)。芯片还集成 2MB FLASH,主要用于代码存储。

板载传感器

  • 摄像头:GC2145 2MP 彩色 CMOS
  • 麦克风MP34DT05 数字 MEMS 麦克风,超小型、低功耗、全向
  • 6 轴 IMULSM6DSOX,3D 陀螺仪 + 3D 加速度计
  • ToF 距离传感器VL53L1CBV0FY,高精度、低功耗,集成红外 VCSEL 激光器与接收光学系统,位于摄像头下方

Arduino IDE 安装与配置

首先用 micro USB 线连接开发板到电脑:

图 3: 连接 Nicla Vision 到电脑
图 3: 连接 Nicla Vision 到电脑

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

图 4: 开发板管理器安装界面
图 4: 开发板管理器安装界面

接着,选择 工具 > 开发板 > Arduino Mbed OS Nicla Boards,选中 Arduino Nicla Vision。连接 USB 后,端口应能识别 Nicla 并选择。

打开示例 Blink(Examples/Basic),点击上传。板载绿灯(RGB)闪烁即表示 Nicla 安装与硬件正常!

测试麦克风

在 Arduino IDE,进入 Examples > PDM > PDMSerialPlotter,运行并打开绘图仪,可实时查看麦克风音频波形:

图 5: 麦克风测试波形
图 5: 麦克风测试波形

可尝试不同频率声音,确认麦克风工作正常。

测试 IMU

测试 IMU 前需安装 LSM6DSOX 库。打开库管理器,搜索 LSM6DSOX,安装 Arduino 官方库:

图 6: IMU 库安装界面
图 6: IMU 库安装界面

然后运行 Examples > Arduino_LSM6DSOX > SimpleAccelerometer,可测试加速度计(也可测试陀螺仪和温度):

\clearpage

图 7: 加速度计测试界面
图 7: 加速度计测试界面

测试 ToF 距离传感器

同理,需先安装 VL53L1X ToF 库。库管理器搜索 VL53L1X,安装 Pololu 官方库:

图 8: ToF 库安装界面
图 8: ToF 库安装界面

运行 proximity_detection.ino 示例:

图 9: ToF 距离检测示例
图 9: ToF 距离检测示例

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

图 10: 距离检测串口输出
图 10: 距离检测串口输出

测试摄像头

可用 Examples > Camera > CameraCaptureRawBytes 测试摄像头,虽然不能直接预览,但可获取原始图像数据。

推荐使用 Web Serial Camera API 说明 )网页应用,可通过 Web Serial 实时预览摄像头画面。该应用演示了如何用 JavaScript 解包并渲染 Arduino 板卡传输的图像数据,源码见 GitHub

Arduino 端代码(CameraCaptureWebSerial)见 此处 ,也可在 IDE“Examples→Camera”菜单下找到。

网页端应用可直接访问 这里 ,详细教程见官方文档。

图 11: Web Serial Camera 使用界面
图 11: Web Serial Camera 使用界面

安装 OpenMV IDE

OpenMV IDE 是 OpenMV 相机(与 Nicla Vision 类似)专用的集成开发环境,内置强大的文本编辑器、调试终端和帧缓冲区查看器(含直方图)。我们将用 MicroPython 编程摄像头。

访问 OpenMV IDE 官网 ,下载适合操作系统的版本并安装。

图 12: OpenMV IDE 下载页面
图 12: OpenMV IDE 下载页面

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

图 13: OpenMV IDE 主界面
图 13: OpenMV IDE 主界面

串口输出(print 或错误信息)会实时显示在 Serial Terminal,摄像头画面显示在 Camera Viewer(帧缓冲区)及下方直方图区域。

升级 Bootloader

连接 Nicla 前,需确保 Bootloader 为最新版。用 Arduino IDE 选择 Nicla 板卡,打开 Examples > STM_32H747_System STM32H747_manageBootloader,上传并按串口提示操作。

安装固件

升级 Bootloader 后,双击复位键进入 bootloader 模式,绿灯呼吸闪烁。回到 OpenMV IDE,点击左侧连接图标:

图 14: OpenMV IDE 连接按钮
图 14: OpenMV IDE 连接按钮

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

图 15: 固件安装弹窗
图 15: 固件安装弹窗

可不勾选 Erase internal file system,点击 [OK]

绿灯闪烁表示固件上传中,终端窗口显示进度。

图 16: 固件上传进度
图 16: 固件上传进度

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

图 17: 固件上传完成提示
图 17: 固件上传完成提示

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

图 18: OpenMV IDE 工具栏连接状态
图 18: OpenMV IDE 工具栏连接状态

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

图 19: Nicla Vision 作为 U 盘显示
图 19: Nicla Vision 作为 U 盘显示

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

图 20: main.py 文件选择界面
图 20: main.py 文件选择界面

该代码为“Blink”示例,用于确认硬件正常。

测试摄像头

运行 helloword_1.py,在 File > Examples > HelloWorld > helloword.py 选择脚本。

点击绿色播放按钮,MicroPython 脚本上传并运行,Camera Viewer 区域可实时预览视频流,Serial Monitor 显示帧率(约 27fps)。

图 21: 摄像头实时预览与帧率
图 21: 摄像头实时预览与帧率

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):
图 22: 固件上传脚本选择界面
图 22: 固件上传脚本选择界面
  • 执行批处理脚本,上传 arduino-nicla-vision.bin 到板卡

使用 Chrome 浏览器可通过 WebUSB 直接连接 Nicla 到 EI Studio,无需 EI CLI。

进入 Studio 项目,在 Data Acquisition 标签页选择 WebUSB(1),弹窗选择 Nicla is paired(2),点击 [Connect](3)。

图 23: WebUSB 连接界面
图 23: WebUSB 连接界面

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

图 24: 选择传感器数据界面
图 24: 选择传感器数据界面

如采集 IMU 数据(惯性):

图 25: IMU 数据采集界面
图 25: IMU 数据采集界面

或采集摄像头图像:

图 26: 摄像头数据采集界面
图 26: 摄像头数据采集界面

还可测试外部 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 接口未连接。

图 27: Grove 扩展板接口示意图
图 27: Grove 扩展板接口示意图

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

图 28: 扩展板与 Nicla Vision 组合图
图 28: 扩展板与 Nicla Vision 组合图

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

图 29: TinyML 项目扩展应用场景
图 29: TinyML 项目扩展应用场景

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”, 代码见此

图 30: Arduino UNO 串口监视器
图 30: Arduino UNO 串口监视器

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 仓库 获取。

参考资源

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区