Add LED tool: device, CLI, web UI, build scripts, and tests

- device.py: device communication/handling
- cli.py: CLI interface updates
- web.py: web interface
- build.py, build.sh, install.sh: build and install scripts
- Pipfile: Python dependencies
- lib/mpremote: mpremote library
- test_*.py: import and LED tests
- Updated .gitignore and README

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-01 16:00:04 +13:00
parent 4a3a384181
commit accf8f06a5
17 changed files with 2821 additions and 214 deletions

76
build.py Normal file
View File

@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""
Build script for creating binary executables from the CLI and web tools.
"""
import subprocess
import sys
import os
def build_binary(script_name, output_name=None):
"""Build a binary from a Python script using PyInstaller."""
if output_name is None:
output_name = script_name.replace('.py', '')
print(f"Building {script_name} -> {output_name}...")
cmd = [
'pyinstaller',
'--onefile', # Create a single executable file
'--name', output_name,
'--clean', # Clean PyInstaller cache
script_name
]
# Add hidden imports that might be needed
hidden_imports = [
'mpremote.transport_serial',
'mpremote.transport',
'mpremote.console',
'mpremote.mp_errno',
'serial',
'serial.tools.list_ports',
]
for imp in hidden_imports:
cmd.extend(['--hidden-import', imp])
# Include the lib directory
cmd.extend(['--add-data', 'lib:lib'])
result = subprocess.run(cmd, cwd=os.path.dirname(os.path.abspath(__file__)))
if result.returncode == 0:
print(f"✓ Successfully built {output_name}")
print(f" Binary location: dist/{output_name}")
else:
print(f"✗ Failed to build {output_name}")
return False
return True
if __name__ == '__main__':
print("Building binaries for led-tool...")
print("=" * 60)
success = True
# Build CLI binary
if build_binary('cli.py', 'led-cli'):
print()
else:
success = False
# Optionally build web binary (commented out as it's less common)
# if build_binary('web.py', 'led-tool-web'):
# print()
# else:
# success = False
if success:
print("=" * 60)
print("Build complete! Binaries are in the 'dist' directory.")
else:
print("=" * 60)
print("Build failed. Check errors above.")
sys.exit(1)