# AI use cases for Esp32 Thinks (raullenchai/esp32-thinks)

Repo: [raullenchai/esp32-thinks](https://github.com/raullenchai/esp32-thinks) | Use cases: 4 | Page: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/

esp32-thinks is a personal AI voice assistant firmware for the ESP32-S3 that uses any OpenAI-compatible speech, chat and TTS servers, built on Meta's muse-gadget-sdk.

This file holds every use case of this repo. Each one starts with a "## " heading and ends with its URL.

- Flash a wake-word voice assistant onto an ESP32: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/build-wake-word-voice-assistant-quicksilver/
- Route speech, chat and TTS to different AI servers: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/mix-speech-chat-tts-providers-per-task/
- Give the voice assistant memory, weather and clock: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/add-memory-weather-to-voice-assistant/
- Test chat and speech on the device without a mic: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/test-chat-and-tts-over-serial-console/

## How to flash a wake-word voice assistant onto an ESP32 with Esp32 Thinks

Repo: [raullenchai/esp32-thinks](https://github.com/raullenchai/esp32-thinks) | Difficulty: Intermediate | Time: 2 hours | Basis: From the README

Flash the QuickSilver preset so the gadget answers out loud after you say Hi, ESP.

**Who it is for:** A maker with a supported ESP32-S3 gadget who wants a working voice assistant without writing firmware from scratch.

**The problem:** Turning an ESP32 board into a voice assistant normally means wiring up speech, chat and speech synthesis by hand, which takes days of firmware work.

**The outcome:** The device wakes on Hi, ESP or a knob press, sends your question to the configured models, and speaks the streamed reply.

### Steps

1. Clone the SDK and pin it: `git clone https://github.com/facebookincubator/muse-gadget-sdk.git` then `git -C muse-gadget-sdk checkout 812c46f`
2. Clone this repo and enter it: `git clone https://github.com/raullenchai/esp32-thinks.git` then `cd esp32-thinks`
3. Back up the factory NVS once: `./scripts/backup-nvs.sh ../muse-gadget-sdk /dev/ttyACM1`
4. Apply the patch and pick a preset: `./apply.sh ../muse-gadget-sdk --preset quicksilver`
5. Build and flash, allowing several minutes: `./build-and-flash.sh ../muse-gadget-sdk /dev/ttyACM1`

### Prompt to paste into your agent

```text
In the esp32-thinks repo, run the quicksilver preset setup against the SDK at <sdk-path> on serial port <port>, then report whether the build and flash finished without errors. Verify that the device answers after you say Hi, ESP or press the knob.
```

### Caveat

The README warns that the build and flash steps are paced for CH342 boards and should not be interrupted, and the port name (ACM0 or ACM1) may change on replug.

Risk, credentials: The apply step asks for API keys and Wi-Fi details that are written into the device config, so keep the generated config private.

Disclaimer: Third-party repos we don't own or vouch for. AI-generated use cases can be wrong: review everything and run at your own risk. Full text: https://dedupedai.com/disclaimer/

URL: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/build-wake-word-voice-assistant-quicksilver/

## How to route speech, chat and TTS to different AI servers with Esp32 Thinks

Repo: [raullenchai/esp32-thinks](https://github.com/raullenchai/esp32-thinks) | Difficulty: Advanced | Time: 3 hours | Basis: From the README

Point each of the three endpoints at a different OpenAI-compatible server using the custom preset.

**Who it is for:** A developer who wants cheaper transcription, a stronger chat model, or a local server for one task and not the others.

**The problem:** Most voice products tie all three tasks to one vendor, so you cannot pick the best or cheapest option for each step.

**The outcome:** Your gadget uses one provider for transcription, another for chat and a third for speech, all set in one config file and a rebuild.

### Steps

1. Clone the SDK at the pinned commit: `git clone https://github.com/facebookincubator/muse-gadget-sdk.git` then `git -C muse-gadget-sdk checkout 812c46f`
2. Clone and enter this repo: `git clone https://github.com/raullenchai/esp32-thinks.git` then `cd esp32-thinks`
3. Apply the patch with the custom preset: `./apply.sh ../muse-gadget-sdk --preset custom` (inferred, check the README)
4. Enter a separate base URL and key for the speech, chat and TTS endpoints when apply asks for them
5. Build and flash: `./build-and-flash.sh ../muse-gadget-sdk /dev/ttyACM1`

### Prompt to paste into your agent

```text
In the esp32-thinks repo, apply the custom preset with separate STT, chat and TTS endpoints for <provider-list>, then confirm the generated provider config lists three different base URLs. Verify by running a typed probe with python3 scripts/tts_probe.py /dev/ttyACM1 "hello?" and checking that a reply is produced.
```

### Caveat

The README says each endpoint pins its own root CA and session tickets never cross origins, so mixed providers do not share a TLS session and first replies can be slower.

Risk, credentials: Each endpoint needs its own API key, and every key is stored in the generated device config.

Disclaimer: Third-party repos we don't own or vouch for. AI-generated use cases can be wrong: review everything and run at your own risk. Full text: https://dedupedai.com/disclaimer/

URL: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/mix-speech-chat-tts-providers-per-task/

## How to give the voice assistant memory, weather and clock with Esp32 Thinks

Repo: [raullenchai/esp32-thinks](https://github.com/raullenchai/esp32-thinks) | Difficulty: Advanced | Time: 3 hours | Basis: From the README

Run the in-repo openmuse agent so answers know your location, time, weather and past notes.

**Who it is for:** A user who wants the gadget to know their city, answer weather questions and remember things across turns, while keeping that data on their own machine.

**The problem:** A plain model answers without knowing where you are, what time it is, or what you asked earlier, and cloud agents keep that context on someone else's servers.

**The outcome:** The gadget answers with local weather, the current time and remembered facts, with memory stored in a file on your own machine.

### Steps

1. Write the agent config on first run: `./openmuse/run.sh`
2. Set the upstream LLM key and the agent token: `$EDITOR openmuse/.env`
3. Start the agent and expose it over HTTPS with Tailscale: `./openmuse/run.sh --funnel`
4. Apply the openmuse preset with the device config: `./apply.sh ../muse-gadget-sdk --preset openmuse`
5. Build and flash: `./build-and-flash.sh ../muse-gadget-sdk /dev/ttyACM1`

### Prompt to paste into your agent

```text
In the esp32-thinks repo, start the openmuse agent with ./openmuse/run.sh --funnel after setting UPSTREAM_API_KEY and OPENMUSE_TOKEN in openmuse/.env, then report the public HTTPS URL. Verify the agent responds to a chat request and that memory is written to openmuse/data/memories.json.
```

### Caveat

The README says the openmuse agent adds one network hop and tool work, so typed turns measured about 3.9 seconds and voice turns about 4.7 seconds, and the first turn after boot may be slower.

Risk, credentials: The openmuse .env file holds the upstream LLM key and the agent token, so keep that file out of shared repos.

Risk, remote script: The --funnel option exposes the agent over HTTPS through Tailscale, so only run it on a machine you control.

Disclaimer: Third-party repos we don't own or vouch for. AI-generated use cases can be wrong: review everything and run at your own risk. Full text: https://dedupedai.com/disclaimer/

URL: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/add-memory-weather-to-voice-assistant/

## How to test chat and speech on the device without a mic with Esp32 Thinks

Repo: [raullenchai/esp32-thinks](https://github.com/raullenchai/esp32-thinks) | Difficulty: Intermediate | Time: 1 hour | Basis: From the README

Run typed turns over serial to check the chat and TTS pipeline before a voice test.

**Who it is for:** A developer bench-testing a flashed gadget who needs to confirm the models and speech output work before debugging the microphone.

**The problem:** Voice tests mix microphone, wake word and network problems, so it is hard to tell which part is failing.

**The outcome:** You get a typed question answered and spoken through the same chat and TTS pipeline the voice turns use, with a readable status dump if something hangs.

### Steps

1. Flash the firmware with a preset first, such as `./build-and-flash.sh ../muse-gadget-sdk /dev/ttyACM1`
2. Run a typed probe with a question: `python3 scripts/tts_probe.py /dev/ttyACM1 "What can you do?"` (inferred, check the README)
3. Send a typed turn from any serial terminal: `>chat=hello?`
4. Check device health if a turn stalls: `>status`
5. Dump every task backtrace if the device looks wedged: `>tasks`

### Prompt to paste into your agent

```text
In the esp32-thinks repo, run python3 scripts/tts_probe.py <port> "hello?" against the flashed device and report the chat reply text and whether speech was produced. Verify that the probe finishes without a stall and that >status shows Wi-Fi and heap healthy.
```

### Caveat

The README says tts_probe.py opens a serial reader and resets the device, and typed turns skip microphone capture, so a passing probe does not prove the wake word works.

Disclaimer: Third-party repos we don't own or vouch for. AI-generated use cases can be wrong: review everything and run at your own risk. Full text: https://dedupedai.com/disclaimer/

URL: https://dedupedai.com/use-cases/raullenchai-esp32-thinks/test-chat-and-tts-over-serial-console/
