Skip to main content

Automatically flash OpenShock firmware to ESP32 devices

Project description

OpenShock Auto-Flasher Ask DeepWiki

PyPI - Version PyPI - Python Version PyPI - Implementation PyPI - Types

Tests GitHub License

Automatically flash OpenShock firmware to ESP32 devices when they are plugged in. Features color-coded terminal backgrounds to indicate the current status at a glance.

Features

  • Automatic detection of newly connected devices
  • Color-coded status with background colors:
    • Blue - Waiting for device
    • Yellow - Flashing in progress
    • Green - Flash complete
    • Red - Error occurred
  • Firmware verification using SHA256 checksums
  • Multiple channels - stable, beta, or develop
  • Post-flash commands - Send serial commands to device after flashing
  • Continuous mode - flash multiple devices in sequence
  • Optional flash erase before flashing
  • Smart text wrapping - Long messages wrap cleanly without cutting words
  • Dynamic boards list - View available boards for any channel via --help

Requirements

  • Python 3.12 or higher
  • Linux, macOS, or Windows
  • USB connection to ESP32 devices

Installation

From GitHub with pipx (Recommended)

Install directly from the latest GitHub version:

pipx install --force 'git+https://github.com/NanashiTheNameless/OpenShock-AutoFlasher@main'

This makes the OPSH-AutoFlash command available system-wide.

Alternative: From PyPI

If you prefer a release from PyPI:

pipx install OpenShock-AutoFlasher

From Source

  1. Clone this repository:
git clone https://github.com/NanashiTheNameless/OpenShock-AutoFlasher.git
cd OpenShock-AutoFlasher
  1. Install dependencies:
pip3 install -r requirements.txt

Usage

Basic Usage

Flash devices using the stable firmware channel:

OPSH-AutoFlash --board <board-name>

View available boards for different channels:

OPSH-AutoFlash --help                        # Shows boards for stable channel
OPSH-AutoFlash --channel beta --help         # Shows boards for beta channel
OPSH-AutoFlash -C develop --help             # Shows boards for develop channel

Command-Line Options

Option Short Description Default
--channel -C Firmware channel: stable, beta, or develop stable
--version -V Use specific firmware version (overrides channel) -
--board -B Board type (required) -
--chip - Target chip for esptool auto
--erase -E Erase flash before flashing false
--no-auto -N Disable auto-flash (just detect devices) false
--post-flash -P Serial command to send after flashing (can use multiple times) -
--post-flash-delay - Milliseconds to wait between post-flash commands 0
--alert -A Beep audibly when flashing completes false

Examples

Flash with stable firmware:

OPSH-AutoFlash --board Wemos-D1-Mini-ESP32

Flash with specific firmware version:

OPSH-AutoFlash --version 1.5.0 --board Wemos-D1-Mini-ESP32

Flash with beta firmware and erase existing data:

OPSH-AutoFlash --channel beta --board Wemos-D1-Mini-ESP32 --erase

Flash with an explicit esptool chip:

OPSH-AutoFlash --board Seeed-Xiao-ESP32C3 --chip esp32c3 --erase

Flash and send post-flash commands to device:

OPSH-AutoFlash --board Wemos-D1-Mini-ESP32 \
  --post-flash "help" \
  --post-flash "version" \
  --post-flash-delay 1500 \
  --post-flash "status"

Use development firmware with audio alert:

OPSH-AutoFlash --channel develop --board Wemos-D1-Mini-ESP32 --alert

Detect devices without auto-flashing:

OPSH-AutoFlash --board Wemos-D1-Mini-ESP32 --no-auto

How It Works

  1. Fetches the latest firmware version from firmware.openshock.org (or uses specified version)
  2. Validates the specified board type against available boards
  3. Initializes known USB ports and begins monitoring
  4. Detects when new devices are connected
  5. Downloads firmware binary and checksum in parallel
  6. Verifies firmware integrity using SHA256 checksum
  7. Optionally erases flash memory (if --erase is specified)
  8. Flashes the device using esptool
  9. Executes post-flash commands over serial (if specified)
  10. Repeats for additional devices (continuous mode)

The tool uses esptool with optimized settings and can send serial commands to the device after flashing for automated configuration or testing.

Supported Boards

The tool supports multiple ESP32-based boards. To view the current list of available boards, run:

OPSH-AutoFlash --help                        # Stable channel boards
OPSH-AutoFlash --channel beta --help         # Beta channel boards
OPSH-AutoFlash -C develop --help             # Develop channel boards

Common board types include:

  • Wemos-D1-Mini-ESP32
  • Wemos-Lolin-S2-Mini
  • Wemos-Lolin-S3
  • Wemos-Lolin-S3-Mini
  • Waveshare_esp32_s3_zero
  • Pishock-2023
  • Pishock-Lite-2021
  • Seeed-Xiao-ESP32C3
  • Seeed-Xiao-ESP32S3
  • DFRobot-Firebeetle2-ESP32E
  • OpenShock-Core-V1
  • OpenShock-Core-V2
  • NodeMCU-32S

Note: Different channels may have different board support. Always check the help output for your selected channel.

Permissions (Linux)

On Linux, you may need to add your user to the dialout group to access serial ports:

sudo usermod -a -G dialout $USER

Then log out and log back in for the changes to take effect.

Troubleshooting

Device not detected:

  • Ensure the device is in bootloader mode
  • Check USB cable connection
  • Verify device appears in system (check dmesg on Linux or Device Manager on Windows)

Permission errors:

  • Add user to dialout/uucp group (Linux)
  • Run with appropriate permissions
  • Check USB cable supports data transfer (not charge-only)

Verification fails:

  • Try using --erase flag to erase flash first
  • Check for hardware issues
  • Try a different USB port or cable

Development

Running Tests

The project includes a comprehensive test suite using pytest. To run the tests:

  1. Install development dependencies:
pip install -e .[dev]
  1. Run the test suite:
pytest tests/ -v
  1. Run tests with coverage:
pytest tests/ -v --cov=openshock_autoflasher --cov-report=term-missing

Code Quality

The project uses several tools for code quality:

  • Black - Code formatting
  • Flake8 - Linting
  • Mypy - Type checking

Run code quality checks:

# Format code
black openshock_autoflasher/ tests/

# Lint code
flake8 openshock_autoflasher/ tests/

# Type check
mypy openshock_autoflasher/

Project Structure

The codebase is modular and organized as follows:

  • openshock_autoflasher/ - Main package
    • constants.py - Configuration constants
    • styles.py - Terminal styling and colors
    • flasher.py - Core AutoFlasher class with flashing logic
    • cli.py - Command-line interface and argument parsing
    • __init__.py - Package initialization
    • __main__.py - Module entry point
  • tests/ - Test suite
    • test_constants.py - Tests for constants module
    • test_styles.py - Tests for styles module
    • test_flasher.py - Tests for flasher module
    • test_cli.py - Tests for CLI module

Continuous Integration

The project uses GitHub Actions for CI/CD:

  • Tests Workflow - Runs tests on Ubuntu, Windows, and macOS with Python 3.12-3.14
  • Publish Workflow - Publishes to PyPI on release

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See LICENSE) file for details.

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

Disclaimer

This tool is provided as-is. Use at your own risk. Always ensure you have backups of any important configurations before flashing firmware.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openshock_autoflasher-0.2.2.tar.gz (30.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openshock_autoflasher-0.2.2-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file openshock_autoflasher-0.2.2.tar.gz.

File metadata

  • Download URL: openshock_autoflasher-0.2.2.tar.gz
  • Upload date:
  • Size: 30.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openshock_autoflasher-0.2.2.tar.gz
Algorithm Hash digest
SHA256 8a78795d4f44c6bbb836033743296dd6046e850d06bef9ac87c69c2f6ada3d31
MD5 df56409d02fc47cdae3d28442bb7ecaf
BLAKE2b-256 c57aa00c271cc4ef149c71e5b1b74db641e1f3af15bb2c9a596291d6b0f4a9e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for openshock_autoflasher-0.2.2.tar.gz:

Publisher: python-publish.yml on NanashiTheNameless/OpenShock-AutoFlasher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openshock_autoflasher-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for openshock_autoflasher-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0350f804bf5feba32e08c596c7e1a045d03d178819accc219b0f1047f1f8987c
MD5 efd1bf2c52dc36f8d3760e244c2cd99f
BLAKE2b-256 1a3df0766d2f62df9d809dd9332b33d60a62979a48d5be3fb7f553fe29e21cf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for openshock_autoflasher-0.2.2-py3-none-any.whl:

Publisher: python-publish.yml on NanashiTheNameless/OpenShock-AutoFlasher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page