So people kept telling me I should keep the programmer external and not burden every board with the cost and size penalty for having the programming circuitry on every board.
While I very much agreed in theory (for most boards, once installed, the USB would never be used again), there was the issue that there doesn't seem to be a good "standard" external programming solution I could find in the market! The only two I could find use the CH340 chip, which I'm avoiding since installing the driver bricked my friend's Mac.
The more I thought about it, the more the solution became obvious: if something doesn't exist, I guess I have to make my own. :) So I did:
This is about the simplest CP2102N based programmer circuit I could come up with, reduced to the bare minimum. It has a footprint for a single line header, the idea is that this will be populated with a right angle header so the optional USB programming / UART module can be installed at a 90 degree angle to the main board and require a minimum amount of space on the main board.
The main board will have a footprint like this:
This is from the Sparkfun Eagle library. The holes are staggered just the right amount that a pin header will lock in place when you just push it in. For a dev board, or in a use case where you actually want the USB port, you just push it in and solder it to make it permanent. In case you just want to program a board and not have the USB in the application, you can push it in, program the board and pull it out again. You can of course also install a female header if you want, but this is supposed to make that unnecessary.
So what do you all think? Good solution? It should make everyone asking to not have the programmer on the board happy as well as those who do want the USB to UART for their application.
I have prototype PCBs on order, once I have built them and tested to make sure it all works, I will make the design files available. I will produce these myself if necessary but this is such a basic thing that I hope others will produce clones and this can become some form of ESP32 programmer standard. It's kind of silly that every ESP32 board out there needs to reproduce this stuff...
I wonder: should I make this its own project on Hackaday.io as well? Maybe I should.