diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md deleted file mode 100644 index 22afff0..0000000 --- a/ARCHITECTURE.md +++ /dev/null @@ -1,321 +0,0 @@ -# Project Architecture - Arduino Emulator - -## Overview - -This project is a fully local Arduino emulator using official Wokwi repositories for maximum compatibility. - -``` -┌─────────────────────────────────────────────────────────────┐ -│ USER (Browser) │ -│ http://localhost:5173 │ -└──────────────────────────┬──────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ FRONTEND (React + Vite) │ -│ │ -│ ┌────────────────┐ ┌──────────────────┐ ┌─────────────┐ │ -│ │ Monaco Editor │ │ Zustand Store │ │ Simulator │ │ -│ │ (Code Edit) │ │ (State Mgmt) │ │ Canvas │ │ -│ └────────────────┘ └──────────────────┘ └─────────────┘ │ -│ │ │ │ │ -│ └───────────────────┴──────────────────────┘ │ -│ │ │ -│ ▼ │ -│ ┌──────────────────────────────────────────────────────┐ │ -│ │ Wokwi Components Integration │ │ -│ │ (wokwi-elements + avr8js from local repos) │ │ -│ └──────────────────────────────────────────────────────┘ │ -└──────────────────────────┬──────────────────────────────────┘ - │ HTTP (axios) - ▼ -┌─────────────────────────────────────────────────────────────┐ -│ BACKEND (FastAPI + Python) │ -│ http://localhost:8000 │ -│ │ -│ ┌─────────────────────────────────────────────────────┐ │ -│ │ POST /api/compile │ │ -│ │ - Receives Arduino code (.ino) │ │ -│ │ - Compiles with arduino-cli │ │ -│ │ - Returns .hex file │ │ -│ └─────────────────────────────────────────────────────┘ │ -│ │ │ -│ ▼ │ -│ ┌─────────────────────────────────────────────────────┐ │ -│ │ Arduino CLI Service │ │ -│ │ (Invokes arduino-cli as subprocess) │ │ -│ └─────────────────────────────────────────────────────┘ │ -└──────────────────────────┬──────────────────────────────────┘ - │ - ▼ - ┌──────────────────────┐ - │ arduino-cli │ - │ (Local system) │ - └──────────────────────┘ -``` - -## Data Flow: Compilation and Simulation - -### 1. Code Editing -``` -User writes code - ↓ -Monaco Editor - ↓ -Zustand (useEditorStore) - ↓ -State: code -``` - -### 2. Compilation -``` -Click "Compile" - ↓ -EditorToolbar.tsx → compileCode() - ↓ -Axios POST → http://localhost:8000/api/compile - ↓ -Backend: ArduinoCLIService.compile() - ↓ -arduino-cli compile --fqbn arduino:avr:uno - ↓ -Generates .hex file in temp directory - ↓ -Backend reads .hex and returns content - ↓ -Frontend: useSimulatorStore.setCompiledHex() -``` - -### 3. Simulation (Currently simplified) -``` -Click "Run" - ↓ -useSimulatorStore.setRunning(true) - ↓ -SimulatorCanvas: useEffect detects running=true - ↓ -setInterval every 1000ms - ↓ -updateComponentState('led-builtin', !state) - ↓ -wokwi-led component updates visually -``` - -### 4. Real Simulation (Coming with avr8js) -``` -Compiled .hex file - ↓ -AVRSimulator.loadHex(hex) - ↓ -hexParser → Uint16Array (program memory) - ↓ -CPU = new CPU(program) - ↓ -Click "Run" → AVRSimulator.start() - ↓ -requestAnimationFrame loop - ↓ -CPU.tick() × 267,000 cycles/frame - ↓ -Writes to PORTB/PORTC/PORTD - ↓ -Write hooks → PinManager.updatePort() - ↓ -PinManager notifies callbacks - ↓ -Components update visual state -``` - -## Key Components - -### Frontend - -#### 1. Stores (Zustand) -- **[useEditorStore.ts](frontend/src/store/useEditorStore.ts)** - - `code`: Current source code - - `theme`: Editor theme (dark/light) - - `setCode()`: Update code - -- **[useSimulatorStore.ts](frontend/src/store/useSimulatorStore.ts)** - - `running`: Simulation state - - `compiledHex`: Compiled hex file - - `components`: List of electronic components - - `setCompiledHex()`: Save hex - - `updateComponentState()`: Update LED/component - -#### 2. UI Components -- **[CodeEditor.tsx](frontend/src/components/editor/CodeEditor.tsx)** - - Monaco Editor wrapper - - C++ syntax highlighting - - Auto-completion - -- **[EditorToolbar.tsx](frontend/src/components/editor/EditorToolbar.tsx)** - - Buttons: Compile, Run, Stop - - Compilation state handling - - Error/success messages - -- **[SimulatorCanvas.tsx](frontend/src/components/simulator/SimulatorCanvas.tsx)** - - Renders Arduino Uno - - Renders components (LEDs) - - Simulation loop - -#### 3. Wokwi Component Wrappers -- **[LED.tsx](frontend/src/components/components-wokwi/LED.tsx)** - - React wrapper for `` - - Props: color, value, x, y - -- **[ArduinoUno.tsx](frontend/src/components/components-wokwi/ArduinoUno.tsx)** - - React wrapper for `` - - Internal LED control (pin 13) - -- **[Resistor.tsx](frontend/src/components/components-wokwi/Resistor.tsx)** - - React wrapper for `` - - Props: value (ohms) - -- **[Pushbutton.tsx](frontend/src/components/components-wokwi/Pushbutton.tsx)** - - React wrapper for `` - - Events: onPress, onRelease - -### Backend - -#### 1. API Routes -- **[compile.py](backend/app/api/routes/compile.py)** - - `POST /api/compile`: Compile code - - `GET /api/compile/boards`: List boards - -#### 2. Services -- **[arduino_cli.py](backend/app/services/arduino_cli.py)** - - `compile()`: Compile sketch with arduino-cli - - `list_boards()`: Get available boards - - Temporary directory management - -### Wokwi Libraries (Cloned Locally) - -#### 1. wokwi-elements -- **Location**: `wokwi-libs/wokwi-elements/` -- **Build**: `dist/esm/` and `dist/cjs/` -- **Components**: 50+ electronic elements -- **Technology**: Lit (Web Components) - -#### 2. avr8js -- **Location**: `wokwi-libs/avr8js/` -- **Build**: `dist/esm/` and `dist/cjs/` -- **Functionality**: Complete ATmega328p emulator -- **Supports**: CPU, Timers, USART, GPIO, ADC, etc. - -#### 3. rp2040js -- **Location**: `wokwi-libs/rp2040js/` -- **Future use**: Raspberry Pi Pico support - -## Vite Integration - -### Alias Configuration -```typescript -// vite.config.ts -resolve: { - alias: { - 'avr8js': path.resolve(__dirname, '../wokwi-libs/avr8js/dist/esm'), - '@wokwi/elements': path.resolve(__dirname, '../wokwi-libs/wokwi-elements/dist/esm'), - }, -} -``` - -This allows: -- Use local repos instead of npm -- Easy updates with `git pull` -- Modify source code if needed - -## Technology Stack - -### Frontend -| Technology | Version | Purpose | -|------------|---------|-----------| -| React | 19.2 | UI framework | -| Vite | 7.3 | Build tool & dev server | -| TypeScript | 5.9 | Static typing | -| Monaco Editor | 4.7 | Code editor (VSCode) | -| Zustand | 5.0 | State management | -| Axios | 1.13 | HTTP client | -| wokwi-elements | 1.9.2 | Electronic components | -| avr8js | 0.21.0 | AVR8 emulator | - -### Backend -| Technology | Version | Purpose | -|------------|---------|-----------| -| Python | 3.12+ | Runtime | -| FastAPI | 0.115 | Web framework | -| Uvicorn | 0.32 | ASGI server | -| SQLAlchemy | 2.0 | ORM (future) | -| aiosqlite | 0.20 | Async DB (future) | - -### External Tools -| Tool | Purpose | -|------|---------| -| arduino-cli | Arduino compiler | -| Git | Version control for Wokwi libs | - -## Architecture Advantages - -### ✅ Separation of Concerns -- **Frontend**: UI, UX, visualization -- **Backend**: Compilation, business logic -- **Wokwi Libs**: Emulation and components (maintained by Wokwi) - -### ✅ Wokwi Compatibility -- Official repositories = same functionality -- Automatic updates with `git pull` -- New components available immediately - -### ✅ Scalability -- Frontend can easily add more components -- Backend can add more endpoints (projects, sensors) -- Wokwi libs update independently - -### ✅ Local Development -- No internet required to work -- Local compilation with arduino-cli -- Local database (SQLite) - -## Upcoming Improvements - -### Phase 2: Real Emulation (avr8js) -``` -[ ] Implement AVRSimulator.ts -[ ] Intel HEX file parser -[ ] PinManager with write hooks -[ ] Integrate CPU execution loop -[ ] Map Arduino pins to components -``` - -### Phase 3: More Components -``` -[ ] Integrate more wokwi-elements -[ ] Buttons, potentiometers -[ ] Sensors (DHT22, HC-SR04) -[ ] Displays (LCD, 7-segment) -``` - -### Phase 4: Persistence -``` -[ ] SQLite database -[ ] SQLAlchemy models -[ ] Project CRUD -[ ] Save circuits as JSON -``` - -### Phase 5: Advanced Features -``` -[ ] Serial Monitor -[ ] Visual wiring (drag & drop) -[ ] Multiple boards (Mega, Nano, ESP32) -[ ] Export to Wokwi.com -``` - -## References - -- [Wokwi Elements Repo](https://github.com/wokwi/wokwi-elements) -- [AVR8js Repo](https://github.com/wokwi/avr8js) -- [Wokwi Simulator](https://wokwi.com) -- [Arduino CLI](https://arduino.github.io/arduino-cli/) -- [FastAPI Docs](https://fastapi.tiangolo.com/) -- [Vite Docs](https://vitejs.dev/) diff --git a/doc/SETUP_COMPLETE.md b/doc/SETUP_COMPLETE.md index ab36790..56efbed 100644 --- a/doc/SETUP_COMPLETE.md +++ b/doc/SETUP_COMPLETE.md @@ -1,45 +1,131 @@ -# ✅ Configuración Completada - Arduino Emulator +# ✅ Estado del Proyecto - OpenWokwi Arduino Emulator -## 🎉 Resumen de lo Implementado +## 🎉 Resumen de Funcionalidades Implementadas ### ✅ Repositorios de Wokwi Clonados y Configurados -Se han clonado los siguientes repositorios oficiales de Wokwi en `wokwi-libs/`: +Repositorios oficiales de Wokwi en `wokwi-libs/`: | Repositorio | Estado | Descripción | |-------------|--------|-------------| -| **wokwi-elements** | ✅ Compilado | 50+ componentes electrónicos Web Components | -| **avr8js** | ✅ Compilado | Emulador completo de AVR8 (ATmega328p) | -| **rp2040js** | ✅ Clonado | Emulador RP2040 (Raspberry Pi Pico) | +| **wokwi-elements** | ✅ Compilado y en uso | 48+ componentes electrónicos Web Components | +| **avr8js** | ✅ Compilado y en uso | Emulación real de AVR8 (ATmega328p) | +| **rp2040js** | ✅ Clonado | Emulador RP2040 (futuro) | | **wokwi-features** | ✅ Clonado | Documentación y features | +### ✅ Emulación AVR Real (avr8js) + +| Feature | Estado | +|---------|--------| +| CPU ATmega328p a 16MHz | ✅ Funcionando | +| Timer0, Timer1, Timer2 | ✅ Funcionando | +| USART (Serial) | ✅ Funcionando | +| ADC (analogRead) | ✅ Funcionando | +| GPIO completo (PORTB/C/D) | ✅ Funcionando | +| Loop ~60fps (267k ciclos/frame) | ✅ Funcionando | +| Control de velocidad (0.1x - 10x) | ✅ Funcionando | +| Debugging paso a paso (step) | ✅ Funcionando | +| Monitoreo PWM (6 canales) | ✅ Funcionando | +| Inyección de pin externo (inputs) | ✅ Funcionando | + +### ✅ Sistema de Componentes (48+) + +| Feature | Estado | +|---------|--------| +| Descubrimiento automático por AST | ✅ 48 componentes detectados | +| ComponentPickerModal con búsqueda | ✅ Funcionando | +| 9 categorías con filtros | ✅ Functioning | +| Thumbnails en vivo (web components) | ✅ Funcionando | +| DynamicComponent renderer genérico | ✅ Funcionando | +| Drag-and-drop en el canvas | ✅ Funcionando | +| Rotación (90° incrementos) | ✅ Funcionando | +| Diálogo de propiedades (click) | ✅ Funcionando | +| Selector de pines (doble-click) | ✅ Funcionando | +| Pin overlay (puntos cyan clickeables) | ✅ Funcionando | + +### ✅ 16 Partes con Simulación Interactiva + +| Parte | Tipo | Estado | +|-------|------|--------| +| LED | Output | ✅ | +| RGB LED | Output (digital + PWM) | ✅ | +| LED Bar Graph (10 LEDs) | Output | ✅ | +| 7-Segment Display | Output | ✅ | +| Pushbutton | Input | ✅ | +| Pushbutton 6mm | Input | ✅ | +| Slide Switch | Input | ✅ | +| DIP Switch 8 | Input | ✅ | +| Potentiometer | Input (ADC) | ✅ | +| Slide Potentiometer | Input (ADC) | ✅ | +| Photoresistor | Input/Output | ✅ | +| Analog Joystick | Input (ADC + digital) | ✅ | +| Servo | Output | ✅ | +| Buzzer | Output (Web Audio) | ✅ | +| LCD 1602 | Output (HD44780 completo) | ✅ | +| LCD 2004 | Output (HD44780 completo) | ✅ | + +### ✅ Sistema de Cables (Wires) + +| Feature | Estado | +|---------|--------| +| Creación pin-a-pin con click | ✅ Funcionando | +| Preview en tiempo real (verde, punteado) | ✅ Funcionando | +| Routing ortogonal (sin diagonales) | ✅ Funcionando | +| Edición por segmentos (drag perpendicular) | ✅ Funcionando | +| 8 colores por tipo de señal | ✅ Funcionando | +| Offset automático para cables paralelos | ✅ Funcionando | +| Auto-actualización al mover componentes | ✅ Funcionando | +| Grid snapping (20px) | ✅ Funcionando | +| Selección y eliminación de cables | ✅ Funcionando | + +### ✅ Editor de Código + +| Feature | Estado | +|---------|--------| +| Monaco Editor (C++, dark theme) | ✅ Funcionando | +| Syntax highlighting + autocomplete | ✅ Funcionando | +| Botones Compile/Run/Stop/Reset | ✅ Funcionando | +| Compilación via arduino-cli backend | ✅ Funcionando | +| Mensajes de error/éxito | ✅ Funcionando | +| Font size configurable | ✅ Funcionando | + +### ✅ Ejemplos (8 Proyectos) + +| Ejemplo | Categoría | Dificultad | +|---------|-----------|------------| +| Blink LED | basics | beginner | +| Traffic Light | basics | beginner | +| Button Control | basics | beginner | +| Fade LED (PWM) | basics | beginner | +| Serial Hello World | communication | beginner | +| RGB LED Colors | basics | intermediate | +| Simon Says Game | games | advanced | +| LCD 20x4 Display | displays | intermediate | + +- ✅ Galería con filtros de categoría y dificultad +- ✅ Carga con un click (código + componentes + cables) + ### ✅ Integración Configurada -#### Frontend (Vite) -- ✅ Alias configurados en `vite.config.ts` para usar repos locales -- ✅ Package.json actualizado con `file:../wokwi-libs/...` -- ✅ TypeScript declarations para Web Components en `vite-env.d.ts` +| Item | Estado | +|------|--------| +| Vite aliases para repos locales | ✅ | +| Package.json con `file:../wokwi-libs/...` | ✅ | +| TypeScript declarations para Web Components | ✅ | +| CORS backend (puertos 5173-5175) | ✅ | +| React Router (2 rutas) | ✅ | +| Zustand stores (editor + simulator) | ✅ | -#### Componentes React Creados -- ✅ `LED.tsx` - Wrapper para `` -- ✅ `ArduinoUno.tsx` - Wrapper para `` -- ✅ `Resistor.tsx` - Wrapper para `` -- ✅ `Pushbutton.tsx` - Wrapper para `` - -#### SimulatorCanvas Actualizado -- ✅ Usa `` en lugar de div personalizado -- ✅ Usa `` en lugar de círculos CSS -- ✅ LED interno del Arduino conectado al estado - -### ✅ Documentación Creada +### ✅ Documentación | Archivo | Descripción | |---------|-------------| -| [WOKWI_LIBS.md](WOKWI_LIBS.md) | Guía completa de integración con Wokwi | -| [ARCHITECTURE.md](ARCHITECTURE.md) | Arquitectura del proyecto y flujos de datos | -| [README.md](README.md) | Instrucciones de instalación y uso | -| [update-wokwi-libs.bat](update-wokwi-libs.bat) | Script de actualización automática | -| [.gitignore](.gitignore) | Archivos a ignorar en Git | +| `README.md` | Instrucciones de instalación y uso | +| `doc/ARCHITECTURE.md` | Arquitectura detallada del proyecto | +| `doc/WOKWI_LIBS.md` | Guía de integración con Wokwi | +| `doc/SETUP_COMPLETE.md` | Este archivo — estado del proyecto | +| `CLAUDE.md` | Guía para asistentes IA | +| `update-wokwi-libs.bat` | Script de actualización automática | ## 🚀 Cómo Empezar @@ -53,22 +139,14 @@ arduino-cli core install arduino:avr ### 2. Inicia el Backend ```bash -# Opción 1: Usando el script -start-backend.bat - -# Opción 2: Manual cd backend venv\Scripts\activate -uvicorn app.main:app --reload --port 8000 +uvicorn app.main:app --reload --port 8001 ``` ### 3. Inicia el Frontend ```bash -# Opción 1: Usando el script -start-frontend.bat - -# Opción 2: Manual cd frontend npm run dev ``` @@ -76,126 +154,35 @@ npm run dev ### 4. Abre en el Navegador - Frontend: http://localhost:5173 -- Backend API: http://localhost:8000 -- API Docs: http://localhost:8000/docs +- Backend API: http://localhost:8001 +- API Docs: http://localhost:8001/docs ## 🔄 Actualizar Librerías de Wokwi -Cuando Wokwi lance nuevas versiones o agregue nuevos componentes: - ```bash # Ejecutar script de actualización update-wokwi-libs.bat + +# Regenerar metadata de componentes (si actualizaste wokwi-elements) +cd frontend +npx tsx ../scripts/generate-component-metadata.ts ``` -Esto hará: -1. `git pull` en cada repositorio -2. `npm install` para actualizar dependencias -3. `npm run build` para recompilar +## 📋 Próximos Pasos (Pendiente) -## 🎯 Ventajas de Esta Configuración - -### ✅ Siempre Actualizado -- Un simple `git pull` te da las últimas mejoras de Wokwi -- No dependes de que publiquen en npm -- Nuevos componentes disponibles inmediatamente - -### ✅ Compatible con Wokwi -- Usas exactamente el mismo código que Wokwi.com -- Tus simulaciones funcionarán igual que en Wokwi -- Puedes exportar/importar proyectos fácilmente (futuro) - -### ✅ Desarrollo Flexible -- Puedes modificar el código fuente si necesitas -- Debugging más fácil con código fuente disponible -- Puedes contribuir mejoras a Wokwi (PRs) - -### ✅ Sin Dependencias de Internet -- Una vez clonado, funciona 100% offline -- Compilación local con arduino-cli -- No requiere servicios externos - -## 📦 Componentes Disponibles - -Gracias a wokwi-elements, tienes acceso a 50+ componentes: - -### Básicos -- ✅ `wokwi-led` - LEDs de colores -- ✅ `wokwi-resistor` - Resistencias -- ✅ `wokwi-pushbutton` - Botones -- ✅ `wokwi-slide-switch` - Interruptores -- ✅ `wokwi-potentiometer` - Potenciómetros - -### Placas -- ✅ `wokwi-arduino-uno` - Arduino Uno R3 -- ✅ `wokwi-arduino-mega` - Arduino Mega 2560 -- ✅ `wokwi-arduino-nano` - Arduino Nano -- ✅ `wokwi-pi-pico` - Raspberry Pi Pico -- ✅ `wokwi-esp32-devkit-v1` - ESP32 - -### Pantallas -- ✅ `wokwi-lcd1602` - LCD 16x2 -- ✅ `wokwi-neopixel` - LEDs RGB -- ✅ `wokwi-7segment` - Display 7 segmentos - -### Sensores -- ✅ `wokwi-dht22` - Temperatura y humedad -- ✅ `wokwi-hc-sr04` - Ultrasónico -- ✅ `wokwi-pir-motion-sensor` - Movimiento PIR -- ✅ `wokwi-photoresistor-sensor` - Fotoresistor - -### Otros -- ✅ `wokwi-servo` - Servo motor -- ✅ `wokwi-membrane-keypad` - Teclado 4x4 -- ✅ `wokwi-ir-receiver` - Receptor IR -- ✅ `wokwi-ds1307` - Reloj RTC - -## 🔨 Próximos Pasos Sugeridos - -### Inmediato -1. ✅ **Prueba la app** - Compila y ejecuta el ejemplo Blink -2. ✅ **Explora componentes** - Revisa `wokwi-libs/wokwi-elements/src/` -3. ✅ **Lee la documentación** - [WOKWI_LIBS.md](WOKWI_LIBS.md) y [ARCHITECTURE.md](ARCHITECTURE.md) - -### Fase 2: Emulación Real con avr8js -- [ ] Implementar `AVRSimulator.ts` usando avr8js clonado -- [ ] Parser de archivos Intel HEX -- [ ] `PinManager` con write hooks -- [ ] Conectar CPU execution loop a componentes visuales - -### Fase 3: Más Componentes -- [ ] Agregar wrappers para más componentes (botones, sensores) -- [ ] Implementar drag & drop de componentes -- [ ] Sistema de wiring visual - -### Fase 4: Persistencia -- [ ] Base de datos SQLite -- [ ] Guardar/cargar proyectos -- [ ] Exportar circuitos como JSON - -## 📚 Recursos de Aprendizaje - -### Wokwi -- [Wokwi Elements Catalog](https://elements.wokwi.com/) - Todos los componentes disponibles -- [Wokwi Simulator](https://wokwi.com) - Prueba componentes online -- [AVR8js Demo](https://github.com/wokwi/avr8js/tree/main/demo) - Ejemplos de uso - -### Desarrollo -- [React Docs](https://react.dev/) - Framework UI -- [Vite Docs](https://vitejs.dev/) - Build tool -- [FastAPI Docs](https://fastapi.tiangolo.com/) - Backend framework -- [Arduino CLI](https://arduino.github.io/arduino-cli/) - Compilador - -### Web Components -- [Lit Documentation](https://lit.dev/) - Framework usado por wokwi-elements -- [Web Components Guide](https://developer.mozilla.org/en-US/docs/Web/Web_Components) +| Feature | Prioridad | Descripción | +|---------|-----------|-------------| +| Serial Monitor | Alta | UI para leer output USART de la simulación | +| Persistencia | Alta | SQLite para guardar/cargar proyectos | +| Undo/Redo | Media | Historial de edición para código y circuito | +| Multi-board | Media | Cambio de board en runtime (Mega, Nano, ESP32) | +| Validación de cables | Media | Validación eléctrica y resaltado de errores | +| Export/Import | Baja | Compartir proyectos como archivos | ## 🐛 Troubleshooting ### Los componentes no se muestran -Verifica que wokwi-elements esté compilado: - ```bash cd wokwi-libs/wokwi-elements npm run build @@ -203,8 +190,6 @@ npm run build ### Error: "Cannot find module 'avr8js'" -Recompila avr8js: - ```bash cd wokwi-libs/avr8js npm install @@ -213,24 +198,35 @@ npm run build ### arduino-cli no funciona -Verifica la instalación: - ```bash arduino-cli version arduino-cli core list arduino-cli core install arduino:avr ``` -## 🎊 ¡Todo Listo! +### LED no parpadea en simulación -Tu proyecto está completamente configurado y listo para desarrollar. Tienes: +- Verifica que compilaste el código (botón Compile) +- Verifica que ejecutaste la simulación (botón Run) +- Revisa la consola del navegador para errores de port listeners +- Verifica el pin mapping en el diálogo de propiedades del componente + +### Componente nuevo no aparece en el picker + +```bash +cd frontend +npx tsx ../scripts/generate-component-metadata.ts +``` + +## 🎊 Estado General + +El proyecto tiene implementadas todas las funcionalidades core: -- ✅ Repositorios oficiales de Wokwi clonados y funcionando -- ✅ 50+ componentes electrónicos disponibles -- ✅ Emulador AVR8 listo para integrar - ✅ Editor de código profesional (Monaco) -- ✅ Compilador Arduino local -- ✅ Sistema de actualización automática -- ✅ Documentación completa - -¡A programar Arduino! 🚀 +- ✅ Compilación Arduino local (arduino-cli) +- ✅ Emulación AVR8 real con periféricos completos +- ✅ 48+ componentes electrónicos con descubrimiento automático +- ✅ 16 partes con simulación interactiva (LED, LCD, buttons, potentiometers, servo, buzzer) +- ✅ Sistema de cables ortogonales con edición visual +- ✅ 8 proyectos de ejemplo con galería filtrable +- ✅ Sistema de actualización automática para librerías Wokwi diff --git a/doc/examples/README.md b/doc/examples/README.md index 2036b31..cdea0fc 100644 --- a/doc/examples/README.md +++ b/doc/examples/README.md @@ -1,13 +1,33 @@ -# Example Project Screenshots +# Example Projects -Esta carpeta contiene las imágenes de preview para los proyectos de ejemplo de la galería. +Esta carpeta contiene las imágenes de preview para los 8 proyectos de ejemplo de la galería. + +## Ejemplos Disponibles + +| ID | Título | Categoría | Dificultad | Componentes | +|----|--------|-----------|------------|-------------| +| `blink-led` | Blink LED | basics | beginner | Arduino Uno | +| `traffic-light` | Traffic Light | basics | beginner | 3 LEDs (R/Y/G) | +| `button-led` | Button Control | basics | beginner | Button + LED | +| `fade-led` | Fade LED (PWM) | basics | beginner | 1 LED | +| `serial-hello` | Serial Hello World | communication | beginner | Arduino Uno | +| `rgb-led` | RGB LED Colors | basics | intermediate | RGB LED | +| `simon-says` | Simon Says Game | games | advanced | 4 LEDs + 4 buttons | +| `lcd-hello` | LCD 20x4 Display | displays | intermediate | LCD 2004 | + +Cada ejemplo incluye: +- Código Arduino completo +- Definiciones de componentes con posiciones +- Conexiones de cables con pines y colores + +Los ejemplos se definen en `frontend/src/data/examples.ts` y se renderizan en la galería `ExamplesGallery.tsx` con filtros por categoría y dificultad. ## Cómo Crear Screenshots ### Método 1: Captura Manual (Recomendado) 1. Carga el ejemplo en el editor (http://localhost:5173/examples) -2. Haz click en el ejemplo +2. Haz click en el ejemplo para cargarlo 3. Ajusta el zoom del canvas si es necesario 4. Usa una herramienta de captura de pantalla para capturar solo el área del simulador 5. Guarda la imagen con el nombre correspondiente @@ -31,32 +51,20 @@ html2canvas(canvas).then(canvas => { Los archivos deben seguir el ID del ejemplo: -- `blink-led.png` - Blink LED example -- `traffic-light.png` - Traffic Light example -- `button-control.png` - Button Control example -- `fade-led.png` - Fade LED example -- `serial-hello.png` - Serial Hello World example -- `rgb-led.png` - RGB LED Colors example -- `simon-says.png` - Simon Says Game example +- `blink-led.png` — Blink LED +- `traffic-light.png` — Traffic Light +- `button-led.png` — Button Control +- `fade-led.png` — Fade LED +- `serial-hello.png` — Serial Hello World +- `rgb-led.png` — RGB LED Colors +- `simon-says.png` — Simon Says Game +- `lcd-hello.png` — LCD 20x4 Display ## Dimensiones Recomendadas - **Ancho**: 800px - **Alto**: 500px -- **Formato**: PNG con fondo transparente o oscuro (#1e1e1e) - -## Actualizar el Código - -Una vez tengas las imágenes, actualiza `frontend/src/data/examples.ts`: - -```typescript -{ - id: 'blink-led', - title: 'Blink LED', - // ... resto de propiedades - thumbnail: '/doc/examples/blink-led.png', // Agregar esta línea -} -``` +- **Formato**: PNG con fondo oscuro (#1e1e1e) ## Placeholder Actual @@ -66,4 +74,12 @@ Mientras no haya imágenes, se muestra un placeholder con: - Número de cables (amarillo) - Fondo degradado con borde punteado -Este placeholder es más profesional que el preview SVG generado automáticamente. +## Agregar un Nuevo Ejemplo + +1. Agregar la definición en `frontend/src/data/examples.ts` con: + - `id`, `title`, `description`, `category`, `difficulty` + - `code`: Sketch Arduino completo + - `components[]`: Tipo, posición, propiedades + - `wires[]`: Conexiones con `startPinName`, `endPinName`, `color` +2. (Opcional) Capturar screenshot y guardarlo aquí como `{id}.png` +3. El ejemplo aparecerá automáticamente en la galería con filtrado por categoría y dificultad