The Arduino UNO Q is a new board that runs Debian.
Using the Arduino UNO Q allows you to run headless, no monitor, since it does not have an HDMI Port as most other Single Board computers (SBC), but it is a very useful board for learning.
Technical Specs
Just looking at the UNO Q, as shown in Figure 1, you can see it is a much smaller board compared to a regular SBC.
FIGURE 1
The specs are:
- Module
- Qualcomm Dragonwing™ QRB2210
- CPU
- Quad-core Arm® Cortex®-A53 @ 2.0 GHz
- MCU
- STM32U585 Arm® Cortex®-M33 up to 160 MHz
- GPU
- Adreno 702 GPU @ 845 MHz
- 3D graphics accelerator
- ISP
- 2x Image Signal Processor (13 MP + 13 MP or 25 MP) @ 30 fps
- Operating System
- Debian Linux OS with upstream support
- Storage (1 of these)
- 16 GB (ABX000162) eMMC (has 2 GB of LPDDR4 RAM)
- 32 GB (ABX00173) eMMC (has 4 GB of LPDDR4 RAM)
- Media Interfaces
- AudioMicrophone IN / Headphone OUT / Line OUT and Ear OUT on JMISC header
- User Interfaces
- RGB LED
- Operating System
- Arduino Code on Zephyr OS
- Memory
- Flash 2 MB
- Wi-Fi
- Wi-Fi® 5 Dual-band 2.4
- 5 GHz with onboard antenna
- Bluetooth
- Bluetooth® 5.1 with onboard antenna
- USB
- USB-C with host/device role switching, power role switch and video output
- Voltage
- +5 VDC max at 3A
Initial Connection and Update
When you connect a PC to the USB-C connection on the UNO Q, the board, it should power up and start booting. During the boot process, the LCD matrix should show an infinity symbol. After the Debian system starts, the LCD matrix should show a heart when the system boots completely. There should be some animation with the heart.
You can use two methods to connect to the UNO Q:
- Arduino App Lab
- Android Debug Tool (ADB)
You can find the App Lab at ‘https://www.arduino.cc/en/software/#app-lab-section’. Here, you will need to select the Operating System you are using before you download the image.
Before you install the App Lab, you need to get the Host Linux system to allow access over the USB port. To do this, create the file ‘/etc/udev/rules.d/60-Arduino-UNO-Q.rules’. Place the following code into the file:
Code:
echo \
'# Operating mode
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0078", MODE="0660", TAG+="uaccess"
# EDL mode
SUBSYSTEMS=="usb", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9008", MODE="0660", TAG+="uaccess"' \
| \
sudo \
tee \
"/etc/udev/rules.d/60-Arduino-UNO-Q.rules" \
&& \
sudo \
udevadm control \
--reload-rules \
&& \
sudo \
udevadm trigger
You can run the code with ‘sudo sh /etc/udev/rules.d/60-Arduino-UNO-Q.rules’. To test that the script has run correctly, use the command:
Code:
lsusb | grep -E "2341:0078|05c6:9008"
The output should show the bus that you connected to the Arduino on when you run the command, as in:
Code:
Bus 003 Device 007: ID 2341:0078 Arduino SA UNO Q - UQ
For Linux, you download it and then you can extract it. For example, my filename is ‘arduino-1.8.19-linux64.tar.xz’. You can use ‘File Roller’, or the like, to extract the files in the Graphical User Interface (GUI). You can use a command as follows, but change the filename to match your download:
Code:
tar -xvf ArduinoAppLab_0.4.0_Linux_x86-64.tar.gz
You will then change into the extracted folder. The name will depend on the version of the program:
Code:
cd ArduinoAppLab_0.4.0_Linux_x86-64
Then you simply start the program ‘./arduino-app-lab’. The program should be like that in Figure 2.
FIGURE 2
Here, you can see that it has detected the UNO Q. After the system detects the device, click on the image.
Next, you will specify the keyboard layout and the Hostname of the UNO Q, as in Figure 3. Once you have set both options, click on ‘Next’.
FIGURE 3
The next step is to select the Wi-Fi network and then specify the password to connect to the chosen wireless network.
After connecting to the Wi-Fi, the app will check for any updates. If it finds updates, a window similar to that in Figure 4 appears. Here, you can see that the updates will include those items listed.
FIGURE 4
After clicking on ‘Install Updates’, it downloads the updates and then sends the updates to the UNO Q.
Once it completes the updates, it prompts you to restart the App Lab, as shown in Figure 5.
FIGURE 5
Updating the Arduino Q Operating System
If you should cause issues with Debian, which is pre-installed on the Arduino UNO Q, you can reinstall Debian.
You need to note that this requires a jumper for two pins. The pins are for the jumpers labeled as ‘JCTL’. If you set the board so you can read the labels, the pins are in the top left corner and you jumper the right-most pins, as shown in Figure 6.
FIGURE 6
To get this to work, you need to download an app on your host Linux system as well as have the UNO Q hooked up by a USB-C cable.
You can find the file you need at ‘https://www.arduino.cc/en/software/#flasher-tool’.
Once you download this file to your default download directly, usually ‘~/Downloads/’ you need to use your compression tool to extract the file, or you can right-click on the file and select ‘Extract Here’.
After this is done, you need to open a terminal and use the following commands after you have hooked up the UNO Q with the jumper on it:
Code:
cd Downloads
cd arduino-flasher-cli<TAB> (the TAB key should fill in the version number in the folder name)
arduino-flasher-cli list
The last command will cause the app to contact the Internet and get a list of images that you can place on the UNO Q. The list generated when I ran the app is:
Code:
VERSION LATEST
20251229-457 ✓
20251127-441
20251024-412
20251006-395
20251002-387
20250807-136
You should see a similar list that is ordered by date and the newest is at the top of the list. You can specify the image you want, or you can use the parameter ‘latest’ to get the newest image:
Code:
sudo arduino-flasher-cli flash latest
Boot the UNO Q and wait a bit to start the flasher/ for the board to initialize properly. Once you start the flasher, it should prompt you if you want to proceed with the download and flashing of the board. Type in ‘yes’ and press enter. The app should then show it is downloading the file you specified. Once the download is complete, it will unzip the file and start writing to the UNO Q. The program sends each file separately to the UNO Q and shown in a line similar to:
Code:
qupfw_a [##################################################] 100.00
flashed "qupfw_a" successfully
This should occur for each file written on the UNO Q.
Once the flashing is complete, you’ll see a message similar to:
Code:
13 patches applied
partition 0 is now bootable
The board has been successfully flashed. You can now power-cycle the board (unplug and re-plug). Remember to remove the jumper.
You need to remove power from the UNO Q, remove the jumper, and then restore power to the board. The LED Matrix should show a moving Infinity symbol, then a heart and the LEDs should go blank, showing it boots properly into the new OS. You can connect with App Lab, as described above, and set up the board again since it is a new install and no configuration is on the system.
Even though you may have installed the latest image, the system may perform a software update for:
Code:
arduino:zephyr
arduino-app-cli
arduino-app-lab
arduino-cli
arduino-router
Since the configuration is being managed by the App Lab on the Host system, the update will also check for an update for the App Lab as well.
It is possible for the update to take longer than the actual OS flash.
After the update is complete, you’ll see a window that shows information about ‘What’s new’. Once this is closed, you are then in the App Lab and can run example programs or create your own.
Adding Ports
Now, it needs to be noted that the only available port is a USB-C 3.2 Gen 1 port. For fun, I tried the J5 Create JCD371 hub. This is a USB-C hub that has 2 USB 3.1 ports, a USB-C PD 2.0 charging port and 4K HDMI port. It worked well to allow the UNO Q to operate as a stand-alone SBC. This didn’t allow for much expansion for adding ports except for the HDMI port. Anything else, I needed to have a USB-A connection, such as USB-A to Ethernet.
The next option I tried was the J5 Create JCD542. This is a more expansive choice since it has the following ports available:
- USB-C PD 3.0 100W power throughput
- 3 USB-A 3.0 ports
- 4K HDMI port
- HDMI port
- Aux port for mic/speaker
- SD and micro-SD card slot
- Gigabit Ethernet port
The connection to the host system is a USB-C 3.1 Gen 1 connector which connects to the Arduino UNO Q port.
The requirement of the JCD542 is that the host system must support ‘DisplayPort Alt Mode’, which the Arduino UNO Q supports. The ‘DisplayPort Alt Mode’ is when the USB-C chip allows for video to be sent through the USB-C port.
I had to use the 4K HDMI port and not the HDMI port for the video to work properly with one monitor.
By using this hub, I could make the Arduino UNO Q feel more like a full-blown PC because I could expand it with more devices.
There was an issue with the AUX port on the JCD542, but since the Arduino UNO Q has Bluetooth and it was easier to just connect a Bluetooth device for playing audio. If using a monitor with built-in speakers or a television for video, the audio would play through the HDMI connection.
Setting Up a Printer Queue
You can use the Arduino UNO Q as any type of server type, but for an example, we will set up a printer queue to a network printer.
To set up printer sharing, you need to install the ‘Common Unix Printer System (CUPS)’:
After the system installs the service, we need to enable and start it:
Code:
sudo systemctl enable cups
sudo systemctl start cups
If you want to use the current user, in this case it should be ‘arduino’, to manage the printers, then add it to the ‘lpadmin’ group:
Code:
sudo usermod -aG lpadmin $USER
By default, you can connect to the web administration for CUPS from the host system only. The web address is ‘
http://localhost:631’ from the host system.
Once this is done, you need to restart the CUPS service with the command:
Code:
sudo systemctl restart cups
After opening the website ‘<a href="http://localhost:631/">http://localhost:631</a>’, you should then see a screen similar to Figure 7.
FIGURE 7
Click on the ‘Administration’ tab at the top of the website and you should see a screen like Figure 8.
FIGURE 8
Click on ‘Find New Printers’. Turn on the local or network printer. It should generate a list of printers found. In the list, find the one you want to add to the CUPS server and click on ‘Add This Printer’.
Now, it shows a new list that gives the name of the printer, description, location, connection and sharing option. Definitely check the ‘sharing’ option. You can change all options except the connection, which is read-only. Next, click on ‘Continue’.
The next screen will show all the settings you previously made and will let you select a printer make or a PPD file. Select the make and click ‘Add Printer’.
Now you have three tabs: ‘General’, ‘Banners’ and ‘Policies’.
The ‘General’ tab lets you set the paper type, source, sets 2-sided printing (if available), quality and scale.
For ‘Banners’, it lets you specify if the system prints a banner with each print job.
‘Policies’ allows you to set up rules for the printer.
Once you've set all this, the system initializes the printer on the UNO Q and you can add the printer from other devices on the network easily. Add a printer and let it find all the printers. Choose the printer and it sets up that printer on your remote Linux system.
Conclusion
The Arduino UNO Q is a powerful little board that you can definitely expand with hub devices if you want to expand it.
There is a lot you can do with the board, such as programming. If you are into programming and using an SBC as a device to configure as you need, you definitely need to look into the Arduino UNO Q.











