README.md
June 10, 2026 · View on GitHub
YB-ESP32-S3-ETH Development Board Overview:
The YB-ESP32-S3-ETH is a general purpose development board based on Espressif's ESP32-S3 MCU. Version 2.0 has been released recently and succeeds the earlier board versions 1.x. It presently comes in different variants:
- with ESP32-S3-WROOM-1U-N8R2 module (8MB Flash/2MB PSRAM),
- with ESP32-S3-WROOM-1U-N16R2 module (16MB Flash/2MB PSRAM) or
- without ESP32-S3-WROOM-1(U) module which allows you to solder on any ESP32-S3-WROOM module of your choice.
The 4-layer board provides a RJ45 Ethernet connector, an Ethernet PHY bridge chip Wiznet W5500, CH334 USB-Hub chip, CH343 USB-UART bridge chip, two status LEDs and a USB-C connector for software upload, serial output, JTAG debugging and feeding power to the board. The boards are currently available on sales platforms eBay and Ricardo.ch.

If WiFi/BT is needed instead of or additionally to an Ethernet connection then the provided external 2.4GHz WLAN antenna can be connected to the onboard WROOM-1U module. The connector is compatible with the following standards: U.FL (Hirose), MHF-I (I-PEX) and AMC (Amphen).
The densly populated YB-ESP32-S3-ETH board provides multiple GPIO pins (as shown below) and is still highly breadboard compatible for it leaves one row of accessible breadboard contacts on either side of the board. All I/O ports (GPIOx) are labeled on both sides of the board.
The onboard USB-Hub (USB high-speed HUB controller chip CH334) allows for JTAG debugging and watching serial output simultaneously without any problems. More info further down.
Arduino libraries for the Wiznet W5500 are widely available (e.g. Ethernet or EthernetESP32), enabling you to easily realize ESP32 projects around this board with Ethernet or combined Ethernet/WLAN support. Of course you can use the Arduino ESP32 Core integrated lwIP library instead. Have a look at example Webserver_lwIP.
Since the board has both Wifi and Ethernet connectivity it can bridge the two interfaces at Layer 2 or via NAT, allowing devices connected to a Wifi Soft-AP to communicate with devices on the Ethernet network and even the internet if the Ethernet is connected to an internet router. Please see examples WiFi-Ethernet-Layer2-Bridge and WiFi-Ethernet-NAT-Bridge.
Many more software examples (for PlatformIO and/or ArduinoIDE) are available in folder examples. They will help you getting used to the board and explore all hardware features.
Quickstart guide:
All YB-ESP32-S3-ETH boards delivered have already been flashed with software example 'DHCP'.
- Step 1) connect the board via Ethernet cable to a switch in your home LAN (make sure a DHCP service is available)
- Step 2) apply power (via USB or 5V pins)
That's it. The status LED 'IO47' will blink fast when power is applied and will blink slow as soon as an IP address has been assigned.
Carrying on you could build and upload one of the many provided ArduinoIDE/PlatformIO examples and build a webserver, sniff your home LAN and much more.
YB-ESP32-S3-ETH board features:
- ESP32-S3-WROOM-1U-N16R2 module (16MB Flash, 2MB PSRAM) or ESP32-S3-WROOM-1U-N8R2 module (8MB Flash, 2MB PSRAM) when populated with WROOM module
- WiFi/BT IPEX antenna connector (on ESP32-S3-WROOM-1U module)
- RJ45 10M/100M Ethernet connector driven by onboard PHY controller chip Wiznet W5500
- the W5500 pins required to control the chip are hardwired to the ESP32-S3 GPIOs as follows:
- MOSI - GPIO11, MISO - GPIO13, SCK - GPIO12 (SPI bus data communication)
- SCS - GPIO14 (chip select, required for SPI bus control)
- RST - GPIO21 (if solder bridge is closed, for chip reset without resetting the whole board)
- INT - GPIO18 (if solder bridge is closed, only needed by certain libraries)
- control LEDs. One LED labeled 'P' is connected to the 3.3V rail to indicate board power and the other LED labeled 'IO47' is connected to GPIO47 which can be used as status LED, for debugging purposes etc.
- USB-C port connected to the onboard CH334 USB-Hub chip. This allows for simultaneous JTAG debugging and serial output as well as software upload (e.g. via ArduinoIDE, VSCode/PlatformIO etc). The ESP32-S3 contains an inbuild JTAG adapter hence debugging becomes fairly easy.
- hardware logic for automatic software uploads (supported by most Development IDEs) via USB-C port using the onboard CH343 USB-UART bridge chip.
- pushbuttons. One is labeled 'R' and resets the ESP32-S3 (shorts EN pin to ground) and the other one is labeled 'B' and shorts GPIO0 to ground when pressed. The latter is sometimes needed to force the board into boot mode.
- lots of available GPIOs next to the ones already mentioned above.
The board will spare you the trouble of cabling two different Arduino boards and saves a lot of room on the breadboard as well:

Just for information purposes: The ESP32-S3-WROOM-1(U) module family comprises several versions. The -1 versions come with embedded PCB antenna, the -1U versions with IPEX antenna socket instead. The extension -Nx(Ry) defines the amount of available FLASH/PSRAM, e.g. -N4 (4MB Flash, no PSRAM), -N8 (8MB Flash, no PSRAM), -N8R2 (8 MB Flash, 2MB PSRAM), -N8R8 (8 MB Flash, 8MB PSRAM) etc.
Board Pin Layout:

The boards outline, block diagram and schematic files are all located in folder doc, together with some data sheets for Espressif's MCU ESP32-S3 and the ESP32-S3-WROOM-1(U) modules.
Powering the board:
The board uses a LDO to drop the external supply voltage (5VDC min.) and internally operates on 3.3Volt. There are three different ways to provide power to the board.
- through the USB-C port
- 5...9VDC applied to the VIN pin
- 3.3VDC applied to the 3V3 pin(s)
Normal operating current of the idle board (all GPIOs unconnected, Ethernet Link down, WiFi disabled) is about 100mA (-N4) resp. 110mA (-N8R2). With Ethernet cable attached and Link up the current rises to about 165mA resp 180mA. With both Ethernet and WiFi active the board draws about 200...260mA (mainly depending on WiFi link).
Application hints:
The board uses the popular WCH chips CH334P (USB-Hub) and CH343P (USB-UART bridge). If you haven't done yet then you need to install the CH343 Driver on your Laptop/PC. For Windows go here and download and install the newest version of the driver. Linux provides CH34x drivers by default.
Arduino IDE:
As of Arduino ESP32 Core V3.1.1 you open the board list, enter "yb" and then select "Yellobyte YB-ESP32-S3-ETH". Now choose the proper settings for COM port, debug level, flash size, PSRAM, etc. as shown below. Be aware, since the ESP32-S3 MCU is very versatile there are a lot of build options to play with. Espressif's homepage offers some help.
Settings that apply to a board with -N8R2 module (8MB Flash/2MB PSRAM):
- Board: Yellobyte YB-ESP32-S3-ETH
- Flash Size: 8MB (64Mb)
- Partition Scheme: 8MB with spiffs (...)
- PSRAM: QSPI PSRAM

For -N16R2 module (16MB Flash/2MB PSRAM) the following settings apply:
- Board: Yellobyte YB-ESP32-S3-ETH
- Flash Size: 16MB (128Mb)
- Partition Scheme: 16MB with spiffs (...)
- PSRAM: QSPI PSRAM.
For -N8R8 module (8MB Flash/8MB PSRAM) the following settings apply:
- Board: Yellobyte YB-ESP32-S3-ETH
- Flash Size: 8MB (64Mb)
- Partition Scheme: 8MB with spiffs (...)
- PSRAM: OPI PSRAM.
For -N4 module (4MB Flash/no PSRAM) the following settings apply:
- Board: Yellobyte YB-ESP32-S3-ETH
- Flash Size: 4MB (32Mb)
- Partition Scheme: Default 4MB
- PSRAM: Disabled.
PlatformIO:
Building with PlatformIO is easy as well. Starting with Arduino ESP32 Core v3.1.1 the VSCode/PlatformIO IDE provides the necessary board definition file. Such *.json files provide the correct board definitions & settings.
Just create a new project and give it a name, then go to board selection, enter "yb-" and choose your YB-ESP32-S3-*** board from the list thats popping up.

Important:
1.) If the WROOM module features 8MB or 16MB Flash memory then you need to add the following lines to the platformio.ini project file's [env] section to account for the 8MB resp. 16MB flash available. Otherwise you are restricted to only 4MB (as set in the standard *.json board file).
For module with 8MB Flash (or more):
board_build.partitions = default_8MB.csv
board_upload.flash_size = 8MB
board_upload.maximum_size = 8388608
For module with 16MB Flash (or more):
board_build.partitions = default_16MB.csv
board_upload.flash_size = 16MB
board_upload.maximum_size = 16777216
2.) If the WROOM module features >= 8MB PSRAM then it needs below line for the program to run properly:
board_build.arduino.memory_type = qio_opi
Using the USB-C port:
With the board connected to your PC/Laptop you'll see 3 additional USB devices. Two COM ports: Serial USB device and USB-Enhanced-Serial CH343 and one device: USB JTAG/serial debug unit (or similar, depending on your OS).
You can connect a serial monitor program on your PC/Laptop to device "USB-Enhanced-Serial CH343" and watch the serial output generated with e.g. Serial.print(). Important: This serial connection is not affected by any board reset.
Device "USB JTAG/serial debug unit" lets you simultaneously debug the board via the ESP32-S3 integrated JTAG debug circuitry. How to use the latter for debugging is explained in detail here.
Please note: The PlatformIO builder scripts (*.json) for modules containing ESP32-S3/C3 normally define the build flag ARDUINO_USB_MODE=1. This enables the USB-Serial-JTAG controller and disables the USB-OTG-Controller in the ESP32-S3. If you want to override it you can (re-)define it in your platformio.ini control file. Normally you don't have to worry about it.
Software Upload to the board:
Uploading new software to boards with your IDE is a breeze. Select the correct COM port and upload the program. The integrated hardware logic will put the board into upload mode automatically.
Below the PlatformIO log of flashing the dev board with provided software example DHCP. Please note: the example has been build with option CORE_DEBUG_LEVEL=4 on PlatformIO (which is equivalent to Core Debug Level: "Debug" on ArduinoIDE) and therefore produces lots of additional output (chip info, memory info, etc.) at startup.
Executing task: C:\Users\tj\.platformio\penv\Scripts\platformio.exe run --target upload --target monitor --upload-port COM3 --monitor-port COM3
Processing release (platform: https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip; framework: arduino; board: yb_esp32s3_eth)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
PYTHONEXE updated to penv environment: C:\Users\tj\.platformio\penv\Scripts\python.exe
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/yb_esp32s3_eth.html
PLATFORM: Espressif 32 (55.3.30) > YelloByte YB-ESP32-S3-ETH
HARDWARE: ESP32S3 240MHz, 320KB RAM, 8MB Flash
DEBUG: Current (esp-builtin) On-board (esp-builtin) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- contrib-piohome @ 3.4.4
- framework-arduinoespressif32 @ 3.3.0
- framework-arduinoespressif32-libs @ 5.5.0+sha.b66b5448e0
- tool-dfuutil-arduino @ 1.11.0
- tool-esptoolpy @ 5.0.2
- tool-mkfatfs @ 2.0.1
- tool-mklittlefs @ 3.2.0
- tool-mklittlefs4 @ 4.0.2
- tool-mkspiffs @ 2.230.0 (2.30)
- toolchain-xtensa-esp-elf @ 14.2.0+20241119
*** Applied include path shortening for 325 framework paths ***
*** Path length reduced from 37477 to ~13517 characters ***
*** Estimated savings: 23400 characters ***
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 42 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Ethernet @ 2.0.2
Building in release mode
Retrieving maximum program size .pio\build\release\firmware.elf
Checking size .pio\build\release\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [= ] 6.3% (used 20700 bytes from 327680 bytes)
Flash: [= ] 10.1% (used 337139 bytes from 3342336 bytes)
Configuring upload protocol...
AVAILABLE: cmsis-dap, esp-bridge, esp-builtin, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Uploading .pio\build\release\firmware.bin
esptool v5.0.2
Serial port COM3:
Connecting...
Connected to ESP32-S3 on COM3:
Chip type: ESP32-S3 (QFN56) (revision v0.2)
Features: Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded PSRAM 2MB (AP_3v3)
Crystal frequency: 40MHz
MAC: 20:6e:f1:e0:3c:a8
Uploading stub flasher...
Running stub flasher...
Stub flasher running.
Changing baud rate to 921600...
Changed.
Configuring flash size...
Auto-detected flash size: 8MB
Flash will be erased from 0x00000000 to 0x00004fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x00062fff...
SHA digest in image updated.
Compressed 20256 bytes to 13096...
Writing at 0x00000000 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.0% 0/13096 bytes...
...
...
...
Writing at 0x00062680 [██████████████████████████████] 100.0% 180240/180240 bytes...
Wrote 337536 bytes (180240 compressed) at 0x00010000 in 2.4 seconds (1148.1 kbit/s).
Hash of data verified.
Hard resetting via RTS pin...
Please build project in debug configuration to get more details about an exception.
See https://docs.platformio.org/page/projectconf/build_configurations.html
--- Terminal on COM3 | 115200 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
00:51:10.583 > ESP-ROM:esp32s3-20210327
00:51:10.589 > Build:Mar 27 2021
00:51:10.589 > rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
00:51:10.589 > SPIWP:0xee
00:51:10.589 > mode:DIO, clock div:1
00:51:10.589 > load:0x3fce2820,len:0x1180
00:51:10.674 > load:0x403c8700,len:0xc2c
00:51:10.674 > load:0x403cb700,len:0x311c
00:51:10.674 > entry 0x403c88b8
00:51:10.899 > [ 2][I][esp32-hal-psram.c:104] psramAddToHeap(): PSRAM added to the heap.
00:51:10.914 > =========== Before Setup Start ===========
00:51:10.914 > Chip Info:
00:51:10.914 > ------------------------------------------
00:51:10.919 > Model : ESP32-S3
00:51:10.922 > Package : 0
00:51:10.922 > Revision : 0.02
00:51:10.922 > Cores : 2
00:51:10.929 > CPU Frequency : 240 MHz
00:51:10.929 > XTAL Frequency : 40 MHz
00:51:10.953 > Features Bitfield : 0x00000012
00:51:10.953 > Embedded Flash : No
00:51:10.953 > Embedded PSRAM : No
00:51:10.953 > 2.4GHz WiFi : Yes
00:51:10.953 > Classic BT : No
00:51:10.953 > BT Low Energy : Yes
00:51:10.953 > IEEE 802.15.4 : No
00:51:10.953 > ------------------------------------------
00:51:10.953 > INTERNAL Memory Info:
00:51:10.959 > ------------------------------------------
00:51:10.959 > Total Size : 394764 B ( 385.5 KB)
00:51:10.965 > Free Bytes : 361544 B ( 353.1 KB)
00:51:10.969 > Allocated Bytes : 28316 B ( 27.7 KB)
00:51:10.972 > Minimum Free Bytes: 356396 B ( 348.0 KB)
00:51:10.972 > Largest Free Block: 303092 B ( 296.0 KB)
00:51:10.979 > ------------------------------------------
00:51:10.986 > SPIRAM Memory Info:
...
...
00:51:11.129 > Board Info:
00:51:11.129 > ------------------------------------------
00:51:11.129 > Arduino Board : YelloByte YB-ESP32-S3-ETH
00:51:11.134 > Arduino Variant : yb_esp32s3_eth
00:51:11.134 > Core Debug Level : 4
00:51:11.139 > Arduino Runs Core : 1
00:51:11.139 > Arduino Events on : 1
00:51:11.139 > Arduino USB Mode : 1
00:51:11.139 > CDC On Boot : 0
00:51:11.139 > ============ Before Setup End ============
00:51:12.253 >
00:51:12.253 > Please make sure Ethernet cable is connected between board and switch and DHCP service is available in your LAN.
00:51:12.253 > =========== After Setup Start ============
00:51:12.262 > INTERNAL Memory Info:
00:51:12.262 > ------------------------------------------
00:51:12.270 > Total Size : 394764 B ( 385.5 KB)
00:51:12.272 > Free Bytes : 358764 B ( 350.4 KB)
00:51:12.272 > Allocated Bytes : 30968 B ( 30.2 KB)
00:51:12.272 > Minimum Free Bytes: 353616 B ( 345.3 KB)
00:51:12.288 > Largest Free Block: 303092 B ( 296.0 KB)
00:51:12.289 > ------------------------------------------
00:51:12.289 > SPIRAM Memory Info:
00:51:12.289 > ------------------------------------------
00:51:12.289 > Total Size : 2097152 B (2048.0 KB)
00:51:12.304 > Free Bytes : 2093068 B (2044.0 KB)
00:51:12.305 > Allocated Bytes : 1844 B ( 1.8 KB)
00:51:12.314 > Minimum Free Bytes: 2093068 B (2044.0 KB)
00:51:12.314 > Largest Free Block: 2064372 B (2016.0 KB)
00:51:12.320 > ------------------------------------------
00:51:12.322 > GPIO Info:
00:51:12.322 > ------------------------------------------
00:51:12.329 > GPIO : BUS_TYPE[bus/unit][chan]
00:51:12.329 > --------------------------------------
00:51:12.337 > 43 : UART_TX[0]
00:51:12.337 > 44 : UART_RX[0]
00:51:12.337 > 47 : GPIO
00:51:12.338 > ============ After Setup End =============
00:51:12.338 > blinkTask has started.
00:51:22.922 > Ethernet link is up.
00:51:23.021 > DHCP successful. Local IP: 192.168.1.37
00:51:33.026 > Ethernet link is up.
00:51:33.026 > Local IP: 192.168.1.37
....
However, at any time and if needed you can force the ESP32-S3 into upload mode manually. Keep the 'B' button pressed, then press/release the 'R' button and finally release the 'B' button. The serial monitor output will subsequently confirm the boards readiness for getting flashed.
....
23:19:07.453 > ESP-ROM:esp32s3-20210327
23:19:07.453 > Build:Mar 27 2021
23:19:07.453 > rst:0x1 (POWERON),boot:0x0 (DOWNLOAD(USB/UART0))
23:19:07.459 > waiting for download
Integrating this board into your own PCB design projects:
Its easy. Folder doc provides the Eagle library file yb-esp32-s3-eth.lbr containing the board. Most other PCB design software (e.g. KiCad) are able to import and use Eagle lib files.

Running MicroPython on the board:
Of course you can install MicroPython onto the YB-ESP32-S3-ETH board and use it's LAN, WiFi, SPI, I2C, ADC, GPIO and other features via python scripts.
Step 1) Load MicroPython onto the board. Go to https://micropython.org/download/ESP32_GENERIC_S3/ and download the newest *.bin firmware release. Here you will find detailed installation instructions as well.
Step 2) Erase the entire flash on the board with
esptool.py erase_flash
If esptool.py can't determine which port your board is connected to, try
esptool.py --port PORTNAME erase_flash
Step 3) Flash the previously downloaded firmware to the board, e.g.
esptool.py --port COM4 --baud 460800 write_flash 0 ESP32_GENERIC_S3-20260406-v1.28.0.bin
Step 4) Reboot the board by shortly pressing the 'R' button. Then connect your serial monitor to the correct port (here COM4) and press ENTER. If flashing was successful you will be greeted with
01:57:53.819 > Build:Mar 27 2021
01:57:53.819 > rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
01:57:53.825 > SPIWP:0xee
01:57:53.825 > mode:DIO, clock div:1
01:57:53.825 > load:0x3fce2820,len:0xeac
01:57:53.830 > load:0x403c8700,len:0xc28
01:57:53.830 > load:0x403cb700,len:0x2ff8
01:57:53.830 > entry 0x403c88ac
01:57:54.370 > MicroPython v1.28.0 on 2026-04-06; Generic ESP32S3 module with ESP32S3
01:57:54.375 > Type "help()" for more information.
01:57:54.375 > >>>
which confirms that MicroPython is now up and running on your board. Just enter help() and MicroPython will present some help info.
Example 1: Switching the onboard status LED (GPIO47) on/off:
>>> import machine <Enter>
>>> from machine import Pin <Enter>
>>> p0 = Pin(47, Pin.OUT) <Enter>
>>> p0.on() <Enter>
>>> p0.off() <Enter>
Example 2: Checking the LAN connection.
Accessing the LAN with MicroPython means the ESP32-S3 would activate it's integrated Ethernet MAC (EMAC) and use the onboard W5500 chip purely as Ethernet PHY.
BTW: The ESP32-S3 supports other external SPI Ethernet interface chips as well, e.g. LAN8720, KSZ8851SNL, DM9051.
Ok. First make sure the INT solder bridge on the bottom of your YB-ESP32-S3-ETH board is closed (default: open) and a network cable connects your board with your local network. Finally make sure your local network provides a DHCP service.
Now only a few lines of python code are needed.
>>> import machine, network <Enter>
>>> from machine import Pin, SPI <Enter>
>>> spi = SPI(1, sck=Pin(12), mosi=Pin(11), miso=Pin(13)) <Enter>
>>> lan = network.LAN(spi=spi, phy_type=network.PHY_W5500, phy_addr=0, cs=Pin(14), int=Pin(18)) <Enter>
>>> lan.active(True) <Enter>
True
>>> lan.ifconfig() <Enter>
('192.168.1.88', '255.255.255.0', '192.168.1.1', '192.168.1.2')
If the last answer looks similar to above then MicroPython was successfully talking with the W5500 and your board requested and got a valid ip address from the DHCP server.
Example 3: Scanning for WiFi-APs
>>> import network <Enter>
>>> wlan = network.WLAN() <Enter>
>>> wlan.active(True)
True
>>> wlan.scan() <Enter>
It takes a few seconds and then MicroPython should present a list of found WiFi access points.
For more detailed info about MicroPython running on ESP32 please have a look here:
https://docs.micropython.org/en/latest/esp32/quickref.html