Muse Gadget on Windows: Status Report

Written 2026-10-03. Subject: can the Waveshare ESP32-S3-Touch-AMOLED-1.75C become a Muse gadget with this Windows 11 laptop? Read this first when you buy the board.

1. Final status

The firmware builds on this Windows laptop. Nothing has run on the board, because you do not own the board yet.

My estimate: the chance of success is good. The compile step is the part I could test, and it passed. I do not give a percentage, because the steps that remain are untested.

2. What the SDK is

The folder muse-gadget-sdk-main is the open-source Muse Gadget SDK from Meta Platforms (Apache 2.0). It has three parts:

Every gadget needs an SDK token (mgst_…) from gadgets.muse.ai. Read the Gadget SDK Terms first. Pairing uses the Muse app (iOS or Android) with Settings > Devices > Developer mode turned on.

The README says the build computer should run macOS or Linux. It does not list Windows. This report tests that gap.

3. Tests I ran

#TestResult
1Checked the laptop for tools. Found Git, Python 3.13.5, CMake and Ninja. Windows long paths are on (LongPathsEnabled = 1). C: had 237.6 GB free.Pass
2Cloned ESP-IDF v6.0.1 with all submodules into C:\esp\esp-idf-v6.0.1. Confirmed the tag is v6.0.1 and no submodule was missing.Pass
3Ran install.ps1 esp32s3, first attempt.Failed: ERROR: MSys/Mingw is not supported
4Removed the Git Bash variables (MSYSTEM=MINGW64 and six more) from the process. Ran install.ps1 esp32s3 again. It installed 11 tools and a Python environment, idf6.0_py3.13_env. Exit code 0.Pass
5Ran export.ps1. idf.py --version printed ESP-IDF v6.0.1. PowerShell 5.1 showed a red NativeCommandError text during activation. That text is progress output and not a failure.Pass
6Built from esp32/ with the raw idf.py command (section 8). 2,203 build steps. Signed the image with the committed dev key. The check_sizes line reported 0x1ef000 bytes (48%) free.Pass
7Read tools/muse/ports.py. It finds the board through pyserial list_ports, so it should work with Windows COM ports. I did not run it.Read only
8Fetched the Waveshare product page and compared it to your screenshot (section 6).Match
9Ran the host tests in PowerShell with ESP-IDF active: python -m unittest discover -s tests -p "test_*.py" from esp32/. 32 test files, 120 tests, 2.1 seconds.FAILED (failures=1, errors=17, skipped=23)
10Ran the same command again with PYTHONUTF8=1 to isolate the text-encoding error.Same counts. The encoding error is gone (section 3a)

3a. Host test result (run 2026-10-03)

Result: inconclusive. The laptop cannot run most of these tests, because it has no host C or C++ compiler.

These tests compile the SDK's C and C++ code against fake parts and run it on the computer. They do not use the board, and they are not the firmware build. The firmware build in test 6 used the Xtensa compiler from ESP-IDF, which cannot run on the laptop.

CountWhat happenedCause
16 errorsFileNotFoundError: [WinError 2] raised from Python's subprocess. Examples: the setUpClass of test_box3_microphone, test_link_discovery, test_link_epaper_status, test_link_sensecap_sensors and test_cardputer_navigation, and 9 tests in the control and tunnel backpressure group.The test tried to start a program that does not exist. cc, c++, gcc, g++, clang and cl are all absent from the PATH, and CC and CXX are unset. This is my inference from those facts and from the error. I did not read each failing line.
1 failuretest_link_pairing_handshake: AssertionError: Host C compiler and CMake are required.The test says directly that no host C compiler was found.
1 errortest_muse_chat_link_errors at line 290: UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f600'.A Windows-specific fault in the test code. write_text() uses the Windows default encoding (cp1252) and cannot write an emoji. I found 32 write_text( calls under tests/ with no encoding= argument. I did not inspect them one by one.
23 skippedSeveral test files skip themselves with C compiler not available or C++ compiler not available. One skips with cryptography required for real ECDH/ECDSA/AES-GCM vectors.Mostly the missing compiler. I did not check the reason for each of the 23 skips.

Full logs were in the temporary scratchpad folder (hosttests.log and hosttests_utf8.log) and may be gone.

4. Findings

  1. ESP-IDF refuses to run when Git Bash variables are set. My session shell carried MSYSTEM=MINGW64, MSYSTEM_CARCH, MSYSTEM_CHOST, MSYSTEM_PREFIX, MINGW_CHOST, MINGW_PACKAGE_PREFIX and MINGW_PREFIX. idf_tools.py stops when MSYSTEM exists. A normal PowerShell window probably has none of them. export.sh runs the same check. So tools/muse/board.sh probably fails in Git Bash. I did not run board.sh, so this part is not confirmed.
  2. Use PowerShell and the raw idf.py command. It built the profile with no workaround. The repository documents this command in esp32/AGENTS.md.
  3. Windows path length caused no problem. Long paths were already on. I built in the existing folder, whose path is about 70 characters long. I did not test with long paths off.
  4. The build warned about the token. The warning was No SDK token: set CONFIG_GADGET_SDK_TOKEN. The generated config has CONFIG_GADGET_SDK_TOKEN="". This is expected, and AGENTS.md allows it.
  5. The generated config matches the board. It has CONFIG_IDF_TARGET="esp32s3", CONFIG_MUSE_BOARD_ID="waveshare_s3_175c", CONFIG_ESPTOOLPY_FLASHSIZE="32MB" and CONFIG_HOMEHUB_OTA_ENABLED=y. I did not run the SDK's full overlay-check script.
  6. Security notes from the SDK documents. The SDK token ships inside the firmware. Treat it as an identifier, not a password. Pairing has no manufacturer verification and cannot stop an active man-in-the-middle attack, so pair on a network you trust. NVS encryption is off unless you set CONFIG_HOMEHUB_NVS_ENCRYPTION; the repository strongly recommends it. Do not enable Secure Boot or flash encryption on a board you want to reflash.

5. Checked and not checked

CheckedNot checked
  • ESP-IDF v6.0.1 installs and activates on Windows 11 in PowerShell.
  • The 1.75C profile compiles and links. The signed image fits the partition.
  • The generated config has the right chip, flash size and board ID.
  • The product in your screenshot is the 1.75C (title and ID 33691). The page lists 32 MB flash and 8 MB PSRAM, which match the overlay.
  • The Linux SDK does not run natively on Windows (I read its BlueZ and D-Bus design).
  • The host tests were run. They fail or skip on this laptop for lack of a host compiler, and they show one Windows encoding fault (section 3a).
  • Flashing over a COM port, and what port name Windows assigns.
  • The USB driver for this board on your laptop.
  • Boot, screen, touch, microphone and speaker.
  • Pairing with the Muse app, and whether your phone and app version support community pairing v5.
  • Wi-Fi connection and the Muse connection.
  • The SDK's C and C++ logic. The host tests could not compile it, because the laptop has no host compiler (section 3a).
  • tools/muse/board.sh and tools/muse/ports.py on Windows.
  • Whether idf.py monitor works in your terminal. It needs an interactive terminal.
  • Whether Windows long-path support is required. I tested only with it on.
  • The battery option. I did not confirm its capacity or shipping rules.
  • That the USB port on the board is the native Espressif port. This comes from the SDK's ports.py, not from the Waveshare page.

6. Buying checklist (verified 2026-10-03)

CheckResult
The product is the 1.75CYes. I fetched waveshare.com/esp32-s3-touch-amoled-1.75c.htm, the link in the SDK's devices/README.md. Its title matches your screenshot. Its model name is ESP32-S3-Touch-AMOLED-1.75C. Its product ID is 33691, and your screenshot's breadcrumb shows 33691.
Not the plain 1.75The plain 1.75 needs a different profile (s3n, overlay sdkconfig.muse-waveshare-s3-175). Your screenshot shows neither the web address nor the words "1.75C". I matched it by title and ID. If you buy from another page or a reseller, check for ID 33691 or the model name.
Price and battery$39.99 without a battery. $41.99 with a 3.7V MX1.25 lithium battery. In the screenshot, neither the Included nor the NOT Included button is selected. The SDK works on USB power without a battery.
Data-capable USB-C cableThe package list has the board, a silver lanyard and the optional battery. It lists no cable. Buy a USB-C cable that carries data, not only power.
Flash and PSRAM32 MB flash, 8 MB PSRAM. This matches the overlay.

Limit: a tool that summarizes web pages fetched the page. I did not read the page text myself.

7. Connecting other devices as sensors (not tested)

A closed commercial device cannot become a Muse gadget. A gadget must run the SDK code (ESP32 firmware or the Linux package). Such a device can only be a sensor behind a gadget.

8. When the board arrives: steps to resume

Use a new PowerShell window. Do not use Git Bash.

  1. Get the token. Create an SDK token at gadgets.muse.ai. Read the Gadget SDK Terms. Do not paste the token in a public place.
  2. Activate ESP-IDF and go to the project.
    . C:\esp\esp-idf-v6.0.1\export.ps1
    cd <folder that holds muse-gadget-sdk-main>\muse-gadget-sdk-main\esp32
  3. Set the token. The build folder already has a generated sdkconfig, so edit that file or use menuconfig. The menu path in the README is ESP32 Device SDK > Muse Gadgets SDK token.
    idf.py -B build-muse-waveshare-s3-175c menuconfig
    The generated sdkconfig now has CONFIG_GADGET_SDK_TOKEN="". Never commit the token or print it in full.
  4. Rebuild.
    idf.py -B build-muse-waveshare-s3-175c -DIDF_TARGET=esp32s3 "-DSDKCONFIG=build-muse-waveshare-s3-175c/sdkconfig" "-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;devices/sdkconfig.muse;devices/sdkconfig.muse-waveshare-s3-175c" build
  5. Plug in the board. Use the data cable. Find the COM port in Device Manager (Ports), or run python tools\muse\ports.py --list. The second command is untested on Windows.
  6. Flash. Replace COM5 with your port. Add the same -D arguments as in step 4.
    idf.py -B build-muse-waveshare-s3-175c -DIDF_TARGET=esp32s3 "-DSDKCONFIG=build-muse-waveshare-s3-175c/sdkconfig" "-DSDKCONFIG_DEFAULTS=sdkconfig.defaults;devices/sdkconfig.muse;devices/sdkconfig.muse-waveshare-s3-175c" -p COM5 flash
    Reflashing keeps pairing and Wi-Fi settings. erase-flash removes them.
  7. Read the boot log. A healthy boot logs link.main: Muse Gadget starting and muse: board: …. It must show no panic and no reboot loop. tools/muse/monitor.py PORT 30 captures the boot and needs pyserial. Plain idf.py monitor needs an interactive terminal.
  8. Pair. In the Muse app, turn on Settings > Devices > Developer mode. Add a device. It shows as MuseGadget-XXXXXX. Press the board's talk button when the app asks. AGENTS.md names this button "top" on the 1.75C. Hold the button for 5 seconds to reset the setup.

Status colors and screen

The full-UI boards show state on the avatar. A dev board's LED colors are: orange breathing means ready for setup, blue breathing means press the button to confirm, blue means joining Wi-Fi and connecting, green means connected, yellow blinking means reconnecting, purple means not paired, red blinking means error. Until the board is paired, its screen shows its name dimmed under the state.

9. If the gadget fails: possible causes

These are causes from the SDK documents and from general ESP32 and Windows practice. I did not see any of them happen on this project, except cause 1 of section A.

A. Build or toolchain (seen once)

B. The laptop cannot flash the board

C. The board does not boot

D. Pairing fails

E. Connected, but features do not work

F. Outside your control

10. Files and changes on this laptop

PathWhat it is
C:\esp\esp-idf-v6.0.1ESP-IDF v6.0.1 (shallow clone with submodules).
%USERPROFILE%\.espressifThe 11 ESP-IDF tools, downloaded archives, and the Python environment idf6.0_py3.13_env.
…\muse-gadget-sdk-main\esp32\build-muse-waveshare-s3-175c\Build output, including muse-gadget.bin (built 2026-10-03 19:52) and the generated sdkconfig.
…\esp32\managed_components\ and …\esp32\dependencies.lockDownloaded components. They exist now. board.sh would delete them after a build. I did not.
muse-gadget-waveshare-status-report.htmlThis report.

I changed no source file in the SDK. The build log was in a temporary folder and may be gone.

11. Open questions for you

  1. Do you use an iPhone or an Android phone? The Muse app must run on it and must support community devices.
  2. Do you have a Muse account and an SDK token? Have you read the Gadget SDK Terms?
  3. Do you want the battery ($41.99) or USB power only ($39.99)?
  4. Do you want me to install a host C and C++ compiler (for example MSYS2 MinGW-w64) and re-run the host tests with PYTHONUTF8=1? It changes your laptop. It needs no board.