ESP32 runs FabGL to produce VGA display

Public Chat
Similar projects worth following
Starting from
land_boards has 841 orders / 20reviews
Ships from United States of America
This is a hardware build of the ESP32 which runs FabGL to produce VGA output


  • ESP32 Module
  • 6-bit VGA color
  • 2 x PS-2 DIN connectors
    • 5V mouse/keyboard
    • 3.3V to 5V level shifters
    • 10K pull-ups on both sides
  • 2 x FTDI connectors
  • 5V DC Jack
  • 3.3V regulator (optional)
  • GVS pins for extra ESP32 pins
  • 95x95mm form factor
  • 6-32 mounting holes


  • ANSI Terminal with Z80 CPU Card

    land-boards.com02/22/2020 at 21:53 0 comments

    Stacked the ESP32-VGA with the RETRO-EP4CE15 card. The ESP32-VGA card is running the ANSI terminal sketch by FabGL. Makes a great retro computer setup.

    The RETRO-EP4CE15 card has an Altera/Intel EP4CE15 FPGA and 1MB of SRAM. The card runs CP/M. VHDL code is Grant Searle's Multicomp.

  • Rev 1 VGA Resistors

    land-boards.com02/17/2020 at 15:44 0 comments

    I have the Hi/Low resistors swapped on the Rev 1 card. Easily reworked.

    Updated Parts List

    Consequence is the dimmed video is not as dim as it should be on the ANSI terminal header.

    [Update] I dug a little deeper. Looks like the FabGL has contradictions in their web pages. One page seems to have the order different from the other. I was using the one page to define the pins when I did the above update. I think the original schematic was actually correct. Switching back.

    The TerminalCharSet sketch shows this behavior well. When I swapped the resistors the screen got really dim. Switching the r0/r1, etc in the sketch initializer fixed the problem. I am going to switch back the parts on the card to the original order.

    VGA Output Levels

    Some pages say VGA output is 0.7V pp. This seems to be based on the composite video spec. Assuming that VGA inputs are AC coupled that could make sense. Composite video (IIRC) has a swing down to -0.3V for the sync. Black is 0V. The white level is 0.7V.

    This makes me conclude that the original 400/800 ohm values are correct. Standard (5%) values are 390 and 810 ohms.

  • Space Invaders

    land-boards.com02/09/2020 at 21:14 0 comments

  • VGA Drive Simulation in LTSpice

    land-boards.com02/09/2020 at 21:10 0 comments

    The FabGL design has 400 and 800 ohm summing resistors. These are not standard values and don't achieve the possible drive for a VGA monitor.

    The VGA monitor has 75 ohm termination. The full intensity voltage is 1V. 

    The ESP32 has a lot of drive current. Enough to drive a 75 Ohm resistor easily.

    I ran a simulation and picked the best common resistor values. The best values are 270 and 560 ohms.

  • Card Tests

    land-boards.com02/09/2020 at 21:01 0 comments

    Generally, the card runs pretty well. All of the FabGL sketches run.

    Serial Port Connection

    The early FabGL schematic had a wrong pin for the serial port. The pin, GPIO12 was corrected (changed) to be GPIO34. Rev 2 of this PCB will use the pin. The downside of this is that the Rev 1 card can't download sketches from the Arduino when there is a powered FTDI connection on the port. The FTDI cable can be disconnected, or the FTDI cable can be left connected and the USB cable can be removed from the FTDI connector.

    The reason for this seems to be that GPIO12 can't be driven when the card is being programmed due to sharing the line with the internal SPI Flash Memory. The card can be removed from the board and programmed just fine.

    This also means that the FabGL sketch for the ANSI terminal needs a small change to use GPIO12 instead of GPIO34 for serial connections.

    Hi/Lo VGA lines

    Lines were swapped on the Rev 1 board. This was easy enough to correct on the schematic but could also be fixed by changing the pins used in the Arduino sketch. Will fix the silkscreen on the Rev 2 board.

    SD Card Connections

    Adding an SD Card connector on the Rev 2 version of the board. Some of the sketches use it as storage. The pins are on the GVS connector. This will reduce the number of GPIO lines left over.

    DC Power

    The card can be powered from an external 5V DC power adapter. The rev 1 board has some options which really don't work. All that is really needed is a jumper to remove the DC jack power if the ESP32 module has the USB cable attached. The Rev 2 version of the board will reduce this to a single 1x2 header.

    There's even less need for a 3.3V regulator on the card since the GPIO lines are reduced due to the SD Card connections. Rev 2 of the board eliminates the regulator.

    FTDI #1 

    FTDI #1 is connected to the same UART connections as the USB to Serial converter. Not sure if it would work or not but leaving it on Rev 2 of the card.


    Audio works just fine but it's a bit noisy.


    The PS/2 keyboard/mouse also work great. This card has a level translator for converting the 5V of the keyboard into 3.3V for the ESP32. This is a better design than using current limit resistors.

    Reference Designator Updates

    I re-sequenced the board reference designators for the Revision 2 board. The Rev 2 layout is:

View all 5 project logs

Enjoy this project?


Discussions wrote 03/02/2020 at 20:50 point

I've seen others do the ESP8266 driving VGA. Google "ESP8266 VGA" shows several projects out there.

I don't have any interest in the subject given the $7 price of the ESP32 modules. And I have a half dozen or so ESP8266 parts gathering dust in the corner.

  Are you sure? yes | no

Starhawk wrote 02/23/2020 at 07:08 point

Two requests, if I may --

One, is it possible to get this working with the older ESP8266? I know, I know, but I am on an absolute shoestring budget, and shortly before the ESP32 came out I was gifted a couple of ESP8266 modules (ESP-12E I *think*) by a friend. I don't have any ESP32s, nor do I have any interest in buying one, if an ESP8266 will do...

Two, I'd love to see a *complete* PC-XT implementation on an ESP8266 version of this (including proper floppy disk support would be INCREDIBLE but unlikely... you know, it might not be terrifically hard to cheat and use USB 3.5" floppy drives for that... dunno, I'm not a programmer, by nature...). I know that one was started -- the guy used to be on here, and his (very much incomplete) work is somewhere in the pile of project pages... but I don't think its owner still comes around, and I know for an absolute fact that he never finished that particular project. Last I heard he was "planning to" reimplement it in ESP32 form, but I think he must've lost interest or something because I'm pretty sure that didn't happen, either... :-/

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates