docs: update project status and example project documentation with detailed descriptions and structure
parent
af381d5eaf
commit
ee7f9e44ba
321
ARCHITECTURE.md
321
ARCHITECTURE.md
|
|
@ -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/)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue