From 599ae714aba23229ddf3f5c64e89873c28a61694 Mon Sep 17 00:00:00 2001 From: kerms Date: Fri, 23 Jan 2026 14:47:20 +0100 Subject: [PATCH] docs: add READMEs for toolbox and esp-flasher --- README.md | 16 ++++++++ esp-flasher/README.md | 65 ++++++++++++++++++++++++++++++ esp-flasher/assets/screenshot.png | Bin 0 -> 35396 bytes 3 files changed, 81 insertions(+) create mode 100644 README.md create mode 100644 esp-flasher/README.md create mode 100644 esp-flasher/assets/screenshot.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..88bb8ae --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Yunsi Toolbox + +A collection of web-based tools for hardware development and debugging. + +## Components + +### [ESP Flasher](./esp-flasher/) +A browser-based firmware flasher for ESP32 microcontrollers using Web Serial. + +## Installation + +This is intended to be used as a git submodule in Vue 3 projects (specifically optimized for VitePress). + +```bash +git submodule add src/components/yunsi-toolbox +``` diff --git a/esp-flasher/README.md b/esp-flasher/README.md new file mode 100644 index 0000000..2b3cffa --- /dev/null +++ b/esp-flasher/README.md @@ -0,0 +1,65 @@ +# ESP Flasher Component + +A Vue 3 component for flashing ESP32 series microcontrollers directly from the browser using the Web Serial API. This component is based on `esptools-js`. + +## Features + +- Supports ESP32, ESP32-C3, ESP32-S3, and more. +- Built-in Xterm.js terminal for progress and logging. +- Support for multiple firmware image options. +- Dark mode support (compatible with VitePress). + +## Usage + +### Props + +| Prop | Type | Description | +| :--- | :--- | :--- | +| `imageOptions` | `ImageOption[]` | An array of firmware images available for flashing. | + +#### ImageOption Object + +```typescript +type ImageOption = { + value: string; // Display name of the firmware + link: string; // Path/URL to the .bin file + target: string; // Target chip (e.g., 'ESP32-C3', 'ESP32', 'ESP32-S3') +}; +``` + +### Example + +```vue + + + +``` + +## Dependencies + +- `vue` +- `xterm` +- `xterm-addon-fit` +- `crypto-js` +- `vitepress` (for `useData` dark mode toggle) + +## Credits + +This tool uses a modified version of [esptools-js](https://github.com/espressif/esptools-js). diff --git a/esp-flasher/assets/screenshot.png b/esp-flasher/assets/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..49482956d405a9c4b6b3558adaaa6d01f6805b79 GIT binary patch literal 35396 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 literal 0 HcmV?d00001