A small desk terminal for talking to an LLM agent. Press the knob, ask a question out loud, and the answer streams onto a 128×64 LCD. Left alone it shows a clock and a couple of Home Assistant readings.
It is a Raspberry Pi Zero W, a BigTreeTech Mini12864 display board (which usefully carries an LCD, a rotary encoder with a push switch, three addressable LEDs and a piezo on one PCB), and an I2S microphone, in a 3D-printed 45° wedge about the size of a paperback — 143 × 82 × 65 mm.
The Pi does no speech recognition or inference itself — it records to RAM, posts the audio to a host running Hermes Agent for transcription, then streams the reply back token by token. Any OpenAI-compatible chat endpoint plus any Whisper-style transcription endpoint will do; see SOFTWARE.md.
| HARDWARE.md | Wiring, printing the case, assembly |
| SOFTWARE.md | Install, configuration, architecture, driver notes |
| Qty | Item | Notes |
|---|---|---|
| 1 | Raspberry Pi Zero W or Zero 2 W | Zero 2 W has more headroom; the Zero W is sufficient |
| 1 | BigTreeTech Mini12864 V2.0 | 128×64 ST7567 LCD, EC11 encoder, 3 × WS2812, piezo |
| 1 | INMP441 I2S microphone breakout | 14 mm round module |
| 1 | microSD card, 8 GB or larger | |
| 1 | 5 V / 2 A micro-USB power supply | |
| ~19 | Female–female dupont jumper leads | 100 mm; 14 to the display, 5 to the mic |
| 1 | Knob for a 6 mm D-shaft | the knob BTT ships with the display fits |
You also need a host on the LAN running Hermes Agent (or equivalent). Home Assistant is optional — without it the home screen just shows the clock.
| Qty | Item | Notes |
|---|---|---|
| ~150 g | PLA or PETG filament | four parts, ~140 cm³ total |
| 4 | M3 × 8 socket head | display board → face plate |
| 4 | M3 × 12 socket head | face plate → body |
| 4 | M3 × 10 socket head | base plate → body |
| 2 | M2.5 × 6 | Pi Zero → base posts |
All M3s are self-tapping into printed Ø2.6 pilots — no inserts or nuts. The Pi is the exception: its mounting holes are Ø2.75 and will not pass an M3.
2.5 mm and 2.0 mm hex keys, a soldering iron for the microphone's pads, and a 3D printer with a bed of at least 145 × 85 mm.
- Print the case. STLs are in
Hardware/case/stl/, already oriented. See HARDWARE.md for orientation and settings. - Wire it up. 14 leads to the display, 5 to the microphone. Full table in HARDWARE.md.
- Install the software. Flash Raspberry Pi OS Lite, enable SPI and I2S,
copy
pi/to the Pi, fill inconfig.toml, enable the service. See SOFTWARE.md.
chatbox/
├── README.md this file
├── HARDWARE.md wiring, printing, assembly
├── SOFTWARE.md install, configuration, architecture
├── Hardware/
│ ├── case/
│ │ ├── chatbox_case.py parametric source for the printed parts
│ │ ├── chatbox_case.3mf all four parts, arranged as printed
│ │ └── stl/ individual parts, pre-oriented
│ ├── wiring-reference.html pinouts with the leads drawn on photos
│ └── *.step, *.png, *.jpg manufacturer models and datasheet images
└── pi/
├── hermes_display.py the application
├── mini12864.py display driver
├── config.example.toml copy to config.toml and fill in
├── hermes-display.service systemd unit
├── asound.conf ALSA gain for the microphone
├── backlight.py, beep.py LED and buzzer utilities
├── diagnostics/ bring-up and bench scripts
└── fonts/ Terminus bitmap font used for answer text
pi/config.toml holds an API key, a password and a Home Assistant token. It is
gitignored — keep it that way.
MIT. The BigTreeTech STEP model and datasheet images under
Hardware/ are the manufacturer's, included for reference.
