Adding physical buttons and a miniscreen to any n8n automation with Unihiker K10

Parts Required
This project is based on the Unihiker K10. If you are an old time user and a big fan of the classic Unihiker (M10) like me be aware that the M10 and K10 are different boards:
M10 ā Unix-based, programmed in Python.
K10 ā ESP32-based, programmed with Arduino IDE.
The K10 comes loaded with features: 240x320 screen, onboard buttons, RGB LED, microSD slot, camera, speaker, microphone, light sensor, temperature sensor, and accelerometer. It also has Gravity connectors for easily adding external buttons.
Ā

Ā
Reference: K10 Arduino IDE Code Documentation
Ā

Ā
n8n Setup
If you donāt have an account, you can create one at n8n.io and get $5 of credits for your first project. n8n is open source, so you can also host it yourself or use a hosting service with n8n template like RailwayĀ

Open my workflow template to get up and running quickly (soon to be approved)
Configure your Google Sheets and Google Gemini credentials (Google Sheets API is free; Gemini has a free tier).
Get the webhook URLāthis will go into the .ino code.
Ā

Ā
Software Preparation
As of writing, the K10 requires Arduino IDE v1.8.19 or earlier for programming. You can install multiple Arduino versions side by side.
Steps:
Download Arduino IDE 1.8.19
Go to Preferences ā Additional Board URLs and add:
bash CopyEdit https://downloadcd.dfrobot.com.cn/UNIHIKER/package_unihiker_index.json
Select K10 as the board and the correct port.
Download n8nTerminal.ino and the .wav sound file from GitHub.
Edit n8nTerminal.ino to include your Wi-Fi credentials and the webhook URL. Adjust JSON fields if neededāmy demo uses idShipping, name, address, and notes, but you can customize them.
Connect the board via USB Type-C and click Upload. (For some reason, my upload progress sometimes repeats three timesābe prepared.)
Ā
3D Enclosure
Ā

I designed a 3D-printed enclosure for the K10 and its buttons. It leaves the lights visible, the speaker unobstructed, and includes:
A back hole for wall mounting.
Cutouts for front sensors.
You can get the enclosure on Cults. You will also need 1x m3 screw and 4x 3mm screwsĀ
Ā
Demo
Ā

Ā
I created a simple demo for a fictional e-commerce company. At the delivery warehouse, an employee presses a button on the n8n Terminal to fetch the next package to deliver. The Terminal triggers an n8n workflow, which calls an AI agent powered by Gemini Flash 2.5 ā although ChatGPT-5 or any other LLM could be used ā to retrieve pending shipments from a Google Sheet. The agent checks the current date and time, then follows system rules to determine the next delivery.
Ā
In essence, it selects any row where the "Sent" cell is false, prioritizing the oldest shipping date. However, it also takes into account the "Notes" column, so if a customer is marked as anxious, their order may be prioritized even if placed later. The resulting data is sent to the n8n Terminalās screen, and the employee can press a second button to generate a QR code with the same information. Finally, the "Sent" cell in the sheet is updated.
Communication between n8n and n8n terminal is done by json. Example
Ā
[{"output":{"idShipping":"1","name":"Juan Perez","address":"San Juan 8888","notes":"Solo queria decir que entreguen por la tarde"}}]
Ā
Ā
Source code and files
Ā
Github https://github.com/ronibandini/n8nTerminal
Cults https://cults3d.com/en/3d-model/gadget/n8n-terminal-esp32-based-screen-and-button
n8n Template https://creators.n8n.io/workflows/7296
