ESP-Scope is a web-based oscilloscope built using the ESP-IDF framework. It allows users to visualize analog signals in real-time through a web browser. The project leverages the ESP32's ADC capabilities and serves a web interface for signal visualization. It contains complete source code and 3D design for a case for the Seeed XIAO ESP32C6.
This project was written in part to test AI code generators and see if they're any good. Much of the code was written by Google Antigravity using Gemini 3, with refinements, hints and tips and overall design specified by a human. The whole app was up and running a few hours and finished, including 3D design in a weekend.
- Real-time signal visualization on a web browser.
- Adjustable sample rate (1-83333 Hz) and attenuation.
- Crosshair functionality for precise measurements.
- Adjustable trigger level.
- Test signal generation.
- Reset functionality to clear settings and reload the interface.
- Power off from the browser.
- ESP32 development board.
- ESP-IDF installed and configured.
- USB cable to connect the ESP32 to your computer.
- A web browser (e.g., Chrome, Firefox).
- Clone the repository:
git clone https://github.com/MatAtBread/esp-scope.git
- Navigate to the project directory:
cd esp-scope
If you have the esp-idf VSCode extension, just click on the flame to build, flash & monitor. Use the config settings for "espScope" to specify GPIO pins for the LED & "AP-Mode" button, and if necessary a board-specific setup file (one is provided for the Seeed Studio XIAO ESP32C6 to enable the internal ceramic antenna).
- Set up the ESP-IDF environment:
. $IDF_PATH/export.sh
- Configure the project:
idf.py menuconfig
- Build the project:
idf.py build
- Flash the firmware to the ESP32:
Replace
idf.py -p [PORT] flash
[PORT]with the serial port of your ESP32 (e.g.,/dev/ttyUSB0orCOM3). - Monitor the serial output:
idf.py monitor
If your DHCP server supports it (most seem to), the app sets its hostname and you can just navigate to http://esp-scope (you may have/need a default domain extension)
- After flashing, ESP-SCOPE will start as a WiFi access point. Connect to it to access the UI.
- If desired, click the "WiFi" button and set your SSID & WiFi password. The device will reboot and join your network. Pressing and holding the GPIO "AP-Mode" button will erase the WiFi credentials and return to Access Point mode.
- Open a web browser and navigate to "http://esp-scope" (you may have/need a default domain extension).
- Use the web interface to:
- Adjust settings like sample rate, attenuation & the test signal frequency.
- Visualize signals in real-time.
- Reset the interface using the "Reset" button.
- Re-configure the WiFi using the "WiFi" button.
- Power off the device
The LED indicates one of four conditions:
- Continuously lit: waiting to attach to a wifi network or starting the wireless AP
- Equal 1 second flash: in AP mode - connect to the "ESP-Scope" access point
- Slow, brief flashes: connected to the WiFi SSID set in the web UI
- Rapid, brief flashes: sending data to an active client
The displayed signal is sampled from ADC0. The test signal is output on D1. The default GPIOs for the LED and "AP-Mode" button are 15 and 9 respectively (hard-wired on an Seeed XIAO ESP32C6 to the yellow LED and "Boot" button).
The 3D design is a two part case with space for a AA-battery (Li-poly 3.7v, which can connect directly to a Seeed XIAO ESP device) clips and holes for the USB-C connector and "ground", "signal" and "test" connections using standard 2.54mm pitch, easily cut from jumpers and soldered directly to the Seeed XIAO. The 3D design was done using Fusion 360 and printed on a Bambu Labs A1 Mini in 30 minutes.
I recommend putting the "Signal" connection in the middle, and never connecting the outer-most pins (ground and test) to avoid shorting the test signal to ground and (probably) frying the esp32. The middle (signal) pin can be connected to either of its neigbours and you'll see either the ground or the test signal.
This project is licensed under the MIT License. See the LICENSE file for details.
- Built using the ESP-IDF framework by Espressif Systems.
- Gemini 3.

