[en] In this project, we develop a remote laboratory that allows a distant interaction with the FPGA available in the Spartan-3 Starter Kit by Xilinx development board. To do this, we have developed a web server that allows the client to connect to the FPGA and interact with it remotely through a web browser. On the implemented prototype, we've added an authentication method so as to control the access to the application. As a hardware environment for the web server, we have used the development board ESP32-CAM, which has a dual-core 32 bits microprocessor. Said board is also the one that has been used to manipulate the state of the inputs of the system implemented on the Spartan-3 board. The client side programming (front-end) has been made by using HTML, CSS and JavaScript, while the server side programming (back-end) has been done in C, as it works directly on the microcontroller found on the ESP32-CAM board. To visually observe the system response, we have also implemented a streaming server. To do this, we have used a 2 Mb OV2640 camera, which is integrated into the ESP32-CAM board, and it allows the streaming server to capture images. Both the web server and the streaming server are located inside a private network, so, as for the client to communicate with the servers, we have implemented a reverse proxy, which routes traffic that arrives to our system from the public network to the private network. Said proxy has been implemented using NGINX.

[es] En este proyecto se ha implementado un laboratorio remoto para permitir la interacción a distancia con la FPGA disponible en la placa de desarrollo "Spartan-3 Starter Kit" de Xilinx. Para ello, se ha tenido que desarrollar un servidor web que permite al cliente hacer la conexión e interactuar con la FPGA de forma no presencial, a través de un navegador web. En el prototipo implementado se ha añadido un método de autenticación para controlar el acceso a la aplicación. Como entorno hardware del servidor web se ha utilizado la placa de desarrollo ESP32-CAM, que dispone de un microcontrolador de 32 bits de doble núcleo. Dicha placa también es la que se ha utilizado para manipular el estado de las entradas del sistema implementado sobre la placa Spartan-3. La programación del lado del cliente (front-end) ha sido realizada empleando HTML, CSS y JavaScript, mientras que la programación del lado del servidor (back-end) se ha realizado en C, ya que se trabaja directamente sobre el microcontrolador presente en la placa ESP32-CAM. Para poder observar de manera visual la respuesta del sistema se ha implementado también un servidor de streaming. Para ello, se ha utilizado la cámara OV2640 de 2 Mp integrada en la propia placa ESP32-CAM que permite la captación de imágenes por parte del servidor de streaming. Tanto el servidor web como el servidor de streaming se encuentran dentro de una red privada, así que para que el cliente pueda comunicarse con ambos servidores, se ha implementado un proxy inverso que redirige el tráfico que llega a nuestro sistema por la red pública a la red privada. Dicho proxy inverso se ha implementado con NGINX. Por último, se ha diseñado una placa de circuito impreso (PCB) empleando KiCad para hacer todas las conexiones necesarias entre la placa ESP32-CAM y la Spartan-3 y conseguir que el sistema funcione adecuadamente.