Repository navigation
Capítulo 37: Webserial y FPGAs

- Fecha: 2020/Abril/11
Haz click en la imagen para ver el vídeo en Youtube
- Acceso al mundo físico desde el navegador
- Ejemplo 1: Abriendo y cerrando una pinza
- Ejemplo 2: Terminal serie Web
- Conclusiones
- Enlaces
- Autor
- Licencia
- Créditos y agradecimientos
Gracias a la API Experimental de WebSeial podemos acceder a dispositivos externos al ordenador desde el navegador a través del puerto serie. Esto permite que nos comuniquemos muy fácilmente con nuestros circuitos de las FPGAs, o microprocesadores en placas como Arduino
Tenemos el siguiente escenario montado: La placa con FPGA Alhambra II conectada directamente a una pinza robótica accionada por un servo

Le cargamos un circuito para abrir y cerrar la pinza cuando se aprieta el pulsador SW1 de la placa. En el ejemplo 5 del tutorial 18 están los detalles de este circuito
Ahora queremos controlar la pinza desde el ordenador, a través del puerto serie, además de a través del pulsador. Añadimos al circuito un switch virtual. Es un bloque recibe un comando por el puerto serie y saca un cero o uno, como si fuese un pulsador cualquiera

El circuito está en este fichero: 01-Ejemplo-1-Pinza.ice
Desde un terminal serie podemos accionar ahora la pinza, sin más que enviar el comando "a" más el estado del bit ("0","1") más un carácter de final de línea "\n". Así, los dos comandos posibles son "a1\n" y "a0\n

Ahora lo probamos desde una aplicación Javascript que están en una web. Nos conectamos a esta URL: PANEL DE PRUEBAS
La API del Webserial de momento está en fase experimental y no está soportada todavía en todos los navegadores. Yo lo estoy usando con Chromium, que es libre y multiplataforma. Tambien funciona en Chrome, Edge y Ópera
Al ser experimental NO está activado por defecto. Será lo primero que hagamos. Al conectarnos la primera vez nos aparecerá un mensaje de aviso diciendo que nuestro navegador NO soporta WEB Serial:

Activarlo es muy sencillo, sólo hay que poner en la barra de navegación esta URL:
chrome://flags/#enable-experimental-web-platform-features
Nos fijamos en la primera opción: Experimental Web Platform Features, que por defecto estará desabilitada (Disabled)

La activamos (Enabled). En la parte inferior nos aparecerá una nueva opción indicando que relancemos el navegador para que se active la nueva opción

Se nos abrirá de nuevo el navegador, en la misma página de configuración. Ahora nos volvemos a conectar a la URL del PANEL. Y nos aparecerá este panel, sin el mensaje en rojo anterior:

Para acceder al puerto serie, primero tenemos que abrirlo pinchando en Connect. Esto es obligatorio siempre, porque por motivos de seguridad, el navegador no deja acceder al puerto serie a los programas en javascript, sin nuestro consentimiento

Se nos abre una ventana con los nombres de los dispositivos serie que podemos abrir. Estos nombres cambiarán de un sistema operativo a otro. En Linux, si lo que tienes es conectada una placa Alhambra II, debemos abrir el dispositivo TTYUSB1. Lo seleccionamos y pinchamos en Connect

Ya estamos conectados. Si apretamos el switch rojo con el ratón, veremos cómo la pinza se cierra y se abre

Una vez que hayamos termiando de probarlo, es IMPORTANTE desconetarse del puerto serie, para poder usarlo desde otra aplicación. Para ello sólo hay que pinchar en Disconnect y el panel vuelve al estado inicial
Además de crear nuestros paneles para acceder al hardware, también podemos usar un terminal WEB desde el navegador, cuyo funcionamiento es similar a los terminales serie clásicos
Para probarlo vamos a cargar primero en la Alhambra II un circuito que tiene el procesador J1 ejecutando un intérprete del lenguaje FORTH. El fichero a cargar es este: j1a-cpu-dev.ice
Podéis encontrar más información sobre este proyecto en este enlace: Proyecto J1a-Icestudio
Ahora abrimos el terminal WEB, desde esta URL: Terminal WEB

Para usarlo tenemos que conectarnos primero, pinchando en Conectar y seleccionando el puerto serie. Una vez hecho esto ya podemos escribir comandos en el terminal. Por ejemplo pulsamos ENTER varias veces. El intérprete de FORTH nos devolverá el mensaje "OK"

Podemos probar unos cuandos comandos sencillos de Forth, como por ejemplo realizar una suma:
1 2 + .
o mostrar todas las palabras implementadas en este Forth:
words
o encender todos los LEDs, con este comando:
$ff leds

La API webserial es muy prometedora. Va a permitir hacer aplicaciones WEB que tengan acceso al mundo físico: microprocesadores, FPGAs, impresoras 3D, robots, etc... Todo de una forma muy sencilla para el usuario, sin tener que instalar nada. Simplemente conectándose a una URL
- Getting started with the Web Serial API
- Estado del WEB Serial
- Tutorial 18: Bloques con parámetros. Ejemplo 5: Pinza mecánica
- Tutorial 10: Servobit. Manejo de servos (dos posiciones) desde la FPGA
- Icestudio, Nigthly builds
- Tutorial de Electrónica digital para makers con FPGAs libres
- Cuadernos técnicos sobre FPGAs Libres
- Juan González-Gómez (Obijuan)


- Proyecto Icestorm: Herramientas libres para sintetizar diseños en FPGAs
- Procesador simplez en FPGA
- Platformio + FPGA
- Icestudio: programación visual de hardware en FPGA
- Platformio + Símplez
- Tarjeta IceZUM Alhambra. FPGA para todos
- Diseño paramétrico de piezas en FreeCAD
- Ubuntu Phone y FPGAs
- Esquema de la Icezum Alhambra migrado a Kicad
- Modelos 3D en Freecad para Kicad
- Icezum Alhambra V1.0K
- ACC: Apollo CPU Core
- Teselación de Penrose (P2)
- ACC1: Apollo CPU Core 1
- Probando el analizador lógico compatible Saleae con la FPGA
- FPGA: La placa Alhambra-II
- Etiquetas en Icestudio
- FPGAs: Control de LEDs
- FPGAs: SPI esclavo (1/2)
- FPGAs: SPI esclavo (2/2)
- FPGAs: SPI maestro (1/2)
- FPGAs: SPI maestro (2/2)
- FPGAs: Display SPI de 4 dígitos de 7 segmentos
- FPGAs: Máquina de contar. Controlador para Display SPI
- FPGAs: Edición de submódulos en Icestudio 0.5-dev
- Webserial y FPGAs
- Componentes virtuales y FPGA
- FPGAs y Memoria (I): Del biestable D al registro
- FPGAs y Memoria (II): Banco de registros
- FPGAs y Memoria (III): Memorias síncronas
- FPGAs y Memoria (VI): Aplicación: Secuencia programable en los LEDs
- FPGAs y Memoria (V): Aplicación: Volcado de memoria al PC
- FPGAs y Memorias (VI): Mapeo de recursos en memoria
- FPGAs y Pulsadores (I). Etapas de procesamiento de las entradas
- FPGAs y Pulsadores (II). La etapa física: pulsadores y placas
- FPGAs y Pulsadores (III). Etapas 1 y 2: Pull-ups y pull-downs
- FPGAs y Pulsadores (IV). Etapa 3: Sincronización
- FPGAs y Pulsadores (V). Etapa 4: Normalización
- FPGAs y Pulsadores (VI). Etapa 5: Antirrebotes
- FPGAs y Pulsadores (VII). Ejemplos de uso
- (-54). Colección iceK. FPGAs y contantes
