devicescript-hola-mundo-simulador

Hola mundo y simulador en DeviceScript

  • 4 min

El primer programa con DeviceScript nos permite comprobar el código en un dispositivo simulado antes de desplegarlo en la placa. Empezaremos escribiendo en la consola y después controlaremos el LED de estado.

En el mundo de los microcontroladores, la tradición dicta que el primer programa no sea imprimir un texto en pantalla, sino hacer parpadear un LED. Es nuestro “Hola Mundo”. Nos confirma que el procesador está vivo, que tenemos control sobre el tiempo y que podemos actuar sobre el mundo físico.

En DeviceScript podemos hacer ambas pruebas sin conectar ningún componente externo, gracias a su simulador.

Estructura de un programa DeviceScript

Abre VS Code y el archivo src/main.ts creado en el paso anterior. Si contiene código de ejemplo, bórralo para empezar desde cero.

Un programa básico en DeviceScript se parece mucho a cualquier script de TypeScript o JavaScript moderno, pero con una diferencia clave: importamos funcionalidades del hardware.

Escribe esto en el editor:

import { delay } from "@devicescript/core"

console.log("¡Iniciando DeviceScript!")

setInterval(async () => {
    console.log("Hola desde el bucle - " + new Date().toISOString())
    await delay(1000)
}, 1000)
Copied!

La función de setInterval incluye async porque utiliza await delay. Así suspendemos esa tarea sin bloquear el runtime mientras espera.

Ejecutar el programa en el simulador

Antes de conectar la placa, vamos a probar esto. Aquí es donde DeviceScript saca pecho.

Busca el icono de DeviceScript en la barra lateral de VS Code.

En el menú “Actions”, pulsad el botón de Start Simulator (o el icono de “Play” en la esquina superior derecha del editor).

De repente, se abrirá un panel a la derecha (o en una ventana flotante) llamado DeviceScript Dashboard.

Este panel es una representación virtual de un dispositivo y mostrará una placa simulada.

En la terminal de VS Code, dentro de la pestaña DeviceScript, aparecerán los mensajes:

> ¡Iniciando DeviceScript!
> Hola desde el bucle - 2023-10-27T10:00:01.000Z
> Hola desde el bucle - 2023-10-27T10:00:02.000Z
...
Copied!

¡Felicidades! Acabas de ejecutar tu primer firmware virtualizado.

Hacer parpadear el LED de estado

Imprimir texto está bien, pero queremos luces. En DeviceScript, el hardware se controla mediante Servicios (concepto Jacdac).

Sin embargo, para facilitarnos la vida al principio, DeviceScript incluye funciones para controlar el Status Light (ese LED pequeño que casi todas las placas traen integrado, o el LED RGB en los ESP32-C3).

Modifiquemos el código:

import { delay } from "@devicescript/core"
import { setStatusLight } from "@devicescript/runtime"

console.log("Empezando el parpadeo...")

setInterval(async () => {
    // Encendemos el LED en Rojo (Formato Hexadecimal 0xRRGGBB)
    await setStatusLight(0xff0000)
    await delay(500)
    
    // Apagamos el LED (Negro)
    await setStatusLight(0x000000) 
    
    // Opcional: Azul para que se vea diferente
    // await setStatusLight(0x0000ff)
}, 1000)
Copied!

Guarda el archivo. Si el simulador está abierto, se recargará automáticamente.

En el dashboard, la placa virtual mostrará un pequeño círculo que parpadea en rojo.

Esta es la gran potencia de DeviceScript: el ciclo de desarrollo es inmediato. Cambias código, guardas, y el simulador refleja el cambio en milisegundos.

Ejecutarlo en la placa física

Ahora sí, vamos a la realidad. Queremos ver esto en nuestra placa (ESP32 o Pico W).

Conecta la placa al USB si todavía no lo está.

Aseguraos de que está Conectada en la extensión de DeviceScript (debe aparecer en la lista de “Devices”).

Pulsad el botón de Run (el icono de Play) en la parte superior derecha del archivo main.ts.

Aparecerá primero la notificación Building… y después Deploying….

¿Qué está pasando?

VS Code compila tu TypeScript a Bytecode, lo envía por el cable USB a la máquina virtual que instalamos en la placa, y le dice: “Ejecuta esto”.

Al terminar el despliegue, el LED de la placa debería empezar a parpadear en rojo.

El simulador puede seguir abierto al mismo tiempo. El LED virtual y el físico deberían mostrar un comportamiento equivalente.

Depuración en tiempo real

Los mensajes de console.log también seguirán apareciendo en la terminal de VS Code.

Los datos llegan desde la placa física en tiempo real. Al desconectar el cable, el programa puede seguir ejecutándose, pero los mensajes dejarán de llegar al ordenador.