About this project
JarvisNano is firmware that turns the Waveshare ESP32-S3-Touch-AMOLED-1.75C into a small, always-available desk assistant. In standalone mode the ESP32-S3 streams microphones to Gemini Live, plays replies through the ES8311 speaker path at native 24 kHz, and drives a 466x466 round AMOLED with a single compositor; no phone or hub is required. An explicitly paired ZeroChat phone can instead claim a displayed six-digit pairing code, hold a private Wi-Fi operator lease, receive 16 kHz microphone PCM, run its own brain, and return 24 kHz speech PCM to the device speaker. The 1.75C is the product and only supported build target; the original Waveshare 1.75 and Seeed XIAO tracks are kept as hardware references.
Interaction is voice-first: say "Jarvis" or press PWR, then talk, and a reply can be interrupted by talking over it. A centre swipe walks a ring of screens (JARVIS, WATCH, WEATHER, STATUS, ACTIVITY, plus DESK while a companion is live), each showing a live reading rather than a settings page. Tapping an open sheet makes Jarvis speak what the screen shows. STATUS reports battery, charger, Wi-Fi bars with dBm, session and tool lamps, address, chip temperature, CPU gear, radio mode and uptime. Privacy is physical: holding the glass, turning the device face-down, or pressing the centre control mutes the mic, indicated by a gold ring and a closed gold slit. Left alone on battery the device rests, dims and deep-sleeps, waking on lift or touch.
Hardware includes an ESP32-S3R8 dual-core 240 MHz SoC, CO5300 QSPI AMOLED, CST9217 touch, ES7210 plus ES8311 audio, QMI8658 IMU with Wake-on-Motion, AXP2101 PMIC, 8 MB octal PSRAM and 32 MB flash with two 4 MB OTA slots. The C revision has no TCA9554, RTC or microSD slot; time is SNTP-backed.
Live capabilities include a direct Gemini Live duplex session with WakeNet wake word, server VAD and AEC; an adaptive jitter buffer behind the speaker; three session watchdogs (keepalive, no-reply, unanswered-utterance); voice tools for web search and news, weather, Wikipedia, prices, exchange rates, time zones, translation, research papers and device levels, behind a read-only allowlist enforced on the device; optional ZeroChat companion mode; a rest ladder ending in deep sleep; physical authority that synthetic input cannot override; and dual-slot OTA with preflight, probation and rollback. Host-tested rendering covers 556 checks on the ring, sheets and HUD.
The repository is organized around main/ as the composition root and HTTP route authority, with components/jr_core (pure session and rest-ladder state), jr_transport (Gemini framing and WebSocket), jr_audio, jr_display, jr_tools, jr_imu, jr_power and jr_net, plus a board definition, scripts for build/flash/OTA/QA, and extensive docs. Builds use Docker pinned to espressif/idf:v5.5.4 via scripts/build-v5.sh and scripts/flash-v5.sh; a running device is updated over Wi-Fi with scripts/jarvisctl.py ota rather than USB-JTAG.
Security notes are explicit: secrets live in device NVS or the host keychain, but NVS is unencrypted today, so physical flash access exposes Wi-Fi, Gemini and JarvisMCP credentials. Tools reach JarvisMCP over a legacy /act route with a bearer carrying full gateway authority, so the device enforces a read-only allowlist; a typed /device/v1/invoke route with server-side capability policy is intended but not provisioned. JR_DEV_OPEN_DIAGNOSTICS must be 0 before release, and signed images, authenticated encrypted upload and NVS/flash encryption remain release gates. The project is Apache-2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.