(一)Qualcomm Arduino UNO Q开发板开箱及内容物
开箱
本次测评的Qualcomm Arduino UNO Q开发板为2GB RAM + 16GB EMMC版本。DigiKey得捷官网售价487.91元。
Qualcomm Arduino UNO Q开发板产品外包装为印刷纸盒。盒内分为一袋,袋内为Qualcomm Arduino UNO Q开发板本体,除本体外盒内另附纸制品若干。
关于该开发板的相关技术资料可通过访问Qualcomm Arduino官网(https://www.qualcomm.com/developer/hardware/arduino-uno-q)获取。
内容物
Qualcomm Arduino UNO Q开发板所有内容物包含:
- 开发板主体 *1
- 纸制品 若干
Qualcomm Arduino UNO Q开发板官方介绍
简介
Arduino® UNO Q 由 Arduino 设计,旨在让所有技能水平的开发者都能更轻松地进行嵌入式系统开发,并支持广泛的企业级和非企业级应用场景。
UNO Q 搭载高通® Dragonwing™ QRB2210 片上系统(SoC)/微处理器(MPU),并配备专用的 STM32U585 微控制器(MCU)。MPU 负责处理高级计算任务,如 AI 推理、媒体控制和连接功能;而 MCU 则确保对电机、传感器以及低延迟信号处理的实时控制。
UNO Q 是一款高性价比、可扩展的开发套件,专为加速创新而设计。它与 Arduino 生态系统完全兼容,支持轻松的硬件扩展。预装了 Linux Debian 和 Arduino App Lab,开发者可以即时访问示例应用和 AI 模型。UNO Q 为物联网和边缘 AI 原型开发提供了坚实的基础和灵活的扩展空间。
Arduino App Lab
Arduino App Lab 是专为 UNO Q 打造的一体化开发环境,旨在改变开发者、教育工作者和创新者为嵌入式系统、Linux 和边缘 AI 创建应用的方式。无论您是在构建 AI 驱动的机器人、智能传感器仪表板,还是实时语音助手,App Lab 都能简化您的工作流程。
作为 UNO Q 的预装软件,Arduino App Lab 将 Sketches、Python 脚本和 AI 模型整合为统一的应用程序——所有操作均可通过单一界面进行管理。您可以直接在开发板上运行,也可以通过 PC 远程访问,实现灵活的开发模式。借助预构建的示例和名为 Bricks 的直观构建模块,App Lab 让原型设计和规模扩展变得快速而简单。
硬件概览
优势
双脑架构,具备 AI 能力
QRB2210 MPU 负责处理计算和 AI 任务,如计算机视觉和自动化;而专用的 STM32U585 MCU 并行工作,为低处理量功能提供可靠、实时的控制。
灵活且熟悉的端到端开发
直接在开发板上或通过 PC 进行开发。使用 Arduino App Lab 拖拽 Arduino Bricks,它将 Arduino Sketches 与 Python 脚本、容器和 AI 模型结合在一起。
软件支持
在 Arduino IDE 中构建经典的 Arduino Sketches。充分利用预装的开源 Debian 操作系统工具的丰富且成熟的功能,并有即开即用的示例应用作为支撑。
免焊且可扩展
通过 Qwiic® 连接器或高速 GPIO 即插即用 Modulino® 节点、传感器和执行器。接入 Arduino Shield 生态系统,或使用高速 Arduino 载板扩展高级外设。内置 Wi-Fi® 和 Bluetooth®,随时保持连接。
应用场景
AI 与视觉
分析图像或视频,执行目标检测或图像分类,用于安防监控或产品质量控制;或构建能够读取条形码和二维码的扫描器。
智能感知
构建物联网解决方案,监测并记录空气质量、运动状态和天气预报等传感器数据;或在检测到环境阈值(如土壤湿度过低)时控制执行器。
实时控制系统
将基于 MCU 的快速 AI 感知与驱动,和 MPU 驱动的实时调参与可视化仪表板相结合。适用于控制理论、自动化和电机驱动系统。
AI 机器人
实现实时交互系统,结合视觉模型、仪表板以及舵机或 LED 等执行器,用于智能助手、交互式信息亭和人感知的物联网设备。
规格参数
| 参数 | 规格 |
|---|---|
| 处理器 | QRB2210 |
| 微控制器 | STM32U585 |
| MPU 操作系统 | 带上游支持的 Linux Debian OS |
| 内存 | 2GB 或 4GB LPDDR4 |
| 存储 | 16GB 或 32GB eMMC |
| 无线连接 | 带板载天线的 Wi-Fi® 5 2.4/5GHz;带板载天线的 Bluetooth® 5.1 |
| 电源 | 通过 USB-C 接口:5 VDC,最大 3 A;输入电压(VIN):7–24 VDC |
(以上内容取自Qualcomm Arduino官方网站,地址:https://www.qualcomm.com/developer/hardware/arduino-uno-q)
(二)Arduino App Lab
探索用于为新一代双核 Arduino 开发板创建 Arduino 应用程序的统一开发环境。专注于应用逻辑,通过堆叠即插即用的 Arduino Bricks来构建项目。
Arduino App Lab 下载
浏览器中输入“https://www.arduino.cc/en/software/#app-lab-section”;
在“Arduino App Lab”下选择对应操作系统版本,点击“Download”完成下载。
Arduino App Lab 安装
双击“ArduinoAppLab_installer.exe”即可完成自动安装。
Arduino App Lab 配置
双击“Arduino App Lab”,打开Arduino App Lab;
将 Qualcomm Arduino UNO Q开发板 使用 USB Type-C 接入,并等待 Qualcomm Arduino UNO Q开发板 启动完成,输入 Qualcomm Arduino UNO Q开发板 名称,点击“Next”;
将 Qualcomm Arduino UNO Q开发板 连入无线网络,点击“Next”;
输入 Qualcomm Arduino UNO Q开发板 密码,点击“Confirm”;
等待 Qualcomm Arduino UNO Q开发板 配置完成,显示如下图所示,即为配置完成。
(三)使用 Qualcomm Arduino UNO Q开发板 运行第一个DEMO
选择“Example”;
选择“Weather Forecast on LED matrix”;
点击“Copy and edit app”,点击“Create new”;
选择“sketch.ino”,修改“String city = “Turin””为所在城市;
点击“Run”,等待 Qualcomm Arduino UNO Q开发板 加载完成;
Qualcomm Arduino UNO Q开发板 显示天气即为成功;
点击“Stop”,停止运行。
Demo代码
main.py
# SPDX-FileCopyrightText: Copyright (C) Arduino s.r.l. and/or its affiliated companies## SPDX-License-Identifier: MPL-2.0fromarduino.app_bricks.weather_forecastimportWeatherForecastfromarduino.app_utilsimport*forecaster=WeatherForecast()defget_weather_forecast(city:str)->str:forecast=forecaster.get_forecast_by_city(city)print(f"Weather forecast for{city}:{forecast.description}")returnforecast.category Bridge.provide("get_weather_forecast",get_weather_forecast)App.run()sketch.ino
// SPDX-FileCopyrightText: Copyright (C) Arduino s.r.l. and/or its affiliated companies//// SPDX-License-Identifier: MPL-2.0#include<Arduino_LED_Matrix.h>#include<Arduino_RouterBridge.h>#include"weather_frames.h"String city="Beijing";Arduino_LED_Matrix matrix;voidsetup(){matrix.begin();matrix.clear();Bridge.begin();}voidloop(){String weather_forecast;bool ok=Bridge.call("get_weather_forecast",city).result(weather_forecast);if(ok){if(weather_forecast=="sunny"){matrix.loadSequence(sunny);playRepeat(10);}elseif(weather_forecast=="cloudy"){matrix.loadSequence(cloudy);playRepeat(10);}elseif(weather_forecast=="rainy"){matrix.loadSequence(rainy);playRepeat(20);}elseif(weather_forecast=="snowy"){matrix.loadSequence(snowy);playRepeat(10);}elseif(weather_forecast=="foggy"){matrix.loadSequence(foggy);playRepeat(5);}}}voidplayRepeat(intrepeat_count){for(inti=0;i<repeat_count;i++){matrix.playSequence();}}sketch.yaml
profiles:default:platforms:-platform:arduino:zephyr default_profile:defaultweather_frames.h
/* * SPDX-FileCopyrightText: Copyright (C) Arduino s.r.l. and/or its affiliated companies * * SPDX-License-Identifier: MPL-2.0 */constuint32_tsunny[][5]={{0x04812805,0x80138390,0x03402902,0x40000000,500},{0x12005201,0xa072009c,0x0b009400,0x90000000,500},{0x04812805,0x80138390,0x03402902,0x40000000,500},};constuint32_tcloudy[][5]={{0x0000380e,0x20888404,0x2020fe00,0x00000000,500},{0x00001c07,0x10444202,0x10107f00,0x00000000,500},{0x00000e03,0x88222101,0x08083f80,0x00000000,500},{0x00001c07,0x10444202,0x10107f00,0x00000000,500},};constuint32_trainy[][5]={{0x0780c208,0x084041fc,0x08a05100,0xa0000000,200},{0x0780c208,0x084041fc,0x02804502,0x88000000,200},{0x0780c208,0x084041fc,0x0a201402,0x28000000,200},};constuint32_tsnowy[][5]={{0x0780c208,0x084041fc,0x02004400,0x88000000,650},{0x0780c208,0x084041fc,0x00201002,0x20000000,650},{0x0780c208,0x084041fc,0x08800100,0x80000000,650},};constuint32_tfoggy[][5]={{0x0001fb00,0x006fc000,0x1f700000,0x00000000,660},{0x0001ef00,0x0077c000,0x1fb00000,0x00000000,660},{0x0001fb00,0x006fc000,0x1f700000,0x00000000,660},};(四)使用 Qualcomm Arduino UNO Q开发板 运行LLM
选择“Example”;
选择“Edge AI Assistant”;
点击“Copy and edit app”,点击“Create new”;
点击“Run”,等待 Qualcomm Arduino UNO Q开发板 加载完成;
点击“Stop”,停止运行。
Demo代码
main.py
# SPDX-FileCopyrightText: Copyright (C) Arduino s.r.l. and/or its affiliated companies## SPDX-License-Identifier: MPL-2.0fromarduino.app_bricks.llmimportLargeLanguageModelfromarduino.app_bricks.web_uiimportWebUIfromarduino.app_utilsimportAppfrompromptsimportload_system_promptdefgenerate_prompt(_,data):try:prompt=data.get("prompt","")# Use the plain text prompt for the LLM and stream the responseforrespinllm.chat_stream(prompt):ui.send_message("response",resp)# Signal the end of the streamui.send_message("stream_end",{})exceptExceptionase:ui.send_message("llm_error",{"error":str(e)})defcommands_handler(_,data):command=data.get("command","")try:ifcommand=="clear_chat":llm.stop_stream()llm.clear_memory()ui.send_message("command_ok",{"command":command})elifcommand=="stop_stream":llm.stop_stream()ui.send_message("command_ok",{"command":command})else:ui.send_message("command_error",{"command":command,"error":"Unknown command"})exceptExceptionase:ui.send_message("command_error",{"command":command,"error":str(e)})llm=LargeLanguageModel(system_prompt=load_system_prompt())llm.with_memory(10)ui=WebUI()ui.on_message("prompt",generate_prompt)ui.on_message("commands",commands_handler)App.run()prompts.py
# SPDX-FileCopyrightText: Copyright (C) Arduino s.r.l. and/or its affiliated companies## SPDX-License-Identifier: MPL-2.0importosdefload_system_prompt():try:withopen(os.path.join(os.path.dirname(__file__),"system_prompt.txt"),"r")asf:system_prompt=f.read()f.close()exceptException:system_prompt="You are a generic AI Chatbot Assistant."returnsystem_prompt