Group assignment
Compare as many tool options as possible
Individual assignment
Write an application that interfaces a user with an input and/or output device that you made.
What I knew beforehand
The interface is the product from the user's perspective. A poor user experience — even with brilliant underlying technology — can doom a product to failure. I have seen this repeatedly in the entrepreneurship world: technically excellent solutions that no one adopts because the interaction layer is confusing, slow, or unintuitive.
Adding a software layer and a graphical interface significantly increases the perceived value and utility of a physical device, because it gives non-technical users a way to interact with the system without needing to understand what is happening at the hardware level.
This documentation was produced in June 2026 and represents entirely new work. I came to this week with a firm conviction from my work that a technically brilliant device that is confusing to operate will not be adopted. This week I built three distinct interfaces for the same underlying hardware — a hand-gesture web app via MediaPipe, a Web Serial extension connecting that app to the XIAO RP2040, and a Python GUI with explicit buttons — and comparing them made concrete something I had only understood conceptually: different interaction paradigms serve different users. The gesture interface is novel and impressive; the button interface is immediately usable by anyone. For my target audience of entrepreneurs, simplicity always wins.
guizero and pyserial that controls the same LED via two on-screen buttons.
The Lovable prompt requesting a hand-tracking page with per-finger details.
The generated interface — live mirrored webcam with a skeleton overlay on the hand and a panel showing each finger's state.
Lovable built a hand-tracking page using MediaPipe Hands loaded via CDN. The output includes:
0\n over serial, turning the LED off. When the right hand is closed (fist), it sends 1\n, turning the LED on.
The follow-up prompt asking Lovable to add Web Serial communication at 115200 baud, controlling the LED on pin D8.
Updated interface — a "Connect Serial" button opens the port; the right panel shows the connection status, LED state, and the Arduino sketch required on the board.
The updated interface adds a Connect Serial button. Once the user selects the correct port, the interface:
1\n when the hand is closed (fist detected) — LED turns on.0\n when the hand is open — LED turns off.The board listens on the serial port at 115200 baud and toggles the LED on pin D8 based on the received character:
Arduino IDE 2.3.6 with the sketch loaded and the Seeed XIAO RP2040 selected as the target board.
I tested the complete system at the ESAN Fab Lab with the XIAO RP2040 connected via USB. The photo below shows the setup: the board is connected to the laptop, and the interface is visible in the browser reacting to hand gestures in real time.
ESAN Fab Lab setup — XIAO RP2040 connected via USB, hand gesture interface running in the browser. A closed fist (left) turns the LED on; an open hand (right) turns it off.
The following video shows the hand gesture interface controlling the LED on the XIAO RP2040 board in real time over Web Serial:
Version 2 — Hand gesture controls the LED on the XIAO RP2040 via Web Serial. Open hand → LED off. Closed fist → LED on.
guizero — for the graphical interface (buttons and text labels).pyserial — for serial communication with the XIAO RP2040 at 9600 baud.The interface opens a light-blue window with a title, a green "Encender LED" (Turn on LED) button, a red "Apagar LED" (Turn off LED) button, and a status label that updates when each button is pressed. Pressing a button sends a single byte (b'1' or b'0') over the serial port to the XIAO RP2040.
The Python application running in Thonny — the "LED Control by Serial" window with the green and red buttons, and the LED state label showing "LED Off".
The following video shows the Python GUI controlling the LED on the XIAO RP2040 via serial communication:
Version 3 — Python GUI with buttons controlling the LED on the XIAO RP2040 over serial at 9600 baud.
| Feature | Version 1 — Hand Tracking (Group) | Version 2 — Web Serial (Individual) | Version 3 — Python GUI (Individual) |
|---|---|---|---|
| Technology | MediaPipe Hands / Lovable | MediaPipe + Web Serial API | Python / guizero / pyserial |
| Input | Webcam — hand gestures | Webcam — hand gestures | Mouse — button click |
| Controls board | No | Yes — XIAO RP2040 via Web Serial | Yes — XIAO RP2040 via pyserial |
| Baud rate | — | 115200 | 9600 |
| Platform | Browser | Browser (Chrome / Edge) | Desktop (Thonny / Python) |
| Requires webcam | Yes | Yes | No |
Licensed under CC BY-NC-SA 4.0 — © Marita Chang