Skip to main content
The Arduino Uno Q is a dual-system board combining a Qualcomm QCS2210 (running Linux Debian) and an STMicroelectronics STM32U585 microcontroller (running Zephyr RTOS).
This guide walks you through deploying an Edge Impulse Zephyr module and running inference on the STM32 side.
west support for the Uno Q is still experimental. Debugging requires ADB port forwarding.
See the official Zephyr documentation for the latest details:
https://docs.zephyrproject.org/latest/boards/arduino/uno_q/doc/index.html

Arduino Uno Q

Overview

The Uno Q consists of:
  • Qualcomm QCS2210 – Runs Linux Debian (host logic, logging, cloud, UI).
  • STMicroelectronics STM32U585 – Runs Zephyr RTOS (real-time sensor IO + ML inference).
Your Edge Impulse model runs on the Zephyr (STM32) MCU, while the Linux side may consume results via UART, SPI, I²C, or shared logging.

Prerequisites

Step 1: Set Up the Development Environment

ADB communicates with the Linux side of the Uno Q.
To flash/debug the STM32, the on-board OpenOCD server must be started manually.

1. Verify ADB connection

Run:
adb devices
you should see something like:
example-standalone-inferencing-zephyr-module git:(main) ✗ adb devices
List of devices attached
1914980263	device
in one shell
adb forward tcp:3333 tcp:3333 && adb shell arduino-debug
in a different shell
west build -b arduino_uno_q
west debug -r openocd
You should see output similar to:

Uno Q

Step 2: Initialize the Example Project with Edge Impulse Zephyr Module

See our Edge Impulse Zephyr Module for the latest deployment instructions
mkdir ~/zephyrproject && cd ~/zephyrproject
west init -m https://github.com/edgeimpulse/example-standalone-inferencing-zephyr-module
cd example-standalone-inferencing-zephyr-module
west update
This pulls:
  • Zephyr core RTOS
  • Edge Impulse Zephyr Module (edge-impulse-sdk-zephyr)
  • Example app sources under src/

Step 3: Deploy Your Model from Edge Impulse Studio

In Edge Impulse Studio, go to Deployment > Zephyr Module Click Build Download the .zip file (e.g. my_model-zephyr.zip) Extract it into your project:
mkdir -p model
unzip ~/Downloads/my_model-zephyr.zip -d model

Step 4: Add Model Path to CMakeLists.txt

Edit the project CMake file: add the following line to the end of CMakeLists.txt:
list(APPEND ZEPHYR_EXTRA_MODULES ${CMAKE_CURRENT_SOURCE_DIR}/model)
This tells the build system where to find your Edge Impulse model.

Step 5: Configure UNO Q Board for Zephyr Build

Open .west/config and set the board:
[build]
board = arduino_uno_q
The UNO Q shares its STM32U585 MCU architecture with the Uno Q, so arduino_uno_q is a working target until official uno_q Zephyr support is merged. See Zephyr docs for the latest here

Step 6: Build the Firmware

if you have previously built the project, do a pristine build:

west build --pristine
or
west build -b arduino_uno_q --pristine
west debug -r openocd

You should see output similar to:
[858/858] Linking CXX executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
          FLASH:      164584 B         1 MB     15.70%
            RAM:       19320 B       448 KB      4.21%
       IDT_LIST:          0 GB        32 KB      0.00%
Now you have validated the build, you are ready to flash your own model and custom applications to the Uno Q.

Step 7: Flash the UNO Q

You can flash the Uno Q using either USB DFU mode or SWD (ST-Link or J-Link).
Option A: Using USB DFU mode
  1. Hold the POWER button
  2. Short BOOT0 to GND
  3. Release POWER
Then run:
west flash --runner dfu-util
or specify the device:

west flash --runner dfu-util -- -d 0483:df11
or board

west flash --runner dfu-util -- -b arduino_uno_q
Option B — SWD (ST-Link or J-Link)
west flash —runner openocd If you see:
-- runners.openocd: Flashing file: build/zephyr/zephyr.hex
the firmware is flashing correctly.

Step 8: View Inference Results

Once flashed, open a serial console to the UNO Q: minicom -D /dev/ttyACM0 -b 115200 Expected output (example):

Edge Impulse standalone inferencing (Zephyr)
Predictions:
 normal: 0.02
 anomaly: 0.98

Step 9: (Advanced) Connect Linux & Zephyr Sides

If you want the Qualcomm Linux side to read inference results: Use UART or shared SPI/I2C between QCS2210 ↔ STM32U585 Forward results to Linux process (e.g. Python script monitoring /dev/ttyS*) This lets you run high-level logic or cloud uploads on Debian while Zephyr handles real-time ML.

Step 10: Update and Maintain

west update This keeps both Zephyr and Edge Impulse SDK up to date.

Summary

You’ve successfully deployed an Edge Impulse model using the Edge Impulse Zephyr Module to the STM32 MCU on the Uno Q. You can now build more complex applications combining real-time inference on Zephyr fully utilizing the Uno Q dual-system architecture, and leverage the low power MCU to the fullest extent.