Difference between revisions of "ESP32-TERM"

From Land Boards Wiki
Jump to navigation Jump to search
 
(71 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[file:ESP32-TERM_Front_3D.png]]
+
[[file:ESP32-TERM_P0648-800px.jpg]]
 +
 
 +
<video type="youtube">VylUOAgu9to</video>
  
 
== Features ==
 
== Features ==
Line 6: Line 8:
 
** UART interface
 
** UART interface
 
** Keyboard/Mouse interface
 
** Keyboard/Mouse interface
** Drive VGA video
+
** Drives VGA video
 
** Runs FabGL ANSI/VT [http://www.fabglib.org/special_term_escapes.html Terminal firmware]
 
** Runs FabGL ANSI/VT [http://www.fabglib.org/special_term_escapes.html Terminal firmware]
 
* "Typical" Serial Terminal Connectors
 
* "Typical" Serial Terminal Connectors
 
** Connectors down long side of the card
 
** Connectors down long side of the card
** 6-bit VGA color
+
** VGA
*** 2:2:2 R:G:B
+
** PS-2 keyboard
** PS-2 DIN keyboard connector
+
** PS-2 mouse
*** 5V PS/2 keyboard
+
** Audio jack
*** 3.3V to 5V level shifters
+
** DE-9 Serial
**** Better than 5V keyboard with series resistors
 
*** 10K pull-ups on both sides
 
** PS-2 DIN mouse connector
 
*** 5V PS/2 mouse
 
*** 3.3V to 5V level shifters
 
**** Better than 5V mouse with series resistors
 
*** 10K pull-ups on both sides
 
 
** 5V DC on USB-B
 
** 5V DC on USB-B
** Audio jack (stereo connector but mono output on both channels)
 
** DE-9 Serial connector
 
 
* "Special" connectors
 
* "Special" connectors
 
** Connectors down the short side
 
** Connectors down the short side
Line 30: Line 23:
 
** FTDI connector - 6-pin
 
** FTDI connector - 6-pin
 
** 5V connector
 
** 5V connector
* Programmable LED on P12
+
* Programmable LED on P14
 
* 145x95mm size
 
* 145x95mm size
 
** 135x85mm hole mounting spacing
 
** 135x85mm hole mounting spacing
Line 81: Line 74:
  
 
* DB-15HD connector
 
* DB-15HD connector
* 64-colors
+
* 64-colors (2:2:2)
 
* ESP32 pins
 
* ESP32 pins
  
Line 94: Line 87:
 
   B1    => GPIO4
 
   B1    => GPIO4
 
</pre>
 
</pre>
 +
 +
[[FILE:ESP-32_TERM_P1_VGA_Rev1.PNG]]
  
 
==== VGA - Resistor Selection ====
 
==== VGA - Resistor Selection ====
Line 135: Line 130:
  
 
=== P2 - PS/2 Keyboard ===
 
=== P2 - PS/2 Keyboard ===
 +
 +
[[FILE:ESP-32_TERM_P2_P3_Rev1.PNG]]
  
 
* Purple DIN 6 connector
 
* Purple DIN 6 connector
 
* 5V power to the keyboard
 
* 5V power to the keyboard
 +
* Shift 3.3V levels of the ESP32 to 5V of the keyboard/mouse
 
* ESP32 pins
 
* ESP32 pins
  
Line 158: Line 156:
 
=== P4 - Audio Out ===
 
=== P4 - Audio Out ===
  
* Mono output wired on both pins of stereo 3.5mm Jack
+
[[FILE:ESP-32_TERM_P4_Rev1.PNG]]
 +
 
 +
* Mono output wired on both pins (ring/tip) of stereo 3.5mm Jack
 
* Line level outputs
 
* Line level outputs
 
** Requirs amplification
 
** Requirs amplification
Line 168: Line 168:
  
 
=== P5 - RS-232 ===
 
=== P5 - RS-232 ===
 +
 +
[[FILE:ESP-32_TERM_P5_Rev1.PNG]]
  
 
* On-board TTL to RS-232 converter
 
* On-board TTL to RS-232 converter
Line 191: Line 193:
 
</pre>
 
</pre>
  
=== P6 - 5V Power ===
+
=== P6 - 5V Power (USB) ===
 +
 
 +
[[FILE:ESP-32_TERM_P6_J1_Rev1.PNG]]
  
 
* USB-B connector
 
* USB-B connector
Line 198: Line 202:
  
 
=== J1 - 5V Power Header ===
 
=== J1 - 5V Power Header ===
 +
 +
[[FILE:ESP-32_TERM_P6_J1_Rev1.PNG]]
  
 
* 2z3 right angle header
 
* 2z3 right angle header
Line 203: Line 209:
 
** Only one power source can be used with the card
 
** Only one power source can be used with the card
  
=== J2 - FTDI Power in/out ===  
+
=== J2 - FTDI Power in/out Header ===  
 +
 
 +
[[FILE:ESP-32_TERM_j2_j3_Rev1.PNG]]
 +
 
 +
* 1x2 right angle header
 +
* '''Don't install jumper if an external FTDI interface with 5V power out is used'''
  
* '''Don't install jumper if an external FTDI interface with 5V out is used'''
+
=== J3 - FTDI Header ===
  
=== J3 - FTDI ===
+
[[FILE:ESP-32_TERM_j2_j3_Rev1.PNG]]
  
 +
* 1x6 right angle header
 
* Most recent (2020-02) ANSI terminal uses pin 34 for Rx
 
* Most recent (2020-02) ANSI terminal uses pin 34 for Rx
 
* Pinout
 
* Pinout
Line 291: Line 303:
 
=== J4 - Serial Source Selection Header ===
 
=== J4 - Serial Source Selection Header ===
  
 +
[[FILE:ESP-32_TERM_J4_Rev1.PNG]]
 +
 +
* 2x3 header
 
* Select either RS-232 connector or FTDI connector
 
* Select either RS-232 connector or FTDI connector
 
* Silkscreen shows the appropriate side
 
* Silkscreen shows the appropriate side
Line 298: Line 313:
 
== Software ==
 
== Software ==
  
=== Demo ===
+
* FabGL ANSI Terminal
 +
** Using '''ANSI/VT Terminal for the ESP32''' application
 +
* Programmed using Arduino IDE
 +
 
 +
==== FabGL Libraries ====
  
<video type="youtube">Ww_pH_ZOLqU/video>
+
* [http://www.fabglib.org FabGL] - ESP32 Display Controller and Graphics Library
 +
* [https://github.com/fdivitto/fabgl FabGL Github repo]
  
 
=== FabGL GPIOs assignment ===
 
=== FabGL GPIOs assignment ===
  
* Summary - fabgl dev board rev2
+
* [https://github.com/fdivitto/FabGL/blob/master/fabgl%20GPIOs%20assignment.txt From here]
 
 
[https://github.com/fdivitto/FabGL/blob/master/fabgl%20GPIOs%20assignment.txt From here]
 
  
 
<pre>
 
<pre>
 
   VGA
 
   VGA
     HSync => 23
+
     HSync => IO23
     VSync => 15
+
     VSync => IO15
     R0    => 21
+
     R0    => IO21
     R1    => 22
+
     R1    => IO22
     G0    => 18
+
     G0    => IO18
     G1    => 19
+
     G1    => IO19
     B0    => 4
+
     B0    => IO4
     B1    => 5
+
     B1    => IO5
  
 
   Audio
 
   Audio
     AUD  => 25
+
     AUD  => IO25
  
 
   PS/2 - Keyboard
 
   PS/2 - Keyboard
     DAT  => 32
+
     DAT  => IO32
     CLK  => 33
+
     CLK  => IO33
  
 
   PS/2 - Mouse (Not used)
 
   PS/2 - Mouse (Not used)
     DAT  => 27
+
     DAT  => IO27
     CLK  => 26
+
     CLK  => IO26
  
   SDCard - HSPI
+
   UART - UART2
     MOSI  => 17 (12 on TTGO/WROVER)
+
     RX    => IO34
     MISO  => 16 (2 on TTGO, 35 WROVER)
+
     TX    => IO2
     CLK   => 14
+
     RTS   => IO13
     CS    => 13
+
     CTS  => I35
 +
</pre>
  
  UART - UART1 (USB - not used)
+
=== FabGL Arduino library ===
    RX    => 3
 
    TX    => 1
 
  
  UART - UART2
+
* Using FabGL library v1.0.9
    RX    => 34
 
    TX    => 2  (not usable on TTGO/WROVER with SDCard active)
 
</pre>
 
  
=== FabGL ===
+
[[File:FabGL_Library.PNG]]
  
* Using '''ANSI/VT Terminal for the ESP32''' application
+
<video type="youtube">8OTaPQlSTas</video>
* Other FabGL applications
 
** VGA
 
** SSD1306
 
** PS/2 Mouse and Keyboard Controller
 
** Graphics Library
 
**  Sound Engine
 
** Game Engine
 
  
==== FabGL Libraries ====
+
=== Using Latest FabGL builds (not necessary to run the ANSITerminal) ===
  
* [http://www.fabglib.org FabGL] - ESP32 Display Controller and Graphics Library
+
* Fabrizio does a nice job of keeping his Arduino libraries up to date but if you want a bleeding edge experience, you can download [https://github.com/fdivitto/fabgl his code from GitHub]. Note, he's in active development so things often change.
* [https://github.com/fdivitto/fabgl FabGL Github repo]
 
* [https://hackaday.com/2020/08/20/esp32-altair-emulator-gets-split-personality/ ESP32 ALTAIR EMULATOR GETS SPLIT PERSONALITY] - Hackaday page
 
** [https://github.com/wd5gnr/FabGL FabGL derived build]
 
  
<video type="youtube">pyoiQKK-eh0</video>
+
Here's how I did it
  
==== FabGL Arduino library ====
+
* Install drivers via Arduino from the Library Manager
 +
** These are not necessarily the latest files
 +
* Move the FabGL from the Arduino libraries file folder to the desktop
 +
* Copy the FabGL from the GitHub download to the Arduino files folder (where you removed the other folder)
 +
** Examples will now be the latest.
 +
* Compile/download/test the new files. You know it works if you now get sound from Space Invaders.
 +
* Save as where you would normally save your Arduino sketches.
  
Installing the released library
+
=== Arduino Programming ===
  
[[File:FabGL_Library.PNG]]
+
* [https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ Installing the ESP32 Board in Arduino IDE (Windows, Mac OS X, Linux)]
 +
* Select the board : '''DOIT ESP32 DEVKIT V1'''
  
==== Using Latest FabGL builds ====
+
[[file:FabGL_BoardMgr.PNG]]
  
* Fabrizio does a nice job of keeping his Arduino libraries up to date but if you want a bleeding edge experience, you can download [https://github.com/fdivitto/fabgl his code from GitHub]. Note, he's in active development so things often change.
+
* Select the application
 +
** File, examples, FabGL, examples, VGA, AnsiTerminal
  
Here's how I did it
+
[[file:FabGL_ANSITerminal.PNG]]
  
# Install drivers via Arduino from the Library Manager. These are not the latest files. Space Invaders should run but not have sound (as of now because it's the older version).
+
* You may have to '''remove the module from the card to program it'''
# Move the FabGL from the Arduino libraries file folder to the desktop.
+
** Pins on the card collide with download
# Copy the FabGL from the GitHub download to the Arduino files folder (where you removed the other folder).
+
* If you try to upload a new sketch to your ESP32 and you get this error message “A fatal error occurred: Failed to connect to ESP32: Timed out… Connecting…“. It means that your ESP32 is not in flashing/uploading mode
# Examples will now be the latest.
+
** You will need to press the boot button on the ESP32 module and release it after the Connecting message appears in the IDE
# Compile/download/test the new files. You know it works if you now get sound from Space Invaders.
 
# Save as where you would normally save your Arduino sketches.
 
  
=== Arduino Programming ===
+
[[file:WROOM_Module_BootButton.jpg]]
  
* [https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ Installing the ESP32 Board in Arduino IDE (Windows, Mac OS X, Linux)]
 
* Board : "DOIT ESP32 DEVKIT V1"
 
** Used Board : ESP32 Dev Module with Tools > Partition Scheme > Huge APP option to run VIC-20 (2022-09)
 
* DOIT module does not have PSRAM
 
** Can't run PC Emulator without PSRAM
 
* If you try to upload a new sketch to your ESP32 and you get this error message “A fatal error occurred: Failed to connect to ESP32: Timed out… Connecting…“. It means that your ESP32 is not in flashing/uploading mode.
 
 
* Press the “Upload” button in the Arduino IDE to upload your sketch
 
* Press the “Upload” button in the Arduino IDE to upload your sketch
 
* After you see the  “Connecting….” message in your Arduino IDE, release the finger from the “BOOT” button:
 
* After you see the  “Connecting….” message in your Arduino IDE, release the finger from the “BOOT” button:
Line 398: Line 402:
  
 
=== Other Builds ===
 
=== Other Builds ===
 +
 +
* FabGL Serial Terminal - TTL and RS232
 +
** Designed and built by FabGL author
 +
** [https://www.tindie.com/products/fabgl/fabgl-serial-terminal-ttl-and-rs232/ For sale on Tindie]
 +
 +
* [https://hackaday.com/2020/08/20/esp32-altair-emulator-gets-split-personality/ ESP32 ALTAIR EMULATOR GETS SPLIT PERSONALITY] - Hackaday page
 +
** [https://github.com/wd5gnr/FabGL FabGL derived build]
 +
 +
<video type="youtube">Ww_pH_ZOLqU</video>
  
 
<video type="youtube">LOhmlOyUw4w</video>
 
<video type="youtube">LOhmlOyUw4w</video>
 +
 +
<video type="youtube">pyoiQKK-eh0</video>
 +
 +
== Checkout ==
 +
 +
=== Rev 1 ===
 +
 +
* Check 5V power/ground short at J1
 +
* Loopback Tx>Rx ant RTS > CTS
 +
* Power up board via USB-B P6
 +
* Lights will illuminate on ESP module
 +
* Set baud rate (38,400)
 +
* Enable RTS/CTS
 +
* Type on keyboard, loops back
 +
* Card works
  
 
== Mechanicals ==
 
== Mechanicals ==
Line 407: Line 435:
 
== Assembly Sheet ==
 
== Assembly Sheet ==
  
* [https://land-boards.com/ESP32-TERM/ESP32-TERM_Rev2_ibom.html ESP32-VGA Interactive BOM]
+
* [https://land-boards.com/ESP32-TERM/ESP32-TERM_Rev1_ibom.html ESP32-VGA Interactive BOM]

Latest revision as of 11:28, 4 September 2024

ESP32-TERM P0648-800px.jpg

Features

  • ESP32 Module
    • UART interface
    • Keyboard/Mouse interface
    • Drives VGA video
    • Runs FabGL ANSI/VT Terminal firmware
  • "Typical" Serial Terminal Connectors
    • Connectors down long side of the card
    • VGA
    • PS-2 keyboard
    • PS-2 mouse
    • Audio jack
    • DE-9 Serial
    • 5V DC on USB-B
  • "Special" connectors
    • Connectors down the short side
    • Use with cards like SIMPLE-68008 which have FTDI connections
    • FTDI connector - 6-pin
    • 5V connector
  • Programmable LED on P14
  • 145x95mm size
  • (4) 4-40 mounting holes

ESP-32 Module

ESP32 MODULE-720PX.jpg

ESP-32 Module Pinout

ESP32-Pinout.jpg

"Chip" on the module

Esp32-pinout-chip-ESP-WROOM-32.png

ESP32 Pin Usage

ESP-32 TERM Pinout Rev1.PNG

Module Features

  • Architecture: Xtensa Dual-Core 32-bit LX6
  • CPU frequency: up to 240MHz
  • Total RAM available: 528KB (part of it reserved for system)
  • BootROM: 448KB
  • Internal FlashROM: none
  • External FlashROM: code and data, via SPI Flash; usual size 4MB
  • GPIO: 34 (GPIOs are multiplexed with other functions, including external FlashROM, UART, etc.)
  • UART: 3 RX/TX UART (no hardware handshaking), one TX-only UART
  • SPI: 4 SPI interfaces (one used for FlashROM)
  • I2C: 2 I2C (bitbang implementation available on any pins)
  • I2S: 2
  • ADC: 12-bit SAR ADC up to 18 channels
  • DAC: 2 8-bit DACs
  • RMT: 8 channels allowing accurate pulse transmit/receive
  • Programming: using BootROM bootloader from UART - due to external FlashROM and always-available BootROM bootloader, the ESP32 is not brickable

Connectors

P1 - VGA

  • DB-15HD connector
  • 64-colors (2:2:2)
  • ESP32 pins
  HSync => GPIO23
  VSync => GPIO15
  R0    => GPIO22
  R1    => GPIO21
  G0    => GPIO19
  G1    => GPIO18
  B0    => GPIO5
  B1    => GPIO4

ESP-32 TERM P1 VGA Rev1.PNG

VGA - Resistor Selection

  • ESP32 has a 3.3V driver which can drive more than 10 mA
  • Ideal case drive current
    • 0.7V (full scale VGA level) into 75 Ohms = 9.33 mA
    • 2/3 of the current or 6.16 mA comes from the lower value resistor (digital most significant bit)
    • 1/3 of the current or 3.08 mA comes from the higher value resistor (digital least significant bit)
  • R-2R values
  • Voltage steps are:

VGA Sim 2R Voltage.PNG

  • Current steps are:

VGA Sim 2R Current.PNG

Video DAC LTSpice Simulation

Summing Video Resistor DAC

  • Best values (1%)
    • 422, 845
    • 470, 820 are close/standard values
  • 0.7V into 75 Ohm VGA load
  • 3.3V drive
  • ESP32 has 40 mA drive
    • Uses 8 mA (max)
  • Output in 4 equal voltage steps

VGA Sim 2R Voltage.PNG

P2 - PS/2 Keyboard

ESP-32 TERM P2 P3 Rev1.PNG

  • Purple DIN 6 connector
  • 5V power to the keyboard
  • Shift 3.3V levels of the ESP32 to 5V of the keyboard/mouse
  • ESP32 pins
  KBDAT   => GPIO32
  KBCLK   => GPIO33

P3 - PS/2 Mouse

  • Green DIN 6 connector
  • 5V power to the keyboard
  • ESP32 pins
  MSEDAT   => GPIO27
  MSECLK   => GPIO26

P4 - Audio Out

ESP-32 TERM P4 Rev1.PNG

  • Mono output wired on both pins (ring/tip) of stereo 3.5mm Jack
  • Line level outputs
    • Requirs amplification
  • ESP32 pins
  AUD   => GPIO25

P5 - RS-232

ESP-32 TERM P5 Rev1.PNG

  • On-board TTL to RS-232 converter
    • Swings +/- 10V
  • DB-9 Female
  • DCE wiring

DCE - RS-232 Connections

  • This card has a DCE connector
    • The DCE (peripheral) has the female DB-9 connector
  • The DTE (Host CPU) has the male DB-9 connector

DTE DCE.png

  • ESP-32 pins
  RX2    => GPIO34
  TX2    => GPIO2
  RTS    => GPIO13
  CTS    => GPIO35

P6 - 5V Power (USB)

ESP-32 TERM P6 J1 Rev1.PNG

  • USB-B connector
  • Power only (no data)
  • Power can be sent out on J1 to external Processor card (like SIMPLE-68008 card)

J1 - 5V Power Header

ESP-32 TERM P6 J1 Rev1.PNG

  • 2z3 right angle header
  • Can be used for power in or out of the card
    • Only one power source can be used with the card

J2 - FTDI Power in/out Header

ESP-32 TERM j2 j3 Rev1.PNG

  • 1x2 right angle header
  • Don't install jumper if an external FTDI interface with 5V power out is used

J3 - FTDI Header

ESP-32 TERM j2 j3 Rev1.PNG

  • 1x6 right angle header
  • Most recent (2020-02) ANSI terminal uses pin 34 for Rx
  • Pinout
  1. GND
  2. RTS (from ESP32)
  3. 5V (Power in if J2 is installed)
  4. RX (to ESP32)
  5. TX (from ESP32)
  6. CTS (to ESP32)
  • ESP32 pins
  RX2    => GPIO34
  TX2    => GPIO2
  RTS    => GPIO13
  CTS    => I35

Connections to SIMPLE-68008 Card

ESP32-TERM SIMPLE-68008
Pin Signal Pin Signal
1 GND 1 GND
2 RTS (out) 2 CTS (in)
3 +5V 3 +5V
4 RX (in) 4 TX (out)
5 TX (out) 5 RX (in)
6 CTS (in) 6 RTS (out)


Connect to FTDI card

  • Set FTDI jumper to 5V (image below shows jumper set to 5V)

FTDI rot.jpg

J4 - Serial Source Selection Header

ESP-32 TERM J4 Rev1.PNG

  • 2x3 header
  • Select either RS-232 connector or FTDI connector
  • Silkscreen shows the appropriate side
    • Both left for TTL level signals (via FTDI connection)
    • Both right for RS-232 level signals

Software

  • FabGL ANSI Terminal
    • Using ANSI/VT Terminal for the ESP32 application
  • Programmed using Arduino IDE

FabGL Libraries

FabGL GPIOs assignment

  VGA
    HSync => IO23
    VSync => IO15
    R0    => IO21
    R1    => IO22
    G0    => IO18
    G1    => IO19
    B0    => IO4
    B1    => IO5

  Audio
    AUD   => IO25

  PS/2 - Keyboard
    DAT   => IO32
    CLK   => IO33

  PS/2 - Mouse (Not used)
    DAT   => IO27
    CLK   => IO26

  UART - UART2
    RX    => IO34
    TX    => IO2
    RTS   => IO13
    CTS   => I35

FabGL Arduino library

  • Using FabGL library v1.0.9

FabGL Library.PNG

Using Latest FabGL builds (not necessary to run the ANSITerminal)

  • Fabrizio does a nice job of keeping his Arduino libraries up to date but if you want a bleeding edge experience, you can download his code from GitHub. Note, he's in active development so things often change.

Here's how I did it

  • Install drivers via Arduino from the Library Manager
    • These are not necessarily the latest files
  • Move the FabGL from the Arduino libraries file folder to the desktop
  • Copy the FabGL from the GitHub download to the Arduino files folder (where you removed the other folder)
    • Examples will now be the latest.
  • Compile/download/test the new files. You know it works if you now get sound from Space Invaders.
  • Save as where you would normally save your Arduino sketches.

Arduino Programming

FabGL BoardMgr.PNG

  • Select the application
    • File, examples, FabGL, examples, VGA, AnsiTerminal

FabGL ANSITerminal.PNG

  • You may have to remove the module from the card to program it
    • Pins on the card collide with download
  • If you try to upload a new sketch to your ESP32 and you get this error message “A fatal error occurred: Failed to connect to ESP32: Timed out… Connecting…“. It means that your ESP32 is not in flashing/uploading mode
    • You will need to press the boot button on the ESP32 module and release it after the Connecting message appears in the IDE

WROOM Module BootButton.jpg

  • Press the “Upload” button in the Arduino IDE to upload your sketch
  • After you see the “Connecting….” message in your Arduino IDE, release the finger from the “BOOT” button:

Ardino ESP32.png

Other Builds

  • FabGL Serial Terminal - TTL and RS232

Checkout

Rev 1

  • Check 5V power/ground short at J1
  • Loopback Tx>Rx ant RTS > CTS
  • Power up board via USB-B P6
  • Lights will illuminate on ESP module
  • Set baud rate (38,400)
  • Enable RTS/CTS
  • Type on keyboard, loops back
  • Card works

Mechanicals

ESP32-TERM CAD REV1 bw.PNG

Assembly Sheet