I built a clipboard server on Arduino Uno Q and it replaced a workflow I didn’t know I hated


If you work across multiple devices, you’ve almost certainly emailed yourself a link, pasted something into a Notes app only to open it on another machine, or maybe even typed a URL by hand because you couldn’t be bothered to find a better way. Syncing the clipboard between devices is a largely solved problem at this point, but sometimes it’s nice to have a simple way to quickly and easily copy text between two devices without any additional software. Sure, Apple has the Universal Clipboard, Windows has its own clipboard sync, and third-party tools like ClipCascade let you host something yourself, but none of them seemed right for the level of simplicity I wanted.

I’ve been spending a lot of time with the Arduino Uno Q just to have a little fun. I have talked about What makes it so strange and interesting?and I also turned it into a Bluetooth streaming server for my speakers. This time, I wanted to try something more practical: a network-connected clipboard that any device on my local network could access and pull, no cloud required.

The result is a small Flask application that I call ClipDrop and it ended up being one of the most truly Useful things I’ve built into the Uno Q so far. It’s basic and simple, but does exactly what I want.

The Uno Q is really good at this kind of thing.

Its bridge architecture is truly unique.

Arduno Uno Q showing a heart on the LED matrix

The dual processor configuration of the Arduino Uno Q is what makes a project like this possible in the first place. The Qualcomm QRB2210 side runs Debian Linux, so you can run a full Python web server on it. The STM32U585 microcontroller handles tasks in real time and has direct access to the onboard hardware, including the 8×13 LED matrix. The two parts communicate with each other via what Arduino calls a Bridge, and that’s what holds ClipDrop together.

The official Arduino way of creating and deploying applications on Uno Q is through App Lab, a fairly simple IDE that handles both the Python and C++ sides. It works and for many projects it is fine, but connecting the Uno Q to a dock and using it with a display is. slow. The entire desktop experience is quite painful, which makes sense since Arduino recommends using the 4GB RAM variant for desktop use. As a result, I ended up doing most of the development and deployment over SSH. I simply use SCP to copy the project folder to the board, SSH in, and use arduino-app-cli to start and stop the app from the terminal. It’s faster, more predictable, and honestly, more convenient if you’re used to working in a terminal anyway.

The project structure itself follows the same pattern as the Arduino example applications. If you look at the official examples on GitHub, such as the Blink demo in the Arduino app-bricks-examples repository, you’ll see the same layout: an app.yaml manifest, a python/ folder with main.py for the Linux side, and a sketch/ folder with a .ino file for STM32. ClipDrop follows that structure exactly, only with a Flask server and a web UI bolted on top. Having that template to work with made the initial setup much easier, because wiring the bridge between Python and sketch is a pretty abstract concept.

C shown on the Arduino Uno Q LED matrix

ClipDrop is a Flask server that serves a single page web application. You open it in a browser on any device connected to your network and you get a text box and a file drop zone. Paste a text, press “Push” and it will be stored on the Uno Q. Pick up your phone, open the same page and the text will be there. You can also drag and drop files up to 50MB, download them from another device, and delete them when you’re done. It’s not doing anything particularly smart on the software side, and that’s the point. The Flask server handles the API, a single HTML file handles the UI, and Bridge plugs it all into the STM32 for some physical feedback.

That physical feedback is my favorite part of it all. Every time you push text to the clipboard, the LED array flashes a “C” for three seconds. Upload a file and an “F” flashes instead. Turn what would otherwise be a completely invisible network service into something you can actually see labor. The STM32 sketch defines those letterforms as bit arrays and uses Bridge to listen to calls from the Python side. When the Flask server receives new data, it calls a function to display the clipboard or image of the file. It’s simple, but it’s great to see it on my desktop when I use it.

Replaced a workflow you didn’t know you hated

And it’s not trying to be something it’s not

Connecting to ClipDrop on an Android Phone

I didn’t create ClipDrop expecting it to become part of my daily routine, but here we are. I’ll copy a URL to my laptop, send it to ClipDrop, and download it to my phone when I get out. I’ll find interesting information on my phone while reading something online, send it to ClipDrop, and upload it to my desktop when I sit down again. File transfer is also useful, especially for moving screenshots or small documents between computers without having to search for a cable or open another app. PairDrop works somewhat for this, but this tool removes any remaining barriers.

Of course, in a production In context, this is not necessarily the most useful app. There is no authentication, so anyone on your network can read and write it. The text clipboard lives in memory and is reset when the application is restarted, so it is not persistent storage. Additionally, there is no encryption, version control, or conflict resolution. If two people text at the same time, the last one wins.

For my use case, none of that matters. This runs on my home network behind my router’s firewall. I’m the only one using it and I don’t need clipboard history or encrypted channels for the type of things I’m copying; links, text fragments, the occasional configuration file and the like. If you wanted to make it more secure, you could add basic authentication to Flask routes or put it behind a reverse proxy, but that seemed like over-engineering for a clipboard on a microcontroller.

The 50MB file size limit exists as a safety net for the Uno Q’s limited storage, but in practice, I’ve never come close to hitting it. Most of what I transfer is text or small files. If you need to move large files between machines, there are better tools for this. ClipDrop is for small, everyday transfers that you would otherwise solve by sending yourself an email or putting a link in a chat app so you can tap it on another device. This is also what makes it more powerful than a ESP32 used for the same purpose – for most ESP32 devices, you cannot store a 50MB file.

I started ClipDrop as a silly project to take advantage of the Arduino Uno Q, but I’ve actually left it running for the past week and have been using it more than I thought I would. Is it a niche use case? Of course, but I’m getting surprising value. If you want to try it, I have published it. on GitHub.



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *