31 Comments
User's avatar
Andrew Read's avatar

Are you moving subscriber content from Substack to Shopify? The links now return a 404 error.

Expand full comment
RoboticWorx's avatar

Hello! Yes, I’m currently doing some work on the site. I will have everything linked and up and running as soon as possible!

Expand full comment
Roland's avatar

I am a software developer and currently working on a prototype (a NFC based relay). This post is awesome! Eventually I would like to create my own board, because soldering with perf boards always seems to get messy.

In you assembly video you show how the soldering paste is becoming liquid, creating a beautiful board (so satisfying to watch), but what tool did you use for this? I know this can be done with reform ovens, but they are expensive, especially when creating only a few boards. What would you recommend? I think you used some sort of heating bed? Could you share what device you used?

If you don't have this, what are the best options? Using soldering paste, placing the components one by one, and then use a heat gun? (Won't the parts be blown away?). Or maybe soldering with a normal soldering iron? That wouldn't be possible for the ESP32's anyways, right?

Expand full comment
RoboticWorx's avatar

Hi Roland,

So glad you like the tutorial! Custom PCBs are always great, especially should you need to add more components where perf board wouldn’t be feasible.

To answer your question, I’m using a hotplate which I just got as a generic off of Amazon. I believe the exact one I used is linked in my latest project BOM. These are great because they’re pretty cheap compared to ovens but also work much better than heat guns.

Best,

Justin

Expand full comment
William's avatar

FYI, on the S3 board, you have C10 twice. I'm assuming that was not intentional?

Expand full comment
RoboticWorx's avatar

Hi William,

I only see C10 once as a debounce on the RST trace. Where do you see the second?

Best,

Justin

Expand full comment
William's avatar

On the PCB Editor. C10 is next to R11 (above SW2) and C10 is also between R12 and C6 (next to D6).

Expand full comment
RoboticWorx's avatar

Hi William,

You're correct! I'm unsure how that happened or how I didn't catch it. It seems to be a duplicate 100nF debounce, perhaps leftover from updating between the schematic and board. It will not cause any performance issues if placed but I will make a note of it regardless.

Thanks for letting me know!

Best,

Justin

Expand full comment
William's avatar

No worries. I'm placing the components now. I'll let you know if I run into any problems once I solder and test.

Expand full comment
William's avatar

Alright, everything is soldered up. I plugged-in the USB and the PWR diode lights up. However, I'm unable to flash it.

I do not see a serial port become available in Arduino or PlatformIO. Tried the BOOT+RST sequence and nothing.

I've tested that I am getting power to the pinouts for the LCD screen, and of course the PWR diode.

Do you have any other troubleshooting recommendations?

Here's a picture of the assembled board powered on and off: https://www.dropbox.com/scl/fi/x5rffmrprgjnphwr8c1jg/IMG_5188.jpg?rlkey=jnpx8pq7z44wrw2kj27yjybi1&dl=0

https://www.dropbox.com/scl/fi/dx6m77gfzwrbcl5iu0hdq/IMG_5190.jpg?rlkey=ejrfdfpd4twlinjad0p8j2e62&dl=0

Expand full comment
RoboticWorx's avatar

Hi William,

I see some solder blotches on your USB-C connector. These will incorrectly connect your USB D+/D- lines. (This happens to me all the time.) I would recommend de-soldering the USB connector with a hot air gun or similar and then pressing it back in place. You can also go over then with a soldering iron or some de-soldering wick to try and clean it up. After that, try uploading again (make sure to also put the PCB in bootloader mode by holding BOOT > pressing RST > releasing BOOT).

Best,

Justin

Expand full comment
William's avatar

I see the dev kit schematic for the two ESP32s are spec'd as follows:

Two 22pF capacitors on the D-/D+ lines on the ESP32-C3.

One 10uF capacitor between GND and VBUS with no capacitors on the D-/D+ lines on ESP32-S3.

Any idea why it's done this way? Maybe a difference internals between the two modules?

Expand full comment
RoboticWorx's avatar

Hi William,

Yes, I believe it’s just a difference between how USB works (internals) on the S3 and C3. The C3 probably just needed some more bus capacitance. The 10uF is just to stabilize the USB power supply.

Hope this helps!

Best,

Justin

Expand full comment
William's avatar

Hi, on the ESP32-S3 version, I noticed that you did not have D3 & D4 (ESD Protection Diodes) connected to GND. D2 is connected to GND.

Also, C1 and C2 Capacitors are not connected to GND.

All other components that have a GND connection appear to be connected to GND through a via.

I just wanted to know if not connecting the two diodes and two capacitors to GND was intentional?

Expand full comment
RoboticWorx's avatar

Hi William,

D3 and D4 are connected to ground also, just not through a via. The ground plane on the top layer bridges to them which then connects to the bottom ground plane though other vias on the top plane. The same is with C1 and C2.

It can be a bit hard to spot, but you should be able to see a few copper bridges to each pad if you zoom in. In future designs, it would be best to give each it's own via to provide better layer connection but there's not much difference here.

I hope this clears it up.

Best,

Justin

Expand full comment
William's avatar

I do see it now. Is that something KiCad is doing automatically when you fill all zones?

Expand full comment
RoboticWorx's avatar

It is! Quite useful for making sure all the pads are well grounded.

Best,

Justin

Expand full comment
Lorenz's avatar

Thank you for this amazing tutorial. One question regarding the pull-ups you added to Boot and EN/RST. There seems to be a pull-up on EN in the ESP32 schematic and another one in the buttons schematic. Do I really need both?

Similarly, there are two pairs of decoupling capacitors, one in the ESP32 schematic and one in the voltage regulator schematic (on the 3V3 side). Are both needed?

And secondly, can I leave away the reset button and just push the boot button and after that connect USB power to go into boot mode?

Expand full comment
RoboticWorx's avatar

Hi Lorenz,

I’m so glad you liked it! To answer your question, you do not need both. I mistakenly added an extra 10k that is unnecessary. Just one 10k and a 10k on the BOOT should be fine! Holding boot from power up may work but the datasheet always specified the boot sequence so I would probably recommend that.

Best,

Justin

Expand full comment
Lorenz's avatar

Thank you so much for the fast reply. Subscribing already paid out. ;-)

Does this also apply to the decoupling capacitors, which are on the ESP32 side and also on the voltage regulator (3V3) side? Sorry if asking the obvious...

Expand full comment
RoboticWorx's avatar

Hi Lorenz,

No worries at all! My apologies that I missed that part of your previous question. To answer it, both actually are necessary! Though it may seem redundant, the location of the placement of the capacitors are dependent on each IC as they need to be placed close to it. Even though the same decoupling capacitors may be on the same trace, it could pick up interference that will need to be decoupled before going into the input of the IC (so more than one may be needed to decouple output and input).

Hope this helps! :)

Justin

Expand full comment
Lorenz's avatar

Thank you for the great help!

Expand full comment
Stefan's avatar

Hello,

many thanks for writing this great tutorial. This is really helpful getting into building your own ESP32 boards.

A question on programming the board: do you need to press the boot and reset buttons to set your custom board into programming mode?

You simplified the design by removing the CP2102N USB-to-UART bridge. In the ESP32 S3 DevKitC 1 v1.1 reference schematic the CP2102N drives the DTR and RTS lines to set the ESP32 chip into programming mode.

By removing the USB-to-UART bridge, I wonder if you now have to press the buttons to get into programming mode.

Thanks again for your great work!

Expand full comment
RoboticWorx's avatar

Hi Stefan!

Thank you for your kind words, I am glad this has been a useful tutorial. :) I also plan on making one for STM32 in the near future.

To answer your question - yes. Whenever working with a newly assembled board (that hasn't been flashed before), you will need to put it into bootloader mode by holding boot > pressing reset > releasing reset > releasing boot. However, once the chip has been flashed at least once, you normally will not need to put it into bootloader mode again to upload code unless the program that was uploaded is broken and is not allowing the chip to be flashed. (An example of this can be spamming USB CDC serial.print requests). If that is ever the case, you can put it back into bootloader mode with the buttons to upload new code (bootloader mode freezes the active program).

I hope this answers your question!

Expand full comment
Ahmad Bdeir's avatar

Hey,

I just want to let you know I love the detail in this. Also, if I wanted to add a battery (with a charger) would I need two voltage regulators? One from the USB-in to the battery charger/esp and another from the battery to the esp?

Expand full comment
RoboticWorx's avatar

Hello! Thanks for the kind words. I’m glad you liked it!

If you wanted to add a battery charger circuit (typically for a LiPo-type battery) you would need a separate charger IC to regulate voltage input to the battery (USB -> battery). This is kind of like adding a regulator but does much more such as monitoring current flow, charging, temperature, etc.

So in total, you would only need one regulator to convert the USB/battery voltage to the 3.3V for the ESP32, then also a charger circuit (“regulator”) to step down the USB voltage for battery charging. (Typically 4.2V)

Hope this helps!

Expand full comment
Joep's avatar

For an even smaller board, is it possible to remove the buttons and LED as well?

Expand full comment
RoboticWorx's avatar

You can definitely remove the LED, but I’d probably recommend keeping the two buttons since they’re needed to set the board into boot loader mode. If you really need them gone, you can create some boot logic instead to set the needed pins low. Hope this helps!

Expand full comment