Title: Arduino UNO Q — Cannot read Serial/Monitor output via CLI without App Lab

Board: Arduino UNO Q (SKU: ABX00162) OS: Ubuntu/Debian Linux — working directly on the board (keyboard + monitor physically connected) Arduino CLI version: 1.4.1 Core: arduino:zephyr (version 0.54.1) FQBN: arduino:zephyr:uno_q Arduino App Lab: Installed and working


Background

I am using the Arduino UNO Q as a standalone single board computer with a keyboard and monitor plugged directly into the board. I am developing using Arduino CLI from the board's own terminal — not from a remote computer and not using SSH.

I have successfully compiled and uploaded sketches using:

bash

arduino-cli compile --fqbn arduino:zephyr:uno_q .
arduino-cli upload --fqbn arduino:zephyr:uno_q .

What I am trying to do

I want to implement basic UART send/receive and verify the MCU is running my sketch by reading its serial output — all from the CLI terminal without opening App Lab in a browser.


Problem 1 — arduino-cli monitor not working

When I run:

bash

arduino-cli monitor --fqbn arduino:zephyr:uno_q --config baudrate=9600

I get:

no monitor available

The arduino:zephyr core does not seem to support the CLI monitor command.


Problem 2 — Cannot read tty ports directly

I listed all tty ports:

bash

ls /dev/tty*

Output includes: /dev/ttyHS1, /dev/ttyHS2, /dev/ttyMSM0, /dev/ttyS0 to ttyS3

From the official documentation I understand:

  • /dev/ttyMSM0 — system console (my terminal) — busy
  • /dev/ttyHS1 — reserved by arduino-router service — busy
  • Serial1 on MCU side — also reserved by arduino-router

When I try:

bash

cat /dev/ttyHS1

I get:

device or resource busy

When I try:

bash

cat /dev/ttyMSM0

Nothing happens.

When I try:

bash

cat /dev/ttyHS2

Nothing appears.


Problem 3 — Serial output not visible anywhere on CLI

Using this sketch:

cpp

void setup() {
  Serial.begin(115200);
  Serial.println("MCU ready");
}

void loop() {
  Serial.println("Hello from MCU");
  delay(1000);
}

There is no way to see the Serial output from the CLI terminal. I understand from the docs that Serial goes to physical pins D0/D1 only — not to any console.


Problem 4 — Monitor only works through App Lab

Using this sketch:

cpp

#include <Arduino_RouterBridge.h>

void setup() {
  Monitor.begin();
  Monitor.println("MCU ready");
}

void loop() {
  Monitor.println("Hello from MCU");
  delay(1000);
}

Monitor output is only visible when App Lab is open in a browser. There is no documented way to read Monitor output from a pure CLI terminal session.


What I tried

Attempted to read the Unix socket directly using Python msgpack:

python

import socket
import msgpack

SOCKET_PATH = "/var/run/arduino-router.sock"

with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
    s.connect(SOCKET_PATH)
    request = [0, 1, "mon/read", []]
    s.sendall(msgpack.packb(request))
    unpacker = msgpack.Unpacker(raw=False)
    while True:
        data = s.recv(4096)
        if not data:
            break
        unpacker.feed(data)
        for msg in unpacker:
            print(msg)
        break

Got error:

ValueError: Unpack failed: incomplete input

Also tried system/list to discover available RPC methods but could not get a clean response.


My questions

  1. Is there an official way to read Monitor output from the CLI terminal without opening App Lab in a browser?
  2. What is the correct RPC method name to subscribe to Monitor output via the Unix socket at /var/run/arduino-router.sock?
  3. Is there any tty port on the UNO Q that exposes MCU Serial output and is safe to read with cat or screen?
  4. Does arduino-cli monitor have any plan to support the arduino:zephyr core in a future release?
  5. What is the recommended workflow for developers who want to use the UNO Q purely from CLI without App Lab?

System info

bash

arduino-cli version
# arduino-cli Version: 1.4.1 Commit: e39419312 Date: 2026-01-19T16:12:55Z

arduino-cli core list
# arduino:zephyr  0.54.1

systemctl status arduino-router
# active and running

ls /var/run/arduino-router.sock
# socket exists

Reference

Official UNO Q user manual communication section confirms:

  • /dev/ttyHS1 and Serial1 are reserved by arduino-router
  • Monitor uses RPC method mon/write internally
  • App Lab is the intended interface for Monitor output

However there is no documentation for CLI-only workflows or reading Monitor output without App Lab.

Any help or pointers to documentation would be greatly appreciated. Thank you.

Hi @rajashekar_reddy ,
Welcome to the forum..

I use an adapter hooked up to pins 0,1, was using Serial, now I think we have to use Serial1 as they just flipped things a bit there..

There's also a SPI connection to linux..
Last resort, shutdown and disable the bridge and use HS1..

reading the board some should give you some ideas..

good luck.. ~q

Hi @rajashekar_reddy.

You can do this by using the monitor command of Arduino App CLI:

arduino-app-cli monitor

Some information in this thread:

The "golden path" is to use Arduino App CLI:

https://docs.arduino.cc/software/app-lab/tutorials/cli/

However, you are very much free and welcome to use the board as you like. You have a tremendous number of options in how you might utilize the UNO Q, especially in regards to the Linux machine.

It is here:
Test sketch: Welcome message appears on Serial Monitor
(a) Connect UNO Q, PC, TTL<--->USB Converter as per Fig-1 (tested).


Figure-1:
(b) Use IDE 2.3.7 to upload the following sketch into flash of MCU.

#include <Arduino_RouterBridge.h>

void setup() {
  Bridge.begin();
  Monitor.begin();
  delay(5000);
  Serial.begin(9600);   //creates Serial Monitor
  }

void loop() {

  Monitor.println("Hello");
  Serial.println("welcome");
  delay(1000);                      // wait for a second
}

(c) Open IDE 1.8.19, select the correct COMX port for Serial objcet and then open Serial Monitor at Bd = 9600. Check that Welcome message appears on the Serial Monior.

What have you wanted to refer to by the term Monitor Output?

With the introdunction of UNO Q and App LAb Interface, we have:
1. Console>>Serial Monitor (driven by sketch via USB-C connector)
2. Console>>Python (driven by script via USB-C)
3. IDE>> Serial Monitor (driven by sketch via TTL <----> USB-A converter)

So, Monitor is a display window onto which data/message produced by sketch are presented.

We have methods for Bridge class. For example:

Bridge.call()
Bridge.notify()
Bridge.provide()
Bridge.provide_safe()

RpcCall is a helper class from which we can create object and then associate method with this object.


Description

I am working with the Arduino UNO Q in SBC mode (Debian running on-board) and attempting to read UART output from the MCU directly in the Linux terminal. Despite multiple approaches, I am unable to observe any output.


Goal

Display simple MCU output (e.g., "HELLO") in the Linux terminal while running in SBC mode.


Hardware / Software Setup

  • Board: Arduino UNO Q
  • Mode: SBC Mode (Debian Desktop)
  • MCU ↔ MPU: Internal UART bridge
  • Baud rate: 115200

MCU Test Code

void setup() {
  Serial1.begin(115200);
}

void loop() {
  Serial1.println("HELLO");
  delay(1000);
}

What I Tried

1. Identifying UART devices

From boot logs:

  • /dev/ttyHS1
  • /dev/ttyHS2
  • /dev/ttyMSM0 (console)

2. Direct UART access

cat /dev/ttyHS1
cat /dev/ttyHS0

3. Stopping router service

sudo systemctl stop arduino-router.service

4. Manual UART configuration

stty -F /dev/ttyHS1 115200 raw -echo
cat /dev/ttyHS1

5. Using socat (bridge attempt)

Attempted to tap into possible internal routing:

socat - TCP4:localhost:5000

Also considered whether the router exposes UART via TCP, but no data was observed.


6. Using Arduino CLI monitor

arduino-cli monitor -p /dev/ttyHS1

7. Router-based API (alternative path)

#include <Arduino_RouterBridge.h>

void setup() {
  Monitor.begin();
}

void loop() {
  Monitor.println("HELLO");
  delay(1000);
}
  • No output in Linux terminal (understood this may route only to App Lab / router interface)

Observed Behavior

  • No output from /dev/ttyHSx

  • Sometimes:

    • Device or resource busy
    • or no response at all

Key Questions

  1. Which /dev/ttyHSx device is mapped to MCU Serial1 on UNO Q?
  2. Is raw UART access supported in SBC mode, or is communication only available via arduino-router?
  3. Does arduino-router expose UART data over TCP (e.g., port 5000), and if so, what is the correct method to access it?
  4. Is additional configuration (e.g., pinmux, permissions, or driver setup) required on the Linux side?
  5. What is the recommended way to view MCU logs directly in the Linux terminal in SBC mode?

Hypothesis

It seems either:

  • The incorrect UART device is being used, or
  • Direct UART access is not intended in SBC mode and communication must go through the router framework

Could someone confirm the correct architecture and recommended debugging method?


Any guidance or working example would be greatly appreciated.

I have merged your cross-posts @rajashekar_reddy.

Cross-posting is against the Arduino Forum rules. The reason is that duplicate posts can waste the time of the people trying to help. Someone might spend a lot of time investigating and writing a detailed answer on one topic, without knowing that someone else already did the same in the other topic.

Repeated cross-posting can result in a suspension from the forum.

In the future, please only create one topic for each distinct subject matter. This is basic forum etiquette, as explained in the "How to get the best out of this forum" guide. It contains a lot of other useful information. Please read it.

Thanks in advance for your cooperation.

You may find answers of you Key Questions of post #5 if you know the answers of the following questions. Note that MPU has no access to any hardware resources of the MCU. The MPU and MCU can exchange data using Router Bridge which is a UARTX (MPU)/LUART1 (MCU) link at fixed Bd = 115200
.
1. MCU uses LUART1 Port for the Router Bridge to communicate with MPU.
2. Do you know which UARTX Port of MPU is connected with LUART1 Port of MCU?
3. Do you know how to access UARTX Port at the MPU side using Python script?
4. Do you know how to access LUART1 Port at the MCU side using Arduino Sketch? If yes, please post the sketch below.
5. Do you know how to blink LED1_R at the MPU side using Python script? If yes, please post the script below.
6. At the MCU side, the header Pin-0 and Pin-1 support UART Port (Serial object) which can be connected with IDE terminal using TTL <-----> USB converter (Fig-1).


Figure-1: