Custom ESP32 Development Board


Ideas

Introduction ¶

The ESP32 is a low cost but highly powerful IoT microcontroller. It features Bluetooth, SPI, I2C, multiple analog inputs, and 34 GPIO pins. All of that, for about 2 dollars on AliExpress. There is a problem though, not with the chip, but more so with many of the board designs for the ESP32. When the board is put into a breadboard, only half of the pins are accessible.

Ideas

There are other board designs that are less wide which do allow for both sides of the microcontroller to be accessed. That being said, I still decided to try to design my own ESP32 development board since it would be good practice for making other microcontroller based board designs.

Design ¶

The first step of designing this development board was to look up the schematics for the Devkit v1 board. The main integrated circuits on the board are the ESP32-S (main microcontroller), the CP2102 (USB Driver), and the AMS1117 (3.3v Regulator).

Ideas

EasyEDA Schematic

I changed a few of the components, such as swapping out the flash and reset buttons for through hole pushbuttons and changing the LEDs to 3mm through hole LEDs. Other than that, most of the circuitry is the same as the Devkit v1. The board design was of course the part where the most significant changes were made. I concentrated all of the circuitry on the left side of the circuit board with 2 rows of GPIO pins sticking out.

Ideas

Top Side of Board

Ideas

Bottom Side of Board

Programming ¶

I designed this board 2 years ago and got it assembled about 1 year ago. And since then it has been what I use for programming for the ESP32 chip. I currently have my ESP32 set up with micropython. For installing and running micropython I just follow the documentation as it is stated https://docs.micropython.org/en/latest/esp32/tutorial/intro.html#esp32-intro.

The “hello world” script for using hardware with microcontrollers is to blink the built in LED. Here’s what the script looks like for the ESP32.

# Blinking an LED on the ESP32

from machine import Pin
led = Pin(2, Pin.OUT)

while True:
    led.on()
    sleep(.25)
    led.off()
    sleep(.25)

A more literal hello world using hardware with the ESP32 would be to add an OLED display and print hello world to the screen. Just use the ssd1306 library for micropython devices and use the oled.text() function to display text to the screen.

# SSD1306 Demo 

import ssd1306
from machine import Pin, SoftI2C

i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

oled.text('hello world', 0, 0)
oled.show()

Ideas

In short, the custom ESP32 I built, functions the same as any other ESP32 board, only with the added benefit of being to access more pins easily when plugging it into a breadboard.