233 lines
7.2 KiB
Markdown
233 lines
7.2 KiB
Markdown
# ✅ Estado del Proyecto - OpenWokwi Arduino Emulator
|
|
|
|
## 🎉 Resumen de Funcionalidades Implementadas
|
|
|
|
### ✅ Repositorios de Wokwi Clonados y Configurados
|
|
|
|
Repositorios oficiales de Wokwi en `wokwi-libs/`:
|
|
|
|
| Repositorio | Estado | Descripción |
|
|
|-------------|--------|-------------|
|
|
| **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
|
|
|
|
| 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) | ✅ |
|
|
|
|
### ✅ Documentación
|
|
|
|
| Archivo | Descripción |
|
|
|---------|-------------|
|
|
| `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
|
|
|
|
### 1. Asegúrate de tener arduino-cli instalado
|
|
|
|
```bash
|
|
arduino-cli version
|
|
arduino-cli core install arduino:avr
|
|
```
|
|
|
|
### 2. Inicia el Backend
|
|
|
|
```bash
|
|
cd backend
|
|
venv\Scripts\activate
|
|
uvicorn app.main:app --reload --port 8001
|
|
```
|
|
|
|
### 3. Inicia el Frontend
|
|
|
|
```bash
|
|
cd frontend
|
|
npm run dev
|
|
```
|
|
|
|
### 4. Abre en el Navegador
|
|
|
|
- Frontend: http://localhost:5173
|
|
- Backend API: http://localhost:8001
|
|
- API Docs: http://localhost:8001/docs
|
|
|
|
## 🔄 Actualizar Librerías de Wokwi
|
|
|
|
```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
|
|
```
|
|
|
|
## 📋 Próximos Pasos (Pendiente)
|
|
|
|
| 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
|
|
|
|
```bash
|
|
cd wokwi-libs/wokwi-elements
|
|
npm run build
|
|
```
|
|
|
|
### Error: "Cannot find module 'avr8js'"
|
|
|
|
```bash
|
|
cd wokwi-libs/avr8js
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
### arduino-cli no funciona
|
|
|
|
```bash
|
|
arduino-cli version
|
|
arduino-cli core list
|
|
arduino-cli core install arduino:avr
|
|
```
|
|
|
|
### LED no parpadea en simulación
|
|
|
|
- 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:
|
|
|
|
- ✅ Editor de código profesional (Monaco)
|
|
- ✅ 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
|