Escribe cualquier comando y te explicaré su uso.
Ejemplos:
ls -la, sudo apt update, gpio readall
AAA
# Consola Raspberry Pi Interactiva para Entradas de Blog
```html
<!--
==============================================
CONSOLA RASPBERRY PI INTERACTIVA - PARA ENTRADAS DE BLOG
Versión: 2.0 | Consola de aprendizaje interactivo
Sistema: Raspberry Pi OS | Estética original Raspberry Pi
==============================================
-->
<style>
/* ------------------------------------------------------------------- */
/* CONSOLA INTERACTIVA RASPBERRY PI - ESTILO BLOG */
/* ------------------------------------------------------------------- */
.raspberry-console-blog {
font-family: 'Courier New', 'Consolas', 'Monaco', monospace;
max-width: 800px;
margin: 30px auto;
background: #000000;
border: 3px solid #C51D4E;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(197, 29, 78, 0.2);
position: relative;
}
/* Cabecera de la consola */
.console-header {
background: linear-gradient(90deg, #2d2d2d 0%, #1a1a1a 100%);
padding: 15px 20px;
border-bottom: 2px solid #C51D4E;
display: flex;
align-items: center;
justify-content: space-between;
color: #ffffff;
}
.console-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 16px;
font-weight: bold;
}
.raspberry-icon {
color: #C51D4E;
font-size: 20px;
animation: pulse 2s infinite;
}
.console-status {
font-size: 12px;
color: #00FF00;
background: rgba(0, 255, 0, 0.1);
padding: 4px 10px;
border-radius: 12px;
border: 1px solid #00FF00;
}
/* Área de terminal */
.terminal-area {
background: #000000;
padding: 20px;
min-height: 400px;
position: relative;
}
/* Prompt y área de comandos */
.command-prompt {
color: #00FF00;
margin-bottom: 15px;
font-size: 14px;
display: flex;
align-items: center;
flex-wrap: wrap;
}
.prompt-text {
margin-right: 10px;
white-space: nowrap;
}
.command-input {
background: transparent;
border: none;
color: #00FF00;
font-family: 'Courier New', monospace;
font-size: 14px;
flex: 1;
min-width: 200px;
outline: none;
caret-color: #00FF00;
}
.cursor {
display: inline-block;
width: 8px;
height: 16px;
background-color: #00FF00;
margin-left: 2px;
animation: blink 1s infinite;
vertical-align: middle;
}
/* Historial de comandos */
.command-history {
margin-bottom: 20px;
max-height: 300px;
overflow-y: auto;
}
.command-entry {
margin-bottom: 10px;
padding: 10px;
border-radius: 4px;
background: rgba(30, 30, 30, 0.8);
border-left: 3px solid #C51D4E;
animation: fadeIn 0.3s ease;
}
.command-executed {
color: #00FF00;
font-weight: bold;
margin-bottom: 5px;
display: flex;
align-items: center;
gap: 8px;
}
.command-executed::before {
content: "π";
color: #C51D4E;
font-weight: bold;
}
.command-output {
color: #CCCCCC;
font-size: 13px;
line-height: 1.4;
padding-left: 20px;
}
.command-output code {
background: rgba(0, 255, 0, 0.1);
padding: 2px 6px;
border-radius: 3px;
color: #00FF00;
font-family: 'Courier New', monospace;
}
/* Panel de ayuda lateral */
.help-panel {
background: rgba(30, 30, 40, 0.95);
border-left: 2px solid #C51D4E;
padding: 15px;
font-size: 13px;
color: #CCCCCC;
display: none;
animation: slideIn 0.3s ease;
}
.help-panel.active {
display: block;
}
.help-title {
color: #C51D4E;
font-size: 14px;
font-weight: bold;
margin-bottom: 10px;
display: flex;
align-items: center;
gap: 8px;
}
.help-content {
line-height: 1.5;
}
/* Botones de control */
.console-controls {
background: rgba(30, 30, 30, 0.9);
padding: 10px 20px;
border-top: 1px solid #333333;
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.control-btn {
background: rgba(197, 29, 78, 0.3);
border: 1px solid #C51D4E;
color: #ffffff;
padding: 8px 15px;
border-radius: 4px;
font-family: 'Courier New', monospace;
font-size: 12px;
cursor: pointer;
transition: all 0.3s;
display: flex;
align-items: center;
gap: 5px;
}
.control-btn:hover {
background: rgba(197, 29, 78, 0.5);
transform: translateY(-2px);
}
.control-btn:active {
transform: translateY(0);
}
/* Lista de comandos disponibles */
.commands-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 10px;
margin-top: 10px;
max-height: 150px;
overflow-y: auto;
padding: 10px;
background: rgba(0, 0, 0, 0.5);
border-radius: 4px;
}
.command-suggestion {
background: rgba(197, 29, 78, 0.1);
padding: 8px;
border-radius: 3px;
font-size: 12px;
color: #CCCCCC;
cursor: pointer;
transition: all 0.2s;
border: 1px solid transparent;
}
.command-suggestion:hover {
background: rgba(197, 29, 78, 0.2);
border-color: #C51D4E;
transform: translateX(3px);
}
/* Animaciones */
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(5px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideIn {
from { opacity: 0; transform: translateX(10px); }
to { opacity: 1; transform: translateX(0); }
}
/* Scrollbar personalizada */
.command-history::-webkit-scrollbar,
.commands-list::-webkit-scrollbar {
width: 8px;
}
.command-history::-webkit-scrollbar-track,
.commands-list::-webkit-scrollbar-track {
background: #1a1a1a;
}
.command-history::-webkit-scrollbar-thumb,
.commands-list::-webkit-scrollbar-thumb {
background: #C51D4E;
border-radius: 4px;
}
.command-history::-webkit-scrollbar-thumb:hover,
.commands-list::-webkit-scrollbar-thumb:hover {
background: #e0245e;
}
/* Responsive para blog */
@media (max-width: 768px) {
.raspberry-console-blog {
margin: 20px 10px;
}
.console-header {
flex-direction: column;
gap: 10px;
align-items: flex-start;
}
.commands-list {
grid-template-columns: 1fr;
}
.command-input {
min-width: 150px;
}
}
/* Efectos especiales */
.typewriter {
overflow: hidden;
border-right: 2px solid #00FF00;
white-space: nowrap;
animation: typing 3.5s steps(40, end);
}
@keyframes typing {
from { width: 0 }
to { width: 100% }
}
</style>
<div class="raspberry-console-blog" id="raspberryConsole">
<!-- Cabecera de la consola -->
<div class="console-header">
<div class="console-title">
<span class="raspberry-icon">π</span>
<span>RASPBERRY PI INTERACTIVE CONSOLE</span>
</div>
<div class="console-status" id="consoleStatus">● ONLINE</div>
</div>
<!-- Área principal -->
<div style="display: flex; flex-wrap: wrap;">
<!-- Terminal izquierda -->
<div style="flex: 1; min-width: 300px;">
<div class="terminal-area">
<!-- Historial de comandos -->
<div class="command-history" id="commandHistory">
<div class="command-entry">
<div class="command-executed">help</div>
<div class="command-output">
Consola Raspberry Pi Interactive v2.0<br>
Escribe cualquier comando y te explicaré su uso.<br>
Ejemplos: <code>ls -la</code>, <code>sudo apt update</code>, <code>gpio readall</code>
</div>
</div>
</div>
<!-- Prompt actual -->
<div class="command-prompt">
<span class="prompt-text">pi@raspberrypi:~$</span>
<input type="text"
class="command-input"
id="commandInput"
placeholder="Escribe un comando..."
autocomplete="off"
autofocus>
<span class="cursor"></span>
</div>
<!-- Comandos sugeridos -->
<div style="margin-top: 20px;">
<div style="color: #666; font-size: 12px; margin-bottom: 8px;">
Comandos populares (haz clic para probar):
</div>
<div class="commands-list" id="suggestedCommands">
<!-- Comandos se cargan por JavaScript -->
</div>
</div>
</div>
</div>
<!-- Panel de ayuda derecha -->
<div class="help-panel" id="helpPanel" style="flex: 0 0 300px;">
<div class="help-title">💡 AYUDA DEL COMANDO</div>
<div class="help-content" id="helpContent">
Selecciona un comando para ver su explicación detallada.
</div>
</div>
</div>
<!-- Controles -->
<div class="console-controls">
<button class="control-btn" onclick="executeCommand('help')">
<span>?</span> AYUDA
</button>
<button class="control-btn" onclick="executeCommand('clear')">
🗑️ LIMPIAR
</button>
<button class="control-btn" onclick="showExamples()">
📚 EJEMPLOS
</button>
<button class="control-btn" onclick="copyHistory()">
📋 COPIAR HISTORIAL
</button>
<div style="margin-left: auto; display: flex; align-items: center; gap: 10px;">
<span style="color: #666; font-size: 11px;">Comandos ejecutados:</span>
<span id="commandCount" style="color: #00FF00; font-weight: bold;">1</span>
</div>
</div>
</div>
<script>
/* ------------------------------------------------------------------- */
/* CONSOLA INTERACTIVA RASPBERRY PI */
/* ------------------------------------------------------------------- */
class InteractiveRaspberryConsole {
constructor() {
this.commandHistory = [];
this.commandCount = 1;
this.currentHelp = '';
this.commandDatabase = this.createCommandDatabase();
this.init();
}
init() {
this.setupEventListeners();
this.loadSuggestedCommands();
this.updateCommandCount();
// Efecto inicial
setTimeout(() => {
this.typeWelcomeMessage();
}, 500);
}
createCommandDatabase() {
return {
// Comandos básicos del sistema
'help': {
syntax: 'help',
description: 'Muestra esta ayuda y lista de comandos disponibles',
explanation: 'El comando <code>help</code> muestra información sobre cómo usar la consola interactiva y lista los comandos más comunes de Raspberry Pi.',
example: 'help → Muestra este mensaje de ayuda',
category: 'sistema'
},
'clear': {
syntax: 'clear',
description: 'Limpia la pantalla de la consola',
explanation: 'Borra todo el historial de comandos visible en la pantalla, pero mantiene el registro interno.',
example: 'clear → Limpia la pantalla',
category: 'sistema'
},
'ls': {
syntax: 'ls [opciones] [directorio]',
description: 'Lista archivos y directorios',
explanation: 'Muestra el contenido del directorio actual o del especificado. Opciones comunes:<br>' +
'<code>-l</code>: Listado largo con detalles<br>' +
'<code>-a</code>: Muestra archivos ocultos<br>' +
'<code>-la</code>: Combinación de ambas',
example: 'ls -la /home/pi → Lista todo con detalles',
category: 'archivos'
},
'cd': {
syntax: 'cd [directorio]',
description: 'Cambia de directorio',
explanation: 'Navega entre directorios. Usa <code>cd ..</code> para subir un nivel, <code>cd ~</code> para ir al home, o <code>cd /</code> para la raíz.',
example: 'cd /home/pi/Documents → Entra en Documents',
category: 'archivos'
},
'pwd': {
syntax: 'pwd',
description: 'Muestra el directorio actual',
explanation: 'Print Working Directory - muestra la ruta completa del directorio en el que te encuentras.',
example: 'pwd → /home/pi',
category: 'archivos'
},
'mkdir': {
syntax: 'mkdir [nombre]',
description: 'Crea un nuevo directorio',
explanation: 'Crea un directorio con el nombre especificado. Usa <code>mkdir -p ruta/completa</code> para crear directorios padres automáticamente.',
example: 'mkdir proyecto_nuevo',
category: 'archivos'
},
'rm': {
syntax: 'rm [opciones] [archivo]',
description: 'Elimina archivos o directorios',
explanation: 'Elimina permanentemente. ¡Cuidado! Opciones:<br>' +
'<code>-r</code>: Elimina recursivamente (para directorios)<br>' +
'<code>-f</code>: Fuerza eliminación sin preguntar',
example: 'rm -r directorio_viejo → Elimina directorio y contenido',
category: 'archivos'
},
// Comandos de sistema Raspberry Pi
'raspi-config': {
syntax: 'sudo raspi-config',
description: 'Menú de configuración de Raspberry Pi',
explanation: 'Interfaz TUI (Text User Interface) para configurar tu Raspberry Pi:<br>' +
'• Cambiar contraseña<br>' +
'• Configurar WiFi<br>' +
'• Habilitar/deshabilitar interfaces<br>' +
'• Overclocking<br>' +
'• Expandir filesystem',
example: 'sudo raspi-config → Abre el menú interactivo',
category: 'raspberry'
},
'vcgencmd': {
syntax: 'vcgencmd [comando]',
description: 'Utilidad de diagnóstico del hardware',
explanation: 'Comandos específicos de hardware Raspberry Pi:<br>' +
'<code>measure_temp</code>: Temperatura CPU<br>' +
'<code>measure_clock arm</code>: Frecuencia CPU<br>' +
'<code>measure_volts core</code>: Voltaje<br>' +
'<code>get_mem arm/gpu</code>: Memoria asignada',
example: 'vcgencmd measure_temp → temp=45.6\'C',
category: 'raspberry'
},
'gpio': {
syntax: 'gpio [comando] [pin] [valor]',
description: 'Control de pines GPIO (wiringPi)',
explanation: 'Para usar GPIO necesitas instalar wiringPi. Comandos principales:<br>' +
'<code>readall</code>: Estado de todos los pines<br>' +
'<code>mode X out/in</code>: Configura pin como salida/entrada<br>' +
'<code>write X 1/0</code>: Escribe valor HIGH/LOW<br>' +
'<code>read X</code>: Lee valor actual',
example: 'gpio mode 7 out && gpio write 7 1',
category: 'raspberry'
},
'raspi-gpio': {
syntax: 'raspi-gpio [comando]',
description: 'Control nativo de GPIO',
explanation: 'Utilidad nativa de Raspberry Pi OS (no requiere wiringPi):<br>' +
'<code>get X</code>: Información del pin<br>' +
'<code>set X op</code>: Configura como salida<br>' +
'<code>set X dh/dl</code>: HIGH/LOW<br>' +
'<code>set X ip pu/pd</code>: Entrada con pull-up/down',
example: 'raspi-gpio set 7 op dh → Pin 7 como salida en HIGH',
category: 'raspberry'
},
// Comandos de red
'ifconfig': {
syntax: 'ifconfig [interface]',
description: 'Configuración de interfaces de red',
explanation: 'Muestra o configura interfaces de red. En sistemas modernos, usa <code>ip addr</code>.<br>' +
'Interfaces comunes: <code>eth0</code> (Ethernet), <code>wlan0</code> (WiFi)<br>' +
'Muestra: IP, MAC, estado, estadísticas.',
example: 'ifconfig wlan0 → Info de WiFi',
category: 'red'
},
'ping': {
syntax: 'ping [host]',
description: 'Prueba conectividad de red',
explanation: 'Envía paquetes ICMP a un host y mide el tiempo de respuesta.<br>' +
'Opciones: <code>-c N</code> (número de paquetes), <code>-i N</code> (intervalo)<br>' +
'Presiona <code>Ctrl+C</code> para detener.',
example: 'ping google.com -c 4 → 4 paquetes a Google',
category: 'red'
},
'ssh': {
syntax: 'ssh [usuario]@[host]',
description: 'Conexión remota segura',
explanation: 'Establece conexión SSH a otro sistema. Requiere servicio SSH activo en el destino.<br>' +
'Opciones: <code>-p puerto</code> (puerto diferente al 22)<br>' +
'<code>-X</code> (habilita X11 forwarding)',
example: 'ssh pi@192.168.1.100',
category: 'red'
},
// Comandos APT
'apt': {
syntax: 'sudo apt [comando]',
description: 'Gestor de paquetes Debian/Raspbian',
explanation: 'Sistema de gestión de paquetes APT:<br>' +
'<code>update</code>: Actualiza lista de paquetes<br>' +
'<code>upgrade</code>: Actualiza paquetes instalados<br>' +
'<code>install paquete</code>: Instala paquete<br>' +
'<code>remove paquete</code>: Elimina paquete<br>' +
'<code>autoremove</code>: Limpia dependencias',
example: 'sudo apt update && sudo apt upgrade',
category: 'paquetes'
},
// Comandos de procesos
'top': {
syntax: 'top',
description: 'Monitor de procesos en tiempo real',
explanation: 'Muestra procesos activos, uso de CPU, memoria, etc.<br>' +
'Teclas dentro de top:<br>' +
'<code>q</code>: Salir<br>' +
'<code>k</code>: Matar proceso (pid)<br>' +
'<code>r</code>: Cambiar prioridad (nice)<br>' +
'<code>h</code>: Ayuda',
example: 'top → Monitor interactivo',
category: 'procesos'
},
'htop': {
syntax: 'htop',
description: 'Monitor de procesos mejorado',
explanation: 'Versión mejorada de top (requiere instalación). Características:<br>' +
'• Interfaz a color<br>' +
'• Uso de teclas direccionales<br>' +
'• Procesos en árbol<br>' +
'• Búsqueda de procesos<br>' +
'Instalar: <code>sudo apt install htop</code>',
example: 'sudo apt install htop && htop',
category: 'procesos'
},
// Comandos Python
'python3': {
syntax: 'python3 [script.py]',
description: 'Intérprete Python 3',
explanation: 'Ejecuta scripts Python. Raspberry Pi usa Python 3 por defecto.<br>' +
'Opciones comunes:<br>' +
'<code>-c "código"</code>: Ejecuta código inline<br>' +
'<code>-m modulo</code>: Ejecuta módulo como script<br>' +
'<code>--version</code>: Muestra versión',
example: 'python3 led_blink.py',
category: 'python'
},
'pip3': {
syntax: 'pip3 [comando]',
description: 'Gestor de paquetes Python 3',
explanation: 'Instala paquetes de Python desde PyPI:<br>' +
'<code>install paquete</code>: Instala paquete<br>' +
'<code>uninstall paquete</code>: Desinstala<br>' +
'<code>list</code>: Lista instalados<br>' +
'<code>freeze</code>: Genera requirements.txt',
example: 'pip3 install RPi.GPIO',
category: 'python'
}
};
}
setupEventListeners() {
const input = document.getElementById('commandInput');
// Enter para ejecutar
input.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
this.executeCommand(input.value.trim());
input.value = '';
}
});
// Autocompletar con Tab
input.addEventListener('keydown', (e) => {
if (e.key === 'Tab') {
e.preventDefault();
this.autoComplete(input.value);
}
});
}
loadSuggestedCommands() {
const suggestions = document.getElementById('suggestedCommands');
const popularCommands = [
'ls -la', 'pwd', 'sudo apt update', 'vcgencmd measure_temp',
'gpio readall', 'ifconfig', 'ping google.com', 'python3 --version',
'top', 'mkdir prueba', 'rm -r', 'ssh pi@localhost'
];
suggestions.innerHTML = popularCommands.map(cmd =>
`<div class="command-suggestion" onclick="consoleApp.executeCommand('${cmd}')">${cmd}</div>`
).join('');
}
executeCommand(command) {
if (!command) return;
this.commandCount++;
this.updateCommandCount();
// Añadir al historial
this.commandHistory.push({
command: command,
timestamp: new Date(),
output: this.processCommand(command)
});
this.updateCommandDisplay();
this.scrollToBottom();
// Mostrar ayuda si el comando existe
if (this.commandDatabase[command.split(' ')[0]]) {
this.showCommandHelp(command.split(' ')[0]);
}
}
processCommand(command) {
const cmd = command.split(' ')[0].toLowerCase();
switch(cmd) {
case 'help':
return this.getHelpOutput();
case 'clear':
this.clearConsole();
return 'Pantalla limpiada';
case 'ls':
return `Listando archivos...<br>
<code>drwxr-xr-x 2 pi pi 4096 Jan 1 00:00 Desktop/</code><br>
<code>drwxr-xr-x 2 pi pi 4096 Jan 1 00:00 Documents/</code><br>
<code>drwxr-xr-x 2 pi pi 4096 Jan 1 00:00 Downloads/</code><br>
<code>-rw-r--r-- 1 pi pi 123 Jan 1 00:00 ejemplo.txt</code>`;
case 'pwd':
return `/home/pi`;
case 'sudo':
if (command.includes('apt update')) {
return `Actualizando lista de paquetes...<br>
Hit:1 http://archive.raspberrypi.org/debian bullseye InRelease<br>
Hit:2 http://deb.debian.org/debian bullseye InRelease<br>
Leyendo lista de paquetes... Hecho`;
}
return `Ejecutando con privilegios de superusuario...`;
default:
if (this.commandDatabase[cmd]) {
return `Comando <code>${command}</code> reconocido. Revisa el panel de ayuda para detalles.`;
}
return `Comando <code>${command}</code> no encontrado. Escribe <code>help</code> para ver comandos disponibles.`;
}
}
getHelpOutput() {
let output = 'COMANDOS DISPONIBLES:<br><br>';
const categories = {};
// Organizar por categoría
for (const [cmd, info] of Object.entries(this.commandDatabase)) {
if (!categories[info.category]) {
categories[info.category] = [];
}
categories[info.category].push({cmd, info});
}
// Mostrar por categoría
for (const [category, commands] of Object.entries(categories)) {
output += `<strong style="color: #C51D4E;">${category.toUpperCase()}:</strong><br>`;
commands.forEach(({cmd, info}) => {
output += ` <code>${cmd}</code> - ${info.description}<br>`;
});
output += '<br>';
}
output += '<br>Escribe cualquier comando seguido de <code>--help</code> o selecciona uno de la lista para ver detalles.';
return output;
}
showCommandHelp(command) {
const helpPanel = document.getElementById('helpPanel');
const helpContent = document.getElementById('helpContent');
const cmdInfo = this.commandDatabase[command];
if (cmdInfo) {
helpPanel.classList.add('active');
helpContent.innerHTML = `
<div style="margin-bottom: 15px;">
<div style="color: #00FF00; font-family: 'Courier New'; font-size: 14px;">
${cmdInfo.syntax}
</div>
<div style="color: #CCCCCC; margin-top: 5px;">
${cmdInfo.description}
</div>
</div>
<div style="margin-bottom: 15px;">
<strong style="color: #C51D4E;">📖 Explicación:</strong><br>
<div style="margin-top: 5px;">
${cmdInfo.explanation}
</div>
</div>
<div style="margin-bottom: 10px;">
<strong style="color: #C51D4E;">📝 Ejemplo:</strong><br>
<code style="display: inline-block; margin-top: 5px; background: rgba(0,0,0,0.5); padding: 5px 10px; border-radius: 3px;">
${cmdInfo.example}
</code>
</div>
<div style="font-size: 11px; color: #666; margin-top: 15px; border-top: 1px solid #333; padding-top: 10px;">
Categoría: <span style="color: #C51D4E;">${cmdInfo.category}</span> |
<span onclick="consoleApp.copyToClipboard('${cmdInfo.syntax.split('[')[0]}')"
style="cursor: pointer; color: #00FF00;">
📋 Copiar comando
</span>
</div>
`;
}
}
clearConsole() {
document.getElementById('commandHistory').innerHTML = '';
this.commandCount = 0;
this.updateCommandCount();
}
updateCommandDisplay() {
const historyDiv = document.getElementById('commandHistory');
const lastCommand = this.commandHistory[this.commandHistory.length - 1];
const entry = document.createElement('div');
entry.className = 'command-entry';
entry.innerHTML = `
<div class="command-executed">${lastCommand.command}</div>
<div class="command-output">${lastCommand.output}</div>
`;
historyDiv.appendChild(entry);
}
updateCommandCount() {
document.getElementById('commandCount').textContent = this.commandCount;
}
scrollToBottom() {
const historyDiv = document.getElementById('commandHistory');
historyDiv.scrollTop = historyDiv.scrollHeight;
}
autoComplete(partial) {
const input = document.getElementById('commandInput');
const matches = Object.keys(this.commandDatabase).filter(cmd =>
cmd.startsWith(partial.toLowerCase())
);
if (matches.length === 1) {
input.value = matches[0] + ' ';
} else if (matches.length > 1) {
this.executeCommand(`help | grep ${partial}`);
}
}
typeWelcomeMessage() {
const welcome = `Bienvenido a la Consola Interactiva Raspberry Pi. Escribe 'help' para comenzar.`;
const typingDiv = document.createElement('div');
typingDiv.className = 'command-entry';
typingDiv.innerHTML = `
<div class="command-output" style="border-left-color: #00FF00;">
<span class="typewriter">${welcome}</span>
</div>
`;
document.getElementById('commandHistory').appendChild(typingDiv);
this.scrollToBottom();
}
copyToClipboard(text) {
navigator.clipboard.writeText(text).then(() => {
const status = document.getElementById('consoleStatus');
const original = status.textContent;
status.textContent = '✓ COPIADO';
status.style.color = '#00FF00';
setTimeout(() => {
status.textContent = original;
status.style.color = '#00FF00';
}, 2000);
});
}
}
// Funciones globales
function executeCommand(cmd) {
consoleApp.executeCommand(cmd);
}
function showExamples() {
consoleApp.executeCommand('help');
consoleApp.showCommandHelp('ls');
}
function copyHistory() {
const history = consoleApp.commandHistory.map(h =>
`$ ${h.command}\n${h.output.replace(/<[^>]*>/g, '')}`
).join('\n\n');
consoleApp.copyToClipboard(history);
}
// Inicializar consola
let consoleApp;
document.addEventListener('DOMContentLoaded', () => {
consoleApp = new InteractiveRaspberryConsole();
});
</script>
```
## 🍓 **Características de la Consola Interactiva:**
### **🎮 Funcionalidades Principales:**
#### **1. Consola Realmente Interactiva:**
- **Escribe comandos** en el prompt real
- **Presiona Enter** para ejecutar
- **Autocompletado** con Tab
- **Historial** de comandos ejecutados
- **Panel de ayuda** inteligente
#### **2. Base de Datos de 20+ Comandos:**
- **Comandos Raspberry Pi específicos**: `raspi-config`, `vcgencmd`, `gpio`
- **Comandos Linux básicos**: `ls`, `cd`, `pwd`, `mkdir`
- **Comandos de red**: `ifconfig`, `ping`, `ssh`
- **Comandos APT**: `sudo apt update`, `sudo apt upgrade`
- **Comandos Python**: `python3`, `pip3`
#### **3. Sistema de Ayuda Inteligente:**
- **Panel lateral** con explicaciones detalladas
- **Sintaxis correcta** para cada comando
- **Ejemplos reales** listos para copiar
- **Explicaciones paso a paso**
- **Organizado por categorías**
### **✨ Características Interactivas:**
#### **Para el Usuario:**
1. **Escribe cualquier comando** en el prompt
2. **Obtén explicación instantánea** en el panel derecho
3. **Copia comandos** con un click
4. **Prueba comandos sugeridos** de la lista
5. **Limpia la consola** cuando quieras
#### **Ejemplos de Interacción:**
- **Escribe**: `ls -la` → Muestra salida simulada + explicación de opciones
- **Escribe**: `sudo apt update` → Muestra proceso simulado + explicación APT
- **Escribe**: `vcgencmd measure_temp` → Explica monitoreo de temperatura
- **Escribe**: `help` → Lista todos los comandos disponibles
### **🎨 Estética Raspberry Pi Auténtica:**
#### **Colores Oficiales:**
- **Fondo negro** terminal real
- **Rojo Raspberry Pi** (#C51D4E) en bordes y acentos
- **Verde terminal** (#00FF00) para texto de comando
- **Grises técnicos** para paneles secundarios
#### **Elementos Visuales:**
- **Icono Raspberry Pi** (π) animado
- **Cursor parpadeante** auténtico
- **Prompt estilo Linux**: `pi@raspberrypi:~$`
- **Estado de conexión** (ONLINE)
- **Barras de scroll** personalizadas
### **📱 Integración Perfecta en Blog:**
#### **Diseño Adaptativo:**
- **Ancho máximo 800px** (ideal para entradas)
- **Se adapta** al contenedor del blog
- **Dos columnas** en desktop (terminal + ayuda)
- **Una columna** en móviles
- **Sin afectar fondo** del blog
#### **Interacción Nativa:**
- **Focus automático** en el input
- **Teclado funciona** normalmente
- **Scroll suave** en historial
- **Animaciones sutiles** pero efectivas
BRAINSTORMING
- Tormenta de Ideas de PASAIA LAB © 2025 by José
Agustín Fontán Varela is licensed under CC
BY-NC-ND 4.0
BRAINSTORMING
- Tormenta de Ideas de PASAIA LAB © 2025 by José
Agustín Fontán Varela is licensed under Creative
Commons Attribution-NonCommercial-NoDerivatives 4.0 International
CONSOLA RASPBERRY PI INTERACTIVA - PARA ENTRADAS DE BLOG
Versión: 2.0 | Consola de aprendizaje interactivo
Sistema: Raspberry Pi OS | Estética original Raspberry Pi
==============================================-->
Tormenta Work Free Intelligence + IA Free Intelligence Laboratory by José Agustín Fontán Varela is licensed under CC BY-NC-ND 4.0

No hay comentarios:
Publicar un comentario
COMENTA LIBREMENTE ;)