Download free music MP3s on genuine quality, the world’s largest online music catalogue, powered by your scrobbles. Free listening, videos, photos, The world’s largest online music catalogue, powered by your scrobbles. Free listening, videos, photos, stats, charts, biographies and concerts. stats, charts, biographies and concerts.
Tuesday, May 20, 2025
ESP32 S3 DevKit
Having played a bit with ESP32-S3 now, in the of the Waveshare Zero format boards, I'd quite like to have a version of the ESP32 WROOM Mozzi Experimenter PCB for the latest ESP32-S3 DevKitC board I've found. This is the introductory post that is my "…
Having played a bit with ESP32-S3 now, in the of the Waveshare Zero format boards, I'd quite like to have a version of the ESP32 WROOM Mozzi Experimenter PCB for the latest ESP32-S3 DevKitC board I've found.
This is the introductory post that is my "notes to self" as I get to know the boards.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Microcontrollers, see the Getting Started pages.
ESP32-S3 DevKitC Boards
There are a couple of ESP32-S3 official DevKits, in addition to the huge range of third party boards from the likes of Waveshare, Adafruit, and so on of course.
Note: although the C and M DevKits both have 44 pins and very similar functionality, the actual pinouts for the two boards are quite different. On the face of things, it looks like the pinout for the M version seems a bit more logical to me than the C version, but I've ended up with C boards, so that is what I'm going with! Much of what follows is applicable to both though.
It is also worth noting that I was looking at the ESP32-S3 as a possible replacement for the original ESP32 in my Educational DIY Synth Thing. But in terms of general features, the ESP32-S3 and ESP32 are actually pretty similar.
From the comparison here, here are some key features listed:
ESP32
ESP32-S3
32-bit LX6
32-bit LX7
single or dual core
dual core
240MHz (one variant at 160MHz)
240MHz
520KB SRAM
512 KB SRAM
448 KB ROM
384 KB ROM
0MB, 2MB, 4MB Internal Flash
0MB, 8MB Internal Flash
Up to 16MB External Flash
Up to 1GB External Flash
Up to 8MB External RAM
Up to 1GB External RAM
Most of the peripherals are pretty similar too.
So the key difference is the switch from LX6 to LX7. As both support a single-precision floating point unit, and up to 240MHz operation in dual core modes, I'm not sure what the enhancement is at the moment.
One difference on Wikipedia is that the LX7 has "added instructions to accelerate machine learning applications" and it appears that there is a specific library that makes use of these instructions: ESP-DL. But I've not seen if any of this is likely to help me with audio.
I should also note that the original ESP32 is the only chip in the architectural family (as far as I can see) with an integrated DAC. There is certainly no DAC with the ESP32-S3.
I was determined to go with the official ESP32-S3 DevKitC board this time. But on my first attempt I managed to end up with a very close clone! I have now have two variants as shown below. The original is on the left and the clone on the right.
The clones are very similar to the original but seem to have the following differences.
Physical Differences:
The clone is shorter and 2.54mm (i.e. a "pin row") wider.
Buttons are in a different place.
USB-C ports in different place compared to the GPIO pins.
Electrical Differences:
The USB ports are swapped. The original has UART on the left, USB on the right. The clone is swapped.
Clone has a solder jumper on the rear for USB-OTG for the USB port. If soldered, this shorts a diode in the VBUS 5V line to allow the USB port to power an external device.
Original has an SK68xx LED (powered from 3V3), the clone has a WS2812 (powered from 5V), although they should be essentially the same code/protocol wise.
Original has the LED on GPIO38 (maybe - mine doesn't). Clone has LED on GPIO48.
Clone has a solder jumper for the LED which is connected by default.
Original uses a CP2102N USB serial chip. Clone has a CH343P.
Original uses a SGM2212 regulator which has a 2.7-20V input range. Clone uses a CJ6107 with range 2.5-6V. Although in both cases the input is essentially 5V from USB VBUS.
The clone has an IN-OUT solder jumper. If soldered, this shorts a diode on header pin 21 (5V) to allow power to be fed into the board via the 5V pin.
The clone has a RX and TX LED.
The clone has the (strapping) pin 3 pulled HIGH to 3V with an additional 0R resistor in place in case that is not required.
At least the pinouts for the two modules seem the same, apart from the fact that one module is one-pin-header-row wider than the other.
ESP32-S3 DevKitC-1 GPIO Use
Strapping pins are used to set the configuration of the ESP32-S3 on power up. For details of the strapping pins and their use, see Section 4 in the ESP32-S3-WROOM-1 guide. The summary, and default settings for the ESP32-S3, is as follows:
Working through the datasheets, schematics and online guides, as far as I can make out the following GPIO pins all have an expected use on the DevKitC-1 boards, which can limit their use for general projects.
GPIO
Use
0, 3, 45, 46
ESP32-S3 Strapping pins as described above.
15, 16
Optional: can be used to connect an external oscillator - not used on these boards.
19, 20
USB OTG port data connection
35, 36, 37
Onboard SPI flash memory
43, 44
UART0 connection to USB serial chip
47, 48
If a N16R16VA module (16MB Flash, 16MB PSRAM) is used then these pins operate at 1.8V.
38 or 48
WS2812 compatible RGB LED
Taking account of all the above, this leaves the following GPIO pins probably available for use in projects:
GPIO Range
#Pins
Notes
1-2
2
GPIO, Touch, ADC
4-16
13
GPIO, Touch, ADC
17-18
2
GPIO, Touch, ADC, UART1
19-20
2
GPIO, USB, ADC
21
1
GPIO
38
1
GPIO, LED on official board
39-42
4
GPIO, JTAG
43-44
2
GPIO, UART0
47
1
GPIO*
48
1
GPIO*, LED on clone board (can be disabled)
So this would hopefully give me access to 19 GPIO that could act as analog inputs and a further 7 GPIO in addition to two for RX/TX.
This assumes that GPIO 47 and 48 not operating with an SPI flash configuration that means they will run at 1.8V. For the modules I have I'm using a ESP32-S3-N16R8 module so this should be fine as this only applies to the N16R16VA variants of the modules.
In terms of functions, the way the ESP32-S3 supports GPIO multiplexing means that any of these could be configured for I2C or I2S, and they all support PWM outputs.
We can also see the following from pins_arduino.h:
TX/RX = GPIO 43, 44 (as might be expected).
SDA/SCL = GPIO 8, 9
SPI = GPIO 10, 11, 12, 13
We can also see a series of Tn pin definitions for the touch pins:
T1-14 = GPIO 1-14
RGB and LED_BUILTIN
Also, whilst perusing the same file, I noticed the following comment:
// Some boards have too low voltage on this pin (board design bug) // Use different pin with 3V and connect with 48 // and change this setup for the chosen pin (for example 38) #define PIN_RGB_LED 48 // BUILTIN_LED can be used in new Arduino API digitalWrite() like in Blink.ino static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT + PIN_RGB_LED; #define BUILTIN_LED LED_BUILTIN // backward compatibility #define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN // RGB_BUILTIN and RGB_BRIGHTNESS can be used in new Arduino API rgbLedWrite() #define RGB_BUILTIN LED_BUILTIN #define RGB_BRIGHTNESS 64
This is recognising that pin 48 was used by default for the RGB LED, but because of the possibility of pins 47 and 48 being configured for 1.8V operation for certain SPI flash memory configurations, means that it doesn't work in some cases. Presumably this is why the official boards now use pin 38 for the RGB LED instead.
Note, I don't know why LED_BUILTIN = SOC_GPIO_PIN_COUNT + PIN_RGB_LED, but I've seen elsewhere, in cores/esp32/esp32-hal-rgb-led.c:
No comments:
Post a Comment