Difference between pages "ESP32-VGA" and "Projects"

From Land Boards Wiki
(Difference between pages)
Jump to navigation Jump to search
 
 
Line 1: Line 1:
[[File:tindie-mediums.png|link=https://www.tindie.com/products/land_boards/esp32-vga-keyboard-mouse-card-pcb-only/]]
+
== GPS Projects ==
  
<video type="youtube">RuGWCMFNtms</video>
+
* [[USB-GPS-Hammond]] - The USB-GPS layed out to fit into a standard Hammond enclosure
 +
* [[USB-GPS]] - USB GPS tracker
  
[[File:P968-cropped-720pxV.jpg]]
+
== One-Wire ==
  
== Features ==
+
* [[One Wire Data Logger]]
  
* [[ESP32]] Module
+
== Microprocessors ==
* 6-bit VGA color
 
** 2:2:2 R:G:B
 
* 2 x PS-2 DIN connectors
 
** 5V mouse/keyboard
 
** 3.3V to 5V level shifters
 
*** Better than 5V keyboard with series resistors
 
** 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
 
  
=== ESP-32 Module ===
+
* [[STM32]]
  
* Uses the [https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/ ESP32 DevKit ESP32-WROOM GPIO Pinout]
+
== Raspberry Pi Cluster ==
* On board Blue LED = Arduino Pin 2
 
* There are various modules out there with different pinouts, but this card uses this one
 
  
[[File:ESP32_MODULE-720PX.jpg]]
+
* [[Raspberry Pi Cluster]]
  
=== ESP-32 Module Pinout ===
+
== Board and Arduino Code Applications ==
  
[[File:ESP32-Pinout.jpg]]
+
* 4WD
 
+
* [[ANSI Terminals]]
=== "Chip" on the module ===
+
* Arduino/AVR Programmers
 
+
* AVR Disassembly
[[File:esp32-pinout-chip-ESP-WROOM-32.png]]
+
* BrewStation
 
+
* Window Fan controller
==== ESP32 Pin Usage - Rev 1 ====
+
* GPS
 
+
* GPSDuino
[[File:ESP-32_VGA_Pinout.PNG]]
+
* Host side code to read USB-GPS
 
+
* MDI Project
==== ESP32 Pin Usage - Rev 2 ====
+
* Raspberry Pi Camera
 
+
* OBD II - Arduino car automation
[[File:ESP-32_VGA_Pinout_Rev2.PNG]]
+
* One Wire Datalogger
 
+
* Open Data Acquisition System
=== Module Features ===
+
* Raspberry Pi Cluster
 
+
* Raspberry Pi Case - NES style
* Architecture: Xtensa Dual-Core 32-bit LX6
+
* STM32F405_PyBoard_Clone
* CPU frequency: up to 240MHz
+
* [[Serial Terminal]]
* Total RAM available: 528KB (part of it reserved for system)
+
* Software Defined Radio (SDR)
* BootROM: 448KB
+
* STM32
* Internal FlashROM: none
+
* Theremin
* External FlashROM: code and data, via SPI Flash; usual size 4MB
+
* Wake Up - power line monitoring
* 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
 
 
 
== Video DAC LTSpice Simulation ==
 
 
 
* [https://github.com/land-boards/lb-boards/tree/master/ESP32/ESP32-VGA/Docs/Simulation Video DAC Simulation files]
 
* Video is 2:2:2 - R:G:B
 
 
 
=== Summing Resistor DAC ===
 
 
 
* 5% resistors are "good enough"
 
* 1V into 75 Ohm VGA load
 
* 3.3V drive
 
* ESP32 has [https://www.esp32.com/viewtopic.php?t=5840 40 mA drive]
 
** Uses 10 mA (max)
 
** R4 = 1.2 mA to -10 mA
 
** R3 = 1.1 mA to -5.3 mA
 
* Output in 4 steps
 
** 0V
 
** 0.3V
 
** 0.65V
 
** 0.96V
 
 
 
[[File:VGA_Sim_2R.PNG]]
 
 
 
== Headers (Rev 1 board) ==
 
 
 
=== H1 - 3.3V SRC select ===
 
 
 
[[File:H1_3p3V_Select.png]]
 
 
 
* 1-2 = Get 3.3V from ESP32 on-board regulator
 
* 2-3 = Get 3.3V from on-board regulator (Default)
 
 
 
=== H2 - 5V SRC Select Jumper (Rev 1 Board) ===
 
 
 
* 5V power options for the 5V to 3.3V regulator
 
 
 
[[File:H2_5V_Select.png]]
 
 
 
* 2x4 header
 
* Care must be taken to install the correct jumpers
 
* USB jumper sends out 5V when a USB cable is connected to the ESP32 module
 
 
 
==== Power from DC Jack ====
 
 
 
* '''Do not connect USB cable when the DC jack is used'''
 
* 1-2 = VUSB - Install - Power to ESP32
 
* 3-4 = DCIN - Install - Power comes from DC jack
 
* 5-6 = FTDI5V_1 - Do not install
 
* 7-8 = FTDI5V_2 - Do not install
 
 
 
==== Power from USB on ESP32 module ====
 
 
 
* 1-2 = VUSB - Install - 5V comes from USB on ESP32 module
 
* 3-4 = DCIN - Do not install
 
* 5-6 = FTDI5V_1 - Do not install
 
* 7-8 = FTDI5V_2 - Do not install
 
 
 
==== Power from FTDI #1 (Rev 1) ====
 
 
 
* '''Do not use this position with "most" FTDI cards since they will drive 5V on the Rx/Tx pins when the FTDI jumper is set to 5V'''
 
 
 
==== Power from FTDI #2 ====
 
 
 
* '''Do not use this position with "most" FTDI cards since they will drive 5V on the Rx/Tx pins when the FTDI jumper is set to 5V'''
 
 
 
== Connectors (Rev 1 board) ==
 
 
 
=== P2/P4 = GVS  - Rev 1 ===
 
 
 
* Ground/Voltage/Signal lines
 
 
 
# GPIO13
 
# GPIO14
 
# GPIO16
 
# GPIO17
 
# GPIO35
 
# GPIO34
 
# VN
 
# VP
 
 
 
=== P3 - VGA - Rev 1 ===
 
 
 
* ESP32 pins
 
 
 
* This table is incorrect - it has the Lower/Higher bits swapped
 
<pre>
 
  HSync => GPIO23
 
  VSync => GPIO15
 
  R0    => GPIO22
 
  R1    => GPIO21
 
  G0    => GPIO19
 
  G1    => GPIO18
 
  B0    => GPIO5
 
  B1    => GPIO4
 
</pre>
 
 
 
=== J2 - FTDI #1  - Rev 1 ===
 
 
 
# GND
 
# RTS (Not used)
 
# 5V (Power in if [[ESP32-VGA#H2_-_5V_SRC_Select_Jumper|H2 is configured]])
 
# RX (from card to External FTDI)
 
# TX (from External FTDI to card)
 
# CTS (Not used)
 
 
 
==== Connect to FTDI card - Rev 1 ====
 
 
 
* Set FTDI jumper to 3.3V (unlike picture below)
 
* Cross-over pins 4 and 5 when connecting to FTDI card (Rev 1 only)
 
 
 
[[File:FTDI_rot.jpg]]
 
 
 
=== J6 - FTDI #2 - Rev 1 ===
 
 
 
* Rev 1 board won't program or boot with FDTI #2 card attached
 
* This interface is in common with the USB-to-Serial interface on the ESP32 module
 
 
 
# GND
 
# RTS (Not used)
 
# 5V (Power in if [[ESP32-VGA#H2_-_5V_SRC_Select_Jumper|H2 is configured]])
 
# TX2 (from card to External FTDI)
 
# RX2 (from External FTDI to card)
 
# CTS (Not used)
 
 
 
* Requires a cross-over of the Transmit and Receive pins if directly connecting to an FTDI part
 
* Earlier versions of the FabGL schematics used pin 12 for RX
 
* Most recent (2020-02) ANSI terminal uses pin 34
 
* Board won't boot with an FTDI interface attached and USB cable attached
 
** This is an issue for the ANSI Terminal sketch
 
* Original pins were (Rev 1 matches original)
 
 
 
<pre>
 
  RX2    => 12
 
  TX2    => 2
 
</pre>
 
 
 
Here's why using pin 12 is a bad idea:
 
<pre>
 
GPIO12 (MTDI) is used as a bootstrapping pin to select output voltage of an internal regulator which powers the flash chip (VDD_SDIO). This pin has an internal pulldown so if left unconnected it will read low at reset (selecting default 3.3V operation).</pre>
 
 
 
==== UART2 Rework ====
 
 
 
* The easiest way to do this is to wire the FTDI to GPIO34 pin instead of pin J6-5
 
** Not pretty, but it does work fine
 
* This is what is needed to permanently rework the board
 
* Rework is only needed to run "stock" FabGL code that uses the UART2 port on the ESP32 (like the ansi terminal)
 
* Cut trace/adding jumper to rev 1 board
 
** Route to GPIO34
 
* Cut as follows (cut in white)
 
 
 
[[File:GPIO12_Cut.PNG]]
 
 
 
* Add wire as follows (add wire in white)
 
 
 
[[File:GPIO34_Add.PNG]]
 
 
 
* [2020-01-20] Tested rework on card and it worked
 
 
 
==== Connect to FTDI card - Rev 1 ====
 
 
 
* Set FTDI jumper to 3.3V
 
* Cross-over pins 4 and 5 when connecting to FTDI card (Rev 1 only)
 
 
 
[[File:FTDI_rot.jpg]]
 
 
 
=== J3 - PS/2 Keyboard - Rev 1 ===
 
 
 
* Purple DIN 6 connector
 
* ESP32 pins
 
 
 
<pre>
 
  DAT  => 32
 
  CLK  => 33
 
</pre>
 
 
 
=== J4 - PS/2 Mouse - Rev 1 ===
 
 
 
* DIN 6 connector
 
* ESP32 pins
 
 
 
<pre>
 
  DAT  => 27
 
  CLK  => 26
 
</pre>
 
 
 
=== J5 - Audio Out - RCA Jack - Rev 1 ===
 
 
 
* ESP32 pins
 
 
 
<pre>
 
  AUD  => 25
 
</pre>
 
 
 
=== J15 - 5mm Terminal Block - Rev 1 ===
 
 
 
* 5V
 
* Gnd
 
 
 
== Headers (Rev 2 board) ==
 
 
 
* The Rev 2 board changes around headers and connectors
 
 
 
=== H1 - 5V - Rev 2 ===
 
 
 
* The ESP32-VGA can be powered from either the DC Jack or ESP32 USB power
 
* '''Warning: Do not power from 5V Power jack and connect USB cable to the ESP32 module at the same time'''
 
** The ESP32 module has blocking diode to protect the module
 
*** If the 5V DC jack has a power supply attached with lower voltage it could result in the supplied being shorted between the USB 5V and the DC power jack
 
*** This is not an issue if the DC power jack is disconnected
 
* This could be used for an external power switch
 
 
 
=== H2/H3 - GVS - Rev 2 ===
 
 
 
* 3x4 header
 
* Ground/Voltage/Signal lines
 
 
 
# GPIO35
 
# GPIO12
 
# VN/I39
 
# VP/I36
 
 
 
== Connectors (Rev 2 board) ==
 
 
 
=== P1 - PS/2 Mouse - Rev 2 ===
 
 
 
* DIN 6 connector
 
* ESP32 pins
 
 
 
<pre>
 
  DAT  => GPIO27
 
  CLK  => GPIO26
 
</pre>
 
 
 
=== P2 - PS/2 Keyboard - Rev 2 ===
 
 
 
* Purple DIN 6 connector
 
* ESP32 pins
 
 
 
<pre>
 
  DAT  => GPIO32
 
  CLK  => GPIO33
 
</pre>
 
 
 
=== P3 - VGA - Rev 2 ===
 
 
 
* ESP32 pins
 
* This table is incorrect - it has the video bits reversed
 
 
 
<pre>
 
  HSync => GPIO23
 
  VSync => GPIO15
 
  R0    => GPIO22
 
  R1    => GPIO21
 
  G0    => GPIO19
 
  G1    => GPIO18
 
  B0    => GPIO5
 
  B1    => GPIO4
 
</pre>
 
 
 
=== P4 - Audio Out - RCA Jack - Rev 2 ===
 
 
 
* ESP32 pins
 
 
 
<pre>
 
  AUD  => GPIO25
 
</pre>
 
 
 
=== J1 - 5V Power - Rev 2 ===
 
 
 
* Center +5V
 
 
 
=== J2 - FTDI #1  - Rev 2 ===
 
 
 
* This interface is in common with the USB-to-Serial interface on the ESP32 module
 
* Pinout
 
 
 
# GND
 
# RTS (Not used)
 
# 5V (Not used)
 
# RX (from card to External FTDI)
 
# TX (from External FTDI to card)
 
# CTS (Not used)
 
 
 
<pre>
 
  RX    => GPIO3
 
  TX    => GPIO1
 
</pre>
 
 
 
==== Connect to FTDI card - Rev 2 ====
 
 
 
* Set FTDI jumper to 3.3V
 
 
 
[[File:FTDI_rot.jpg]]
 
 
 
=== J3 - FTDI #2 - Rev 2 ===
 
 
 
* Most recent (2020-02) ANSI terminal uses pin 34 for Rx
 
* Pinout
 
 
 
# GND
 
# RTS (Not used)
 
# 5V (Power in if [[ESP32-VGA#H2_-_5V_SRC_Select_Jumper|H2 is configured]])
 
# RX (from External FTDI to ESP32 card)
 
# TX (from ESP32 card to External FTDI)
 
# CTS (Not used)
 
 
 
<pre>
 
  RX2    => GPIO34
 
  TX2    => GPIO2
 
</pre>
 
 
 
==== Connect to FTDI card - Rev 2  ====
 
 
 
* Set FTDI jumper to 3.3V (image below shows jumper set to 5V which is wrong)
 
 
 
[[File:FTDI_rot.jpg]]
 
 
 
=== J4 - SD Card - Rev 2 ===
 
 
 
* Brought to GVS header pins (Rev 1)
 
* Brought to SD Card (Rev 2)
 
 
 
<pre>
 
  MOSI  => GPIO17
 
  MISO  => GPIO16
 
  CLK  => GPIO14
 
  CS    => GPIO13
 
</pre>
 
 
 
== 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
 
** Ideal resistor values are 417.9 ohms and 835.7 ohms
 
** [http://www.brannonelectronics.com/images/STANDARD%20VALUE.pdf Standard value 1% resistors]
 
** 1% standard values are [https://www.mouser.com/ProductDetail/652-CR0805FX-4220ELF 422 (Mouser)], [https://www.mouser.com/ProductDetail/603-RC0805FR-07845RL 845 (Mouser)] Ohms
 
*** Get closest values
 
*** 0V, 0.228V, 0.460V, 0.693V
 
* Voltage steps are:
 
 
 
[[File:VGA_Sim_2R_Voltage.PNG]]
 
 
 
* Current steps are:
 
 
 
[[File:VGA_Sim_2R_Current.PNG]]
 
 
 
== FabGL GPIOs assignment summary - fabgl dev board rev2  ==
 
 
 
[https://github.com/fdivitto/FabGL/blob/master/fabgl%20GPIOs%20assignment.txt From here]
 
 
 
 
 
=== I2C (not usable with VGA) ===
 
 
 
<pre>
 
  SDA  => GPIO4  (conflicts with VGA B1)
 
  SCL  => GPIO15 (conflicts with VGA VSync)
 
</pre>
 
 
 
=== SPI Display - VSPI (not usable with VGA) ===
 
 
 
<pre>
 
  CLK  => GPIO18 (conflicts with VGA G1)
 
  MISO  => GPIO19 (conflicts with VGA G0)
 
  MOSI  => GPIO23 (conflicts with VGA HSync)
 
  CS    => GPIO5  (conflicts with VGA B0)
 
  D/C  => GPIO22 (conflicts with VGA R0)
 
  RESET => GPIO21 (conflicts with VGA R1)
 
</pre>
 
 
 
== Software ==
 
 
 
=== Arduino Programming ===
 
 
 
* Board : "DOIT ESP32 DEVKIT V1"
 
 
 
[[File:Ardino_ESP32.png]]
 
=== FabGL ===
 
 
 
* Display Controller features/applications
 
** VGA
 
** SSD1306
 
** PS/2 Mouse and Keyboard Controller
 
** Graphics Library
 
**  Sound Engine
 
** Game Engine
 
** ANSI/VT Terminal for the ESP32
 
 
 
==== FabGL Libraries ====
 
 
 
* [http://www.fabglib.org FabGL] - ESP32 Display Controller and Graphics Library
 
* [https://github.com/fdivitto/fabgl FabGL Github repo]
 
 
 
==== FabGL Arduino library ====
 
 
 
Installing the released library
 
 
 
[[File:FabGL_Library.PNG]]
 
 
 
==== Using Latest FabGL builds ====
 
 
 
Here's how I did it
 
 
 
# 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).
 
# 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.
 
 
 
=== MicroPython ===
 
 
 
* [https://micropython.org MicroPython Homepage]
 
** [http://docs.micropython.org/en/latest/esp32/quickref.html Quick reference for the ESP32]
 
** [http://docs.micropython.org/en/latest/esp32/general.html General information about the ESP32 port]
 
** [http://docs.micropython.org/en/latest/esp32/tutorial/intro.html Getting started with MicroPython on the ESP32]
 
* [https://github.com/land-boards/lb-Python-Code/tree/master/MicroPython/ESP32 GitHub repo] (MicroPython)
 
** [https://github.com/land-boards/lb-Python-Code/tree/master/MicroPython/ESP32/examples Examples] (MicroPython)
 
** [https://github.com/land-boards/lb-Python-Code/tree/master/MicroPython/ESP32/libraries Libraries] (MicroPython)
 
 
 
=== ESP-IDF ===
 
 
 
* [https://docs.espressif.com/projects/esp-idf/en/latest/index.html ESP-IDF Programming Guide]
 
 
 
=== Operating Systems ===
 
 
 
* [https://www.freertos.org FreeRTOS]
 
* [https://docs.zerynth.com/latest/official/board.zerynth.doit_esp32/docs/index.html ESP32 DevKit v1]
 
* [https://github.com/Nicholas3388/LuaNode LuaNode]
 
* [https://github.com/espressif/arduino-esp32/issues/544 ESP32 DEVKITV1 module schematics] (also helpful discussion)
 
 
 
== Schematic ==
 
 
 
* [http://land-boards.com/ESP32-VGA/ESP-32_VGA_Rev1_Schematic.pdf ESP32 VGA Rev 1 Schematic]
 
* [http://land-boards.com/ESP32-VGA/ESP32-VGA_Rev2_Schematic.pdf ESP32 VGA Rev 2 Schematic]
 
* [https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf ESP32-WROOM-32 Datasheet]
 
* [https://github.com/land-boards/lb-boards/blob/master/ESP32/ESP32-Hub/Parts_/SchematicsforESP32.pdf ESP32 Module schematic]
 
 
 
== Rev 2 Changes ==
 
 
 
[[File:ESP32-VGA_CAD_REV2-bw.PNG]]
 
 
 
* '''Rev 1 board won't program or boot with FDTI #2 card attached'''
 
** Earlier FabGL had GPIO12 instead of GPIO34
 
** Move FTDI Rx line (GPIO12 to GPIO34)
 
* Swap FTDI pins 4 and 5 (FTDI connectors)
 
** Allow direct connect to FTDI card (no swap)
 
* Add SD Card connector
 
** MISO => GPIO 16
 
** MOSI => GPIO 17
 
** CLK  => GPIO 14
 
** CS  => GPIO 13
 
** Remove I/O pins from GVS connector
 
* Replace H1/H2 with 1x2 to select/remove DC jack power\
 
* Remove Polysilicone fuse
 
* Change ESP32 board name silkscreen
 
* Add SD card connector
 
 
 
== Prototype ==
 
 
 
* [[ESP32-I2C-HUB]]
 
* [[VGAX49]]
 
* [[PS2X49]]
 
** Purple = Keyboard
 
** Green = Mouse
 
* [[CARRIER95TO49MM|95mm to 49mm Adapter card]]
 
* 6-32/4-40 Standoffs, screws, nuts
 
* Cabling
 
 
 
[[File:FabGL_P905-512pxV.jpg]]
 
 
 
== Assembly Sheet ==
 
 
 
* [[ESP32-VGA Rev 2 Assembly Sheet]]
 
* [[ESP-32-VGA Rev 1 Assembly Sheet]]
 

Revision as of 17:08, 14 April 2020

GPS Projects

One-Wire

Microprocessors

Raspberry Pi Cluster

Board and Arduino Code Applications

  • 4WD
  • ANSI Terminals
  • Arduino/AVR Programmers
  • AVR Disassembly
  • BrewStation
  • Window Fan controller
  • GPS
  • GPSDuino
  • Host side code to read USB-GPS
  • MDI Project
  • Raspberry Pi Camera
  • OBD II - Arduino car automation
  • One Wire Datalogger
  • Open Data Acquisition System
  • Raspberry Pi Cluster
  • Raspberry Pi Case - NES style
  • STM32F405_PyBoard_Clone
  • Serial Terminal
  • Software Defined Radio (SDR)
  • STM32
  • Theremin
  • Wake Up - power line monitoring