Advice on using all pins of an ESP32-S3 DevKit

I'm currently working on a project that requires connecting a lot of components to an ESP32-S3 and I'm wondering if anyone would be willing to give me some advice on which component could safely be operated on which GPIO pins.

I've already created a 3D model and I'm hoping that I don't have to make any major changes to it:

Those are my schematics so far:


ShowboxInterceptorFor3DCase.fzz (208.7 KB)

Do you see any problems with my wiring? I'm mainly asking because I'm worried that I might be interfering with strapping pins / that strapping pins might interfere with my components.

Some tips here;

https://github.com/atomic14/esp32-s3-pinouts

1 Like

Deleted because on closer inspection you aren't using the ESP32 board that I first thought you were

the relay coils stick out to me..
i see 3 black 1 red..
should it not be 2 black and 2 red??

using wifi and ethernet??

wifi limits you to using adc1, analog reads..

good luck.. ~q

1 Like

Yes, under normal circumstances, I will be using Wifi+Bluetooth, but the device is also intended to be used for live music performances with up to 500 people and with 500 smartphones in a room, there is no way to get a reliable Wifi/Bluetooth connection on an ESP. That's why I decided to add Ethernet and go with the ESP32-S3 which has built-in USB OTG.
So now I can switch between a convenient Wifi+Bluetooth mode and a stable Ethernet+USB mode.

Well, DC+ is conencted to 12V and DC- is conencted to GND. And basically as soon as current can flow between 12V and GND (which only happens once the red button is pressed), the relays should turn on. So the idea is: If there is power, IN1 and IN2 on the relay module should be HIGH, so that the relays connect their COM to NO. And I was hoping this was achieved by connecting IN1 and IN2 to GND.

Thanks, so I can see my usage of GPIO45 and GPIO46 is potentially problematic, but I should be fine with using GPIO1 and GPIO2 instead, right?

And then for my analog readings, which would only happen on the pins connected to the ring pin of each TRS jack, I will move those from GPIO41, GPIO38, GPIO45 and GPIO47 to GPIO1, GPIO2, GPIO3 and GPIO8. So now I'm using all pins but GPIO45, GPIO46, GPIO0, TX, RX and RST.

Updated schematics:
ShowboxInterceptorFor3DCase-v13
(The image is an SVG this time, so you should be able to zoom in as far as necessary.)

Does anyone still see any issues with this?

I don't want to sound offensive at all, but though the 'schematics' it is super cool ( and I imagine easy to replicate if one wants to ) but... is super difficult to read, I have to follow each orange line only to know they are pushbutton, or the yellow/white ( which should be analog inputs ) connected to io11 ( which is connected to ad2 and not available with wifi on ) and io46 ( which is digital only ).
From my point of view an easier ( to read ) 'schematic' should name each pin ( es T1, T2, A1, A2....., a more meaningfull name even better and including direction/function... ), even not necessary routing all wires around the sheet ( when too complicated ).
But, as said, find this 'blochatic' usefull for replicating the circuit.

Sorry, the code I wrote was faulty. The analog reads always happen on the ring pins. I changed the color for those wires to brown to make it less confusing and I added wire descriptions directly on the wires where they leave the ESP. I hope that makes it more readable:
ShowboxInterceptorFor3DCase-v17

Now that I think about it, I could directly wire all sleeve pins of the TRS connectors to GND. But I like the idea of having the flexibility for the future, in case I want to be able to connect two buttons that are wired in a different way to the TRS connector.

I was about to ask what's the idea behind the connection for those buttons/pots.
GND is common, also 3.3V (you could add a series resistor for safety).
If you want to go for the connection you suggest, I would check noise first.

EDIT: If you need buttons, keypad matrix is the way to go.
Either way, with common GNDN and +3.3V with those 8 pins you should be able to place 4 pots + 4 buttons.

Boot strapping pins on ESP32-S3 WROOM-1 board:

0 Boot Mode (pull-up at boot = boot from flash)
3 JTAG (pull-down at boot)
45 SPI voltage. (pull-down at boot = 3.3v SPI)
46 Debug console print during boot (pull-down at boot = print debug messages)

You can use them after your firmware started but you have to hold them down during the boot. I.e. your connected peripherials must hold these pins down. These pins have internal pulldowns as well (48k or so)

Pin 46 can be anything during the boot but if it is pulled high then there will be no boot messages in your serial monitor

You have not said which version of the ESP32S3 Dev Kit you are using.

On some versions GPIO35, GPIO36 and GPIO37 can be used for the PSRAM.

I'm using pin 3 as an analog or digital input pin which may receive any value at any time, would that be a problem?

Can you elaborate? I don't think I understand.

What do you mean?

I'm using the ESP32S3 devkit with PSRAM (not sure if 8 or 16) and dual USB-C. I'm not aware of a data sheet for this particular board. I only know there is data sheet for the official version with dual micro USB.

Sorry if I'm not clear enough. It could be my english, it could be we don't have the same background at electronics or programming.

If you are going to connect multiple potentiometers, all potentiometer should be between Vcc and GND, you take the measurement from the middle pin of the potentiometer.

This connection looks good for me (use 3.3V to power potentiometers, never go for voltages above 3.3V):

But if a potentiometer fails and gets shorted, that would be a problem, adding a 1k resistor in series wont hurt (you will have to take that into account at coding and reading adc values). But it just a suggestion. 1k (1/10th of the potentiometer value) resistor for every potentiometer at the pin connected to Vcc.

Potentiometers should be connected to the same Vcc as the arduino. 3.3V pin of your board is an option. If you have an external 3.3V supply, I recommend using that connection.

Never use output pins as power supply, doesnt matter what's the current you need. As is shown in your first schematic.

Hope it helps. This way you can use more potentiometers and buttons.

For buttons, you should use this connection ( Connect Multiple Push Buttons To Multiple Digital IO Pins):

Also is shown the way to do it to an analog input, but if you dont require that feature, the digital option looks better.

If you have an ESP32S3 with PSRAM, then its highly likely its on pins 35,36 and 37. Just not knowing does not mean the pins are free to use.

But do you understand my requirements? I need to be able to connect 2 buttons or one pot to each of the TRS jacks at any time. Hardwiring the tip pins to 3v3 would not work for the 2 buttons case.

A button matrix would also not make sense because the usage of each TRS jack is optional and each jack should handle a separate external "device".

How do I figure this out? How can I know for sure?

Maybe ask the supplier of your board.

Or check the espressif documentation, since its they who produce the ESP32s and the Arduino core;

https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1-v1.0.html

"For boards with Octal SPI flash/PSRAM memory embedded ESP32-S3-WROOM-1/1U modules, and boards with ESP32-S3-WROOM-2 modules, the pins GPIO35, GPIO36 and GPIO37 are used for the internal communication between ESP32-S3 and SPI flash/PSRAM memory, thus not available for external use."

Aint Google wonderful.

If you keep SPRAM disabled, it shouldn't occupy your pins.

You can use it.

Just make sure that this pin is in its default state during the device boot.
Once your board is booted - you can use it as you wish.

If this pin goes up and down during the boot then yes it may cause problems.

Post the picture of your board. Usually pins which are used for SPI access to PSRAM are not available on a breakout boards (i.e. there are no such pins on a devboard).

My generic ESP32-S3 has 16M flash and 8M SPIRAM (PSRAM) and pins 33 and 34 are NOT available (used internally for SPIRAM ) while pins 35,36 and 37 are available.

You can make a sketch which uses PSRAM and at the same time tries to use pins 35,36 and 37.

Or just do not use PSRAM at all.

Okay, so I looked into it and the PSRAM on my DevKit must be inside the ESP32-S3-WROOM-1 module. And looking deeper into that, there are several variants of it. E.g. ESP32-S3-WROOM-1-N16R8 (which is the version on my DevKit). The R8 apparently meaning there are 8M of PSRAM aka octal PSRAM, which as far as I understood is always connected to 35, 36 and 37. For the modules using 4M (quad) PSRAM, I was not able to find any information, not even in the datasheet, on which pins are used for it.

Anyway, I think it's safe to say if I want to use the PSRAM (and I do), I won't be able to use 35, 36 and 37.

So I guess I have to connect the sleeve pins to GND then, to free up some GPIOs.

That leaves me with this:
ShowboxInterceptorFor3DCase-v19

So now I'm NOT using any of these: RST, RX, TX, GPIO0, GPIO3, GPIO35, GPIO36, GPIO37, GPIO45 and GPIO46.
And for potential analog readings, I'm only using GPIO1, GPIO2, GPIO4 and GPIO5.

Do you see any other potential problems?