View All Posts
Want to keep up to date with the latest posts and videos? Subscribe to the newsletter
HELP SUPPORT MY WORK: If you're feeling flush then please stop by Patreon Or you can make a one off donation via ko-fi

This post is also available as a video:

I’ve been designing an ESP32-based PCB recently, and I got to thinking - what’s the minimum you can get away with and still have a working module?

The ESP32 S3 WROOM module is particularly interesting. It only needs a few components to make a complete fully functioning dev board.

What’s nice about the S3 modules is that you don’t need to have a USB-UART bridge chip - you can connect it directly to the USB data lines.

But just how minimal can we make things and still have something that works?

Let’s have a look at the recommended schematic and see what we can chop out and what is required.


Something we definitely can’t do without is a ground connection, there are annoyingly two ground pins. We could probably just connect one, but I’ll hook up both to begin with.

We’re also going to need 3.3 volts. Unfortunately, for this, we will need an external component - a voltage regulator - we get 5V out from the USB connection and if we use that directly it will fry our ESP32 (the ESP32 can take anything between 3.0 and 3.6 volts).

I’ve got a handy module that has an AMS117 3.3V regulator along with the required decoupling capacitors. So I’m just going to use that initially.

If we wanted to go even more minimal we could just drop the voltage over a few diodes to get it down to a safe level. Three diodes in series would get us down to around 3.2 volts which would be acceptable for an ESP32.

If it was a low-power device we could get away with a zener diode or even a resistor divider.

But the ESP32 can spike up to a lot of power - especially when you are using WiFi or Bluetooth.

Given that we’ve got some capacitors on the regulator board and we’re going to play fast and loose with this proof of concept, I’m crossing out the decoupling caps from the schematic.

For the enable pin we can just connect it directly to 3.3v. So we can ignore this little RC circuit. The recommended values are 10K and 1uF and it’s intended to stop the ESP32 from running until the supply voltage is stabilised.

Since we’re connecting directly to 3.3V we can also do away with the push button for resetting the device.

We can drop the crystal and capacitors - this is only required if you want to use an external oscillator for keeping accurate time in deep sleep.

The last thing we need is the data lines for the USB.

On the schematic there are a couple of zero-ohm resistors - so we can just ignore those.

There are also a couple of capacitors - these are optional, they can help with very noisy signals, but they aren’t required. So we’ll get rid of them as well.

IO19 goes to the D- pin and IO20 goes to the D+ pin.

If you’re using a brand new fresh module, you may need to connect IO0 to ground to manually put the ESP32 into download mode.

My experience is that you only need to do this the first time you program the module. However, your mileage may vary - it does seem to be quite fussy and the internet is full of people complaining that they can’t program their modules.

We can cross out this connection from the exposed pad to the ground - this is completely optional. It can help with heat dissipation from the module, but it’s not required.

I invariably get people commenting about how I’ve forgotten to solder this pad. So here it is direct from the datasheet:

Exposed Pad

And finally, we can cross out the UART connector - we’ll get our serial output over the USB connection. And we don’t need to use JTAG debugging, so that can go as well.

We’ve ended up crossing out a lot of the schematic.

What's left?

If we just draw what’s left we end up with this considerably simpler schematic.

Minimal Schematic

I’ve soldered some jumper wires to an ESP32-S3 module and hooked it up to a USB breakout board.

And… it’s flashing the LED! I was able to upload the blink sketch and it’s working perfectly.


The serial port is also working - though I did need to add these preprocessor definitions to get that working (I’m using PlatformIO - I’m assuming when using the ArduinoIDE this is not needed):

build_flags =

Now, at this point, most sensible people would call it a day - we’ve proved a point, we’ve shown you don’t need many components - very cool.

But not me, I got to thinking - there’s a surprising amount of space on the back of the module - we could probably fit the USB socket and the voltage regulator on it.

Lots of space

The circuit is not very complicated, how hard can it be? It’s just a few wires, surely we can hook everything up with small bits of wire and glue it all in place.

How hard can it be?

I covered up the EPAD with Kapton tape so nothing would get shorted and tried supergluing the components in place.

This kind of worked, but I struggled with the USB connector - firstly it just would not stick. And secondly getting in to solder the tiny pins just proved to be impossible for me.

So I decided to swallow some pride and glued a USB breakout board in its place. This was a lot easier to solder the wires onto and it’s still pretty compact.

For the piece de resistance I added an LED to one of the more accessible pins.

It’s not pretty - the wires could be made much shorter and it’s a bit of a mess of solder and flux.

What a mess

But, it works! We can run our little blink sketch - amazing!

Blink Version 2

Would I do this again - probably not - but it was fun to try and see what was possible. There are also mini versions of the ESP32-S3 module. Not sure I’m quite up for that challenge though!


Related Posts

The PCBs are in production - what have I messed up? - After some stress and trepidation, I finally took the plunge and sent my PCB design off for manufacturing. My design centers around building a large seven-segment clock with LED filaments. Jumping hurdles such as voltages, pin usage, and limiting the load on my power supply, I've settled on the ESP32 as the system's heart and come up with a final circuit design. While doing this, I've quickly realized I could improve my layout and fixed a small mistake. Also, I've prepared for either types of LED filaments - the high-voltage ones or the larger, 3v ones. However, I did bungle up a couple of things on the enable line of the shift registers and board layout. But hey, this is a learning curve, right? Can't wait to get the boards and see what other exciting errors surface!
Self Organising WS2811 LEDs - I've successfully used addressable WS2811 LED strings and an ESP-CAM board to create an adjustable lighting system. The best part is that the image processing code can be duplicated in JavaScript which allows you to use a plain dev board to drive the LEDs instead of needing a camera on your ESP32 board. If you want to replicate this project, you'll need your own ESP32 dev board and some addressable LEDs. After figuring out the location of each LED in 2D space, it's easy to map from each LED's x and y location onto a pattern you want to show on the frame buffer. Desiring to keep it accessible, I've posted detailed instructions and my sample code on GitHub, making sure anyone with basic knowledge can undertake this fun technological DIY project!
ESP32 Audio Input - MAX4466, MAX9814, SPH0645LM4H, INMP441 - In this blog post, I've delved deep into the world of audio input for ESP32, exploring all the different options for getting analogue audio data into the device. After discussing the use of the built-in Analogue to Digital Converts (ADCs), I2S to read ADCs with DMA, and using I2S to read directly from compatible peripherals, I go on to present hands-on experiments with four different microphones (MAX4466, MAX9814, SPH0645, INPM441). This comprehensive look at getting audio into the ESP32 should be a valuable resource for anyone hungry for a deep-dive into ESP32's audio capabilities, complete with YouTube videos for an even more detailed look!
No Power? No Problem! A Wireless Pi Doom Machine - In my latest wireless charging experiments, I got my hands on a set of wireless charging PCBs and dove into testing different voltage inputs and their efficiency levels. It was interesting to realise that the 5V input managed to provide a decent efficiency of 73%, while 12V input struggled and heated the receiver board excessively. With the perks and limits of this setup explored, I took a whirl at creating a wireless Pi Doom machine. It worked like a charm! However, I quickly noticed the need to split charging and boost board into two different modules - a project to look forward to. Half the fun is getting there! Check out the video [here]( for more detail on the project.
Decoding AVI Files for Fun and... - After some quality time with my ESP32 microcontroller, I've developed a version of the TinyTV and learned a lot about video and audio streaming along the way. Using Python and Wi-Fi technology, I was able to set up the streaming server with audio data, video frames, and metadata. I've can also explored the picture quality challenges of uncompressed image data and learned about MJPEG frames. Together with JPEGDEC for depth decoding, I've managed to effectively use ESP32's dual cores to achieve an inspiring 28 frames per second. Discussing audio sync, storage options and the intricacies of container file formats for video storage led me to the AVI format. The process of reading and processing AVI file headers and the listing subtype 'movi' allowed me to make significant headway in my project. All in all, I'm pretty chuffed with my portable battery powered video player. You can check out my code over on Github!

Related Videos

Minimalist Microcontroller: Building a Bare-Bones Dev Board - Dive into the fascinating process of building a minimal ESP32-based dev board, beginning with the ESP32-S3 Wroom module, and eliminating unnecessary components. Through soldering, wire connecting, and voltage testing, we reach a product that's compact, efficient and fully functional.
Happiness is a Working Blink Sketch - ESP32-S3 PCBs Are Here! - In this video, I explore the functions of my newly arrived little boards - essentially a PCB that an esp32 S3 room module can be connected to. I put the board's voltage regulator, battery charger, and a 3 watt class D amplifier to the test, and damn, they work perfectly! I even use breadboards, connecting them together to facilitate a wider workspace. I gave the pcbs a spin, conducting sanity checks to ensure full functionality. With a successful battery charge and impressive voltage measurements, my PCB's are up to the challenge. I also dabble in some circuit jargon, explaining schematics, amplifiers, battery chargers and a clever mosfet approach. To top it off, I solder on an ESP32 module and prove that yes, it actually works. Stay tuned for a following video where we'll work with a speaker and display!
Lots of Stuff - And a NEW PCB! It's a rare mailbag video. - In today's episode, I'm unboxing some goodies from PCB way - my super tiny esp32 breakout boards, which I'm planning to use to recreate a mini TV complete with speakers and a display. Also received some convenient adapter boards for easier testing. Excited to explore a new Arduino Nano esp32 based on a different, tinier module, and contrasting it with other products like the Tiny Pico. Also up for testing is a new mini wear electronic load compared to my old one, and an ATX power adapter for more USB ports. I'll be testing power banks, playing with inexpensive yellow displays and nunchucks for fun gaming projects, and testing out an RGB bead curtain with hackable possibilities. Also, under my ongoing experiments is a Raspberry Pi zero, turning into a 'Doom' playing device with added sound and game controllers. Finally, an air quality measuring device for detecting air particles, CO2 levels, humidity, temperature and other parameters is up for exploration as well. A whole array of fun projects queued up, so stay tuned!
Arduino Nano ESP32 - It's nice - But probably not for me. - In this video, I took a deep dive into the Arduino Nano ESP32 and compared it with other available boards in the market. Despite its seemingly high cost as compared to the options on AliExpress, its overall quality, fantastic documentation, and the fact that it fits neatly into the Arduino ecosystem makes it a good buy, especially if you've already invested in the Arduino Nano and its shields. The board has a few interesting peculiarity, including the use of a NORA-W106 module, a switch mode step-down converter for power, and an RGB LED. However, I was disappointed to find out it doesn't come with built-in battery charging. The pin labelling and remapping could definitely cause some confusion, especially if you're transitioning from other ESP32 boards. It's a fairly decent ESP32-S3 board if that's what you're after. But given a choice, I'm keener on the Unexpected Maker boards or the cheap boards on AliExpress.
Custom ESP32 PCB Soldering - Watch the process of soldering and testing a custom ESP32 circuit board for a Moon Lamp project, featuring various components like a linear regulator, output drivers, and indicator LEDs.
HELP SUPPORT MY WORK: If you're feeling flush then please stop by Patreon Or you can make a one off donation via ko-fi
Want to keep up to date with the latest posts and videos? Subscribe to the newsletter
Blog Logo

Chris Greening


> Image


A collection of slightly mad projects, instructive/educational videos, and generally interesting stuff. Building projects around the Arduino and ESP32 platforms - we'll be exploring AI, Computer Vision, Audio, 3D Printing - it may get a bit eclectic...

View All Posts