From 0e215331d153be78f025593b5e135dcb45d7f14e Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 12 Dec 2025 22:17:33 +0000 Subject: [PATCH] Add README --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ screenshot.png | Bin 0 -> 31419 bytes 2 files changed, 79 insertions(+) create mode 100644 README.md create mode 100644 screenshot.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..e685ade --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# ESP-Scope + +## Overview +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. + +![esp-scope](screenshot.png) + +## Features +- Real-time signal visualization on a web browser. +- Adjustable sample rate (10-100000 Hz), bit width, and attenuation. +- Crosshair functionality for precise measurements. +- Adjustable trigger level. +- Reset functionality to clear settings and reload the interface. + +## Getting Started + +### Prerequisites +- ESP32 development board. +- [ESP-IDF](https://github.com/espressif/esp-idf) installed and configured. +- USB cable to connect the ESP32 to your computer. +- A web browser (e.g., Chrome, Firefox). + +### Downloading the Project +1. Clone the repository: + ```bash + git clone https://github.com/MatAtBread/esp-scope.git + ``` +2. Navigate to the project directory: + ```bash + cd esp-scope + ``` + +### Building and Flashing + +If you have the esp-idf VSCode extension, just click on the flame to build, flash & monitor. Use the config settings for "espScope" to set youur WiFi SSID & password. + +1. Set up the ESP-IDF environment: + ```bash + . $IDF_PATH/export.sh + ``` +2. Configure the project: + ```bash + idf.py menuconfig + ``` +3. Build the project: + ```bash + idf.py build + ``` +4. Flash the firmware to the ESP32: + ```bash + idf.py -p [PORT] flash + ``` + Replace `[PORT]` with the serial port of your ESP32 (e.g., `/dev/ttyUSB0` or `COM3`). +5. Monitor the serial output: + ```bash + idf.py monitor + ``` + +### Accessing the Web Interface + +If your DHCP server supports it, the app sets its hostname and yu can just navigate to http://espscope (you may have/need a default domain extension) + +1. After flashing, the ESP32 will display its IP address in the serial monitor. +2. Open a web browser and navigate to the displayed IP address (e.g., `http://192.168.4.1`). +3. Use the web interface to: + - Adjust settings like sample rate, bit width, and attenuation. + - Visualize signals in real-time. + - Reset the interface using the "Reset" button. + +### Attaching hardware + +The displayed signal is sampled from ADC0. The test signal is output on D1. + +## License +This project is licensed under the MIT License. See the LICENSE file for details. + +## Acknowledgments +- Built using the ESP-IDF framework by Espressif Systems. +- Inspired by the need for affordable and accessible signal visualization tools. \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b89d8d6999aed81736366a5e34927d321823548e GIT binary patch literal 31419 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�fFITA;4lyRt_~IbGNG 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