Skip to main content

Flash the firmware

Each EchoKit comes pre-flashed with our open-source ESP32 firmware. If your device isn't working as expected, you can manually re-flash it by following these steps.

This guide shows the EchoKit DIY device as examples. The EchoKit CUBE device is very similiar. Just choose the appropriate "ESP Develop Kits" on the Launchpad UI or download the correct firmware binary file as indicated below.

1. Connect your EchoKit device to your computer

You need to use an USB cable to connect between your computer and the USB-C port on EchoKit labeled TTL. Your computer will probably prompt you to accept or trust the connected USB device. You MUST accept the USB connection.

Trust the USB connection

On many devices, there are two USB ports, but only the SLAVE port can take commands from another computer. You must connect to that SLAVE USB port.

2. Use the ESP32 launchpad to flash

Load the launchpad and select the "ESP Develop Kits" for the device you have - EchoKit-DIY or EchoKit-CUBE.

ESP32 launchpad

Click on Connect at the top menu to connect to your device via the USB cable.

TROUBLESHOOTING: If it fails, you may force the EchoKit device to enter the "flashing" mode. Press and hold down the RST button, and at the same time, press and release the K0 button. The screen could go dark, and the device will be ready to flash.

Click on the Flash button at the bottom of the page to start flashing firmware onto the device. You will see a console showing the flashing progress.

Once it is done. Click on the Reset Device button as instructed.

ESP32 launchpad

After completing this process, your EchoKit should display a QR code and instructions on its screen.

EchoKit is ready

Next, go to the Quick start guide to configure your EchoKit device for network access.

3. Use a command line tool to flash

Alternatively, you could use the espflash command to flash the firmware. It is often faster and easier if you are a software developer!

3.1 Install the Rust Toolchain

First, make sure you have the Rust toolchain installed. If not, follow the official Rust installation guide.

3.2 Install espflash and Dependencies

Run the following command to install espflash and related tools:

cargo install cargo-espflash espflash ldproxy

3.3 Download the Precompiled Firmware

Fetch the latest precompiled EchoKit firmware:

# For EchoKit DIY
curl -L -o echokit https://echokit.dev/firmware/echokit

# OR

# For EchoKit Cube
curl -L -o echokit https://echokit.dev/firmware/echokit_cube

3.4 Flash the Firmware to EchoKit

Use the command below to flash your device:

espflash flash --monitor --flash-size 16mb echokit

You should see output similar to this:

[2025-04-28T16:51:43Z INFO ] Detected 2 serial ports
[2025-04-28T16:51:43Z INFO ] Ports which match a known common dev board are highlighted
[2025-04-28T16:51:43Z INFO ] Please select a port
✔ Remember this serial port for future use? · no
[2025-04-28T16:52:00Z INFO ] Serial port: '/dev/cu.usbmodem2101'
[2025-04-28T16:52:00Z INFO ] Connecting...
[2025-04-28T16:52:00Z INFO ] Using flash stub
Chip type: esp32s3 (revision v0.2)
Crystal frequency: 40 MHz
Flash size: 8MB
Features: WiFi, BLE
... ...
I (705) boot: Loaded app from partition at offset 0x10000
I (705) boot: Disabling RNG early entropy source...
I (716) cpu_start: Multicore app

Once flashing succeeds, you should see output similar to this:

I (4990) esp32_nimble::ble_device: Device Address: 98:A3:16:E5:D8:4A
I (4993) NimBLE: GAP procedure initiated: advertise;
I (4996) NimBLE: disc_mode=2
I (4998) NimBLE: adv_channel_map=0 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=0 adv_itvl_max=0
I (5007) NimBLE:

I (5010) echokit: Free SPIRAM heap size: 5248788
I (5014) echokit: Free INTERNAL heap size: 81847
I (5147) esp_idf_hal::interrupt::asynch: IsrReactor "IsrReactor" started.

And the display will light and show the QR code.

Next steps

After flashing, you’ll need to:

  1. Set up and run an EchoKit server
  2. Configure your device to connect to the server

Once both steps are complete, your EchoKit will be ready for use.