docs: update project status and example project documentation with detailed descriptions and structure

pull/10/head
David Montero Crespo 2026-03-04 19:14:26 -03:00
parent af381d5eaf
commit ee7f9e44ba
3 changed files with 193 additions and 502 deletions

View File

@ -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 `<wokwi-led>`
- Props: color, value, x, y
- **[ArduinoUno.tsx](frontend/src/components/components-wokwi/ArduinoUno.tsx)**
- React wrapper for `<wokwi-arduino-uno>`
- Internal LED control (pin 13)
- **[Resistor.tsx](frontend/src/components/components-wokwi/Resistor.tsx)**
- React wrapper for `<wokwi-resistor>`
- Props: value (ohms)
- **[Pushbutton.tsx](frontend/src/components/components-wokwi/Pushbutton.tsx)**
- React wrapper for `<wokwi-pushbutton>`
- 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/)

View File

@ -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 `<wokwi-led>`
- ✅ `ArduinoUno.tsx` - Wrapper para `<wokwi-arduino-uno>`
- ✅ `Resistor.tsx` - Wrapper para `<wokwi-resistor>`
- ✅ `Pushbutton.tsx` - Wrapper para `<wokwi-pushbutton>`
#### SimulatorCanvas Actualizado
- ✅ Usa `<wokwi-arduino-uno>` en lugar de div personalizado
- ✅ Usa `<wokwi-led>` 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

View File

@ -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