Elecrow CrowPanel Advance 7.0 (ESP32-S3)

7" 800x480 HMI touchscreen on an ESP32-S3-WROOM-1 N16R8, with a swappable radio module socket, RTC, mic and speaker output - the board we reviewed hands-on with the ESP32-H2, C6, nRF24 and Meshtastic modules.

USB-C
Elecrow CrowPanel Advance 7.0 (ESP32-S3) board
ESP32-S3
MCU
240MHz
clock
16MB
flash
512KB
SRAM
32· Two 12-bit, 20 Channels ADC
GPIO
BLE 5.0+ WiFi
radio
On this page

Elecrow CrowPanel Advance 7.0 (ESP32-S3) Pinout

32 pins
Elecrow CrowPanel Advance 7.0 (ESP32-S3) pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
10IO0BOOTstrapping-BOOT button - hold at power-up for download mode
22IO2MIC_WSsafe-I2S microphone word select - also routed to the wireless module socket
33IO3LCD_Rstrapping-Internal - RGB panel data (V1.3+ mapping)
44IO4I2S_SDINSD_MISOsafespiFunction-switched - speaker I2S data or microSD MISO, selected by S0/S1; also on the module socket
55IO5I2S_BCLKSD_CLKsafespiFunction-switched - speaker I2S bit clock or microSD clock, selected by S0/S1; also on the module socket
66IO6I2S_LRCLKSD_MOSIsafespiFunction-switched - speaker I2S word clock or microSD MOSI, selected by S0/S1; also on the module socket
77IO7LCD_Rsafe-Internal - RGB panel data
88IO8BUZZERsafe-Passive buzzer on V1.0 (moved behind the STC8 helper on V1.2+); also routed to the module socket
99IO9LCD_Gstrapping-Internal - RGB panel data
1010IO10LCD_Gstrapping-Internal - RGB panel data
1111IO11LCD_Gstrapping-Internal - RGB panel data
1212IO12LCD_Gstrapping-Internal - RGB panel data
1313IO13LCD_Gstrapping-Internal - RGB panel data
1414IO14LCD_Gstrapping-Internal - RGB panel data
1515IO15SDAsafei2cI2C-OUT port - shared with GT911 touch, PCF8563 RTC (0x51) and the STC8 backlight controller (0x30 on V1.2+); add devices, don't repurpose
1616IO16SCLsafei2cI2C-OUT port - same shared bus as IO15
1717IO17LCD_Rsafe-Internal - RGB panel data
1818IO18LCD_Rsafe-Internal - RGB panel data
1919IO19UART1_RXMIC_CLKuartuartFunction-switched - UART1-OUT port or I2S microphone clock; also on the module socket
2020IO20UART1_TXMIC_DATAuartuartFunction-switched - UART1-OUT port or I2S microphone data; also on the module socket
2121IO21LCD_Bsafe-Internal - RGB panel data
2238IO38LCD_Bsafe-Internal - RGB panel data
2339IO39LCD_PCLKstrapping-Internal - RGB panel pixel clock (20MHz, V1.3+ mapping)
2440IO40LCD_HSYNCstrapping-Internal - RGB panel horizontal sync
2541IO41LCD_VSYNCstrapping-Internal - RGB panel vertical sync
2642IO42LCD_DEstrapping-Internal - RGB panel data enable
2743IO43TXD0uartuartUART0 - CH340K USB-C flashing/logs, also on the UART0-OUT and UART0-IN ports
2844IO44RXD0uartuartUART0 - CH340K USB-C flashing/logs, also on the UART0-OUT and UART0-IN ports
2945IO45LCD_Bstrapping-Internal - RGB panel data
3046IO46LCD_Rstrapping-Internal - RGB panel data
3147IO47LCD_Bstrapping-Internal - RGB panel data
3248IO48LCD_Bstrapping-Internal - RGB panel data
32 GPIOs broken out 12 free · 18 need care · 2 to avoid

Start with these

12 pins with no boot or system involvement
IO2IO4IO5IO6IO7IO8IO15IO16IO17IO18IO21IO38

Freely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.

Fine - with a little care

18 pins · 12 things to know
IO0 Bootstrapping pin (Chip boot mode selection) Strapping

Must be pulled high (default) or low (to enter UART download mode) at reset. Using it for other functions can interfere with boot mode configuration.

IO3 Bootstrapping pin (controls JTAG signal source) Strapping

Sampled at reset to select JTAG interface (USB Serial/JTAG controller vs. external pins). Improper use can disable external JTAG or alter debug interface.

IO9IO10IO11IO12IO13IO14 General-purpose SPI2 (FSPI) IO MUX pins Other

IO MUX pin of the general-purpose SPI2 (FSPI) bus, not of the in-package flash - that sits on GPIO26-32. The datasheet lists it as a priority-2 pin ("can be freely used without restrictions"), so it is only taken if your board wires flash, an SD card or a display to FSPI.

  • IO9General-purpose SPI2 (FSPI) IO MUX pin - hold/data line (FSPIHD)
  • IO10General-purpose SPI2 (FSPI) IO MUX pin - chip select (FSPICS0)
  • IO11General-purpose SPI2 (FSPI) IO MUX pin - data in (FSPID)
  • IO12General-purpose SPI2 (FSPI) IO MUX pin - clock (FSPICLK)
  • IO13General-purpose SPI2 (FSPI) IO MUX pin - data out (FSPIQ)
  • IO14General-purpose SPI2 (FSPI) IO MUX pin - write-protect/data line (FSPIWP)
IO39 JTAG test clock (MTCK); IO MUX alternates CLK_OUT3 and SUBSPICS1 (chip select on the alternative SUBSPI memory bus, unused on standard modules) JTAG

Default JTAG TCK - keep it free if you debug over JTAG. It is not a flash or PSRAM line on standard modules: those sit on GPIO26-37.

IO40 JTAG test data out pin (MTDO) JTAG

Default JTAG TDO output for debugging. Using it as GPIO will interfere with JTAG debugging functionality.

IO41 JTAG test data in pin (MTDI) JTAG

Default JTAG TDI input for debugging. Should be reserved for JTAG or left unused if JTAG is to remain available.

IO42 JTAG test mode select pin (MTMS) JTAG

Default JTAG TMS signal for debugging. Using this pin for other purposes will disable the JTAG interface (unless JTAG is rerouted to USB).

IO43 UART0 transmit pin (U0TXD), default serial console TX UART

Used for bootloader output and UART console logs. If repurposed, you will lose the default serial output (and programming via UART0).

IO44 UART0 receive pin (U0RXD), default serial console RX UART

Used for bootloader input (download mode via serial). If repurposed, you cannot use the default UART0 download mode for programming the chip.

IO45 Bootstrapping pin (selects VDD_SPI flash voltage) Strapping

Determines flash/PSRAM power voltage (3.3 V vs 1.8 V) at boot. Must match hardware configuration; using as GPIO can upset flash supply setting.

IO46 Bootstrapping pin (used with GPIO0 for boot mode; controls ROM log output) Strapping

Must be at a defined level during reset (with GPIO0) to select normal or download boot and UART/USB print mode. This pin is input-only (no output drive), so it should be left for its intended strapping function.

IO47IO48 Octal SPI differential clock legs (SPICLK_P/N_DIFF), used only by the 1.8 V octal flash/PSRAM variants Other

Only the 1.8 V octal parts (ESP32-S3R8V, ESP32-S3R16V) run the differential memory clock here, and on those the pin works at 1.8 V instead of 3.3 V. On the common 3.3 V modules it is a normal GPIO - several devkits drive their RGB LED from GPIO48.

  • IO47Octal SPI differential clock positive leg (SPICLK_P_DIFF), used only by the 1.8 V octal flash/PSRAM variants
  • IO48Octal SPI differential clock negative leg (SPICLK_N_DIFF), used only by the 1.8 V octal flash/PSRAM variants

Only if you know the tricks

2 pins · 1 thing to know
IO19IO20 USB OTG differential data pair (D- and D+) USB

By default connected to the on-chip USB Serial/JTAG controller. Using it as general GPIO without reconfiguring IO MUX will interfere with USB functionality.

  • IO19USB OTG negative differential data line (USB_D-)
  • IO20USB OTG positive differential data line (USB_D+)
These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.

All 32 pins on the Elecrow CrowPanel Advance 7.0 (ESP32-S3) are usable GPIO.

Peripheral wiring is straightforward: I²C is mapped to SDA on GPIO15 and SCL on GPIO16.

18 of the exposed pins carry boot-time or system duties on the ESP32-S3 (IO0, IO3, IO9 and 15 more) - check the guidance above before wiring anything to them. IO2, IO4, IO5, IO6 and 8 more are free of any such role - the safest first picks.

Pinout notes Like every RGB-panel ESP32-S3 board, most pins drive the display: 16 data lines plus DE on IO42, HSYNC/VSYNC on IO40/IO41 and PCLK on IO39 (V1.3+ mapping).…

Like every RGB-panel ESP32-S3 board, most pins drive the display: 16 data lines plus DE on IO42, HSYNC/VSYNC on IO40/IO41 and PCLK on IO39 (V1.3+ mapping). Your I/O comes through the ports on the back: UART0-OUT on IO43/IO44 (shared with the CH340K USB-C flashing path, and duplicated on the 5V-input UART0-IN port), UART1-OUT on IO19/IO20, and I2C-OUT on IO15/IO16.

The shared pins are the thing to internalize. IO4/IO5/IO6 carry speaker I2S or the microSD card; IO19/IO20 carry UART1 or the I2S microphone; and the wireless module socket wants IO2, IO4-IO6, IO8, IO15/IO16 and IO19/IO20 depending on the module. The S0/S1 function switches on the back select between MIC&SPK, wireless module and TF card modes - the valid combinations are printed next to the switches, and they differ slightly between hardware revisions.

The I2C bus on IO15/IO16 is shared with the GT911 touch controller, the PCF8563 RTC (address 0x51) and the STC8 helper MCU that handles the backlight (address 0x30 on V1.2+) - extend it, don't repurpose it. IO0 is the BOOT button, and IO8 drives the passive buzzer on V1.0 (later revisions moved it behind the STC8).

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Install your USB-serial driver (CH340 / CP210x) if no port appears. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
GPIO2 toggles - wire an LED and resistor to it, or change the pin to your board's own LED.
Set these in Tools · leave everything else at default
Arduino IDE 2.x - Tools Copy
Board: "ESP32S3 Dev Module"
Flash Size: "16MB (128Mb)"
PSRAM: "OPI PSRAM"
Partition Scheme: "16M Flash (3MB APP/9.9MB FATFS)" (default)
Upload Speed: "921600"
▸ every other Tools option - leave at default
Board: ESP32S3 Dev Module
Flash Size: 16MB (128Mb)
PSRAM: OPI PSRAM
Partition Scheme: 16M Flash (3MB APP/9.9MB FATFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32S3 Dev Module
blink.ino Copy
// toggle GPIO2 - wire an LED and resistor to it
void setup() {
  pinMode(2, OUTPUT);
}
void loop() {
  digitalWrite(2, HIGH); delay(500);
  digitalWrite(2, LOW);  delay(500);
}
board to selectesp32-s3-devkitc-1⧉ copy
platformio.ini Copy
[env:elecrow-crowpanel-advance-7-esp32-s3]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
upload_speed = 921600
board_build.arduino.memory_type = qio_opi
build_flags = -DBOARD_HAS_PSRAM
Find it: PlatformIO Home ▸ Boards, search esp32-s3-devkitc-1 - or type it after board =.
board to selectesp32-s3-devkitc-1⧉ copy
device.yaml Copy
esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: esp-idf
psram:
  mode: octal
  speed: 80MHz

# blink - GPIO2
output:
  - platform: gpio
    pin: 2
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32-s3-devkitc-1 (same ids as PlatformIO).
esptool doesn't pick board settings - a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32s3 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x0 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).

Good to know

board-specific quirks worth 60 seconds
Two DIP switches decide what your pins do illustration
Two DIP switches decide what your pins do
The S3 doesn't have enough free GPIO to run audio, microSD and a radio module simultaneously, so Elecrow multiplexes them: IO4-IO6 and IO19/IO20 are routed by the S0/S1 function switches on the back. The valid combinations (mic&speaker / wireless module / TF card) are printed right next to the switches. If the SD card, microphone or radio module "died" after you changed something else, check the switch…

The S3 doesn't have enough free GPIO to run audio, microSD and a radio module simultaneously, so Elecrow multiplexes them: IO4-IO6 and IO19/IO20 are routed by the S0/S1 function switches on the back. The valid combinations (mic&speaker / wireless module / TF card) are printed right next to the switches.

If the SD card, microphone or radio module "died" after you changed something else, check the switch position before debugging code - one of us lost an evening to this.

The radio modules are the point of the Advance series illustration
The radio modules are the point of the Advance series
The socket on the back takes Elecrow's plug-in radios: ESP32-H2 for Zigbee/Thread, ESP32-C6 for Wi-Fi 6, nRF2401 for cheap 2.4 GHz links, and a Meshtastic LoRa module. We tested all four in our review - integration is genuinely plug-in plus sample code, with the DIP switches set to WM mode. The Meshtastic module is the sleeper feature - it turns the panel into a mesh node with a 7" touchscreen, something the…

The socket on the back takes Elecrow's plug-in radios: ESP32-H2 for Zigbee/Thread, ESP32-C6 for Wi-Fi 6, nRF2401 for cheap 2.4 GHz links, and a Meshtastic LoRa module. We tested all four in our review - integration is genuinely plug-in plus sample code, with the DIP switches set to WM mode.

The Meshtastic module is the sleeper feature - it turns the panel into a mesh node with a 7" touchscreen, something the Meshtastic ecosystem otherwise lacks.

Backlight and housekeeping live on a helper MCU illustration
Backlight and housekeeping live on a helper MCU
On V1.2 and later, backlight brightness, touch reset and amplifier mute are handled by an STC8 microcontroller at I2C address 0x30 - you write one byte (0 = brightest, 245 = off) instead of driving a PWM pin. V1.0 boards used a PCA9557 GPIO expander instead. Firmware must poke the right mechanism for the revision, which is why Elecrow's examples come in per-version folders. A running firmware with a black…

On V1.2 and later, backlight brightness, touch reset and amplifier mute are handled by an STC8 microcontroller at I2C address 0x30 - you write one byte (0 = brightest, 245 = off) instead of driving a PWM pin. V1.0 boards used a PCA9557 GPIO expander instead. Firmware must poke the right mechanism for the revision, which is why Elecrow's examples come in per-version folders.

A running firmware with a black screen usually means the backlight write went to the wrong address for your revision - it's not a dead panel.

Specifications

ESP32-S3 · vs other ESP32 chips →
Compute
MCU
ESP32-S3
Clock
240 MHz
SRAM · Flash
512 KB · 16MB · 8MB (OPI) PSRAM
Radio
Wi-Fi
802.11 b/g/n
Bluetooth
5.0 LE
Antenna
PCB
I/O
GPIO · ADC
32 · Two 12-bit, 20 Channels
UART · I²C · SPI
3 · 2 · 2
PWM
8 channels
Power
USB
USB-C
Serial
CH340K
Boot address
0x0
Electrical
Input
5V (USB-C or UART0-IN)
Consumption
-
Regulator
-
Display
Screen
IPS LCD · 7.0" · 800x480
Driver
-
Touch
GT911
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
- · -
Sketch · Data
- · -
The Elecrow CrowPanel Advance 7.0 (ESP32-S3) uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates.

About this board

Inside sits the ESP32-S3 - a dual-core Xtensa with vector extensions suited to AI workloads.

At $34.90 it's on the expensive side for an ESP32-S3 board - most land around $29.

With 32 GPIO broken out, you get more pins to play with than most ESP32-S3 boards offer.

Around the module: 8MB (OPI) PSRAM, an IPS LCD 7.0" 800x480 display with touch, a microSD slot, a microphone (I2S MEMS), a speaker, a speaker connector (PH2.0-2P), an amplifier (NS4168), a PCF8563 RTC, a buzzer, battery charging (TP4059) via PH2.0-2P and Boot/Reset buttons.


The Elecrow CrowPanel Advance 7.0 is the board that defined the Advance formula, and one we know first-hand - we reviewed it in full, including the plug-in radio modules. It pairs a 7-inch 800x480 IPS capacitive touchscreen with an ESP32-S3-WROOM-1 N16R8 (dual-core LX7 at 240 MHz, 16 MB flash, 8 MB octal PSRAM), which is enough to run reasonably fluid LVGL interfaces at this resolution - just don't expect miracles when animations get heavy.


What separates it from the sea of generic ESP32 display boards is the housekeeping around the screen: a PCF8563 RTC with coin-cell backup, an I2S microphone and NS4168-amplified speaker output, a passive buzzer, battery connector with TP4059 charging, and the swappable wireless module socket. In our review we plugged in the ESP32-H2 (Zigbee/Thread), ESP32-C6 (Wi-Fi 6), nRF2401 and Meshtastic LoRa modules - all worked with Elecrow's sample code, and the Meshtastic option in particular turns the panel into a ready-made mesh node with a big screen.


The catch you should understand before buying: the S3 doesn't have enough pins for all of this at once, so two DIP switches on the back multiplex the I2S audio, microSD and wireless module functions onto the same GPIO. Mic + speaker, radio module, or TF card - pick the combination the switch table allows, not all three.


Elecrow has revved this board through several hardware versions (V1.0 to V1.5) with real behavioral differences - the backlight moved from a GPIO expander to an STC8 helper MCU on I2C, and the ESPHome examples are split by revision. It's a mature, well-documented HMI at a fair price; our review unit was a V1.0 and the experience out of the box was genuinely good. If you need more headroom than the S3 can give, its successor is the CrowPanel Advance ESP32-P4 line.

  • 7" 800x480 IPS panel with 178-degree viewing angles and GT911 capacitive multi-touch, driven over a 16-bit RGB parallel bus
  • ESP32-S3-WROOM-1 N16R8 module - 16 MB flash, 8 MB octal PSRAM
  • Swappable wireless module socket - optional ESP32-H2 (Zigbee/Thread), ESP32-C6 (Wi-Fi 6), nRF2401 and Meshtastic LoRa modules (all four tested in our review)
  • PCF8563 RTC (I2C 0x51) with CR1220 coin-cell backup for timekeeping through power loss
  • I2S MEMS microphone plus NS4168-amplified speaker output (PH2.0 connector) and a passive buzzer
  • S0/S1 function switches multiplex mic/speaker, wireless module and microSD onto the shared GPIO
  • Crowtail-style UART0, UART1 and I2C ports on HY2.0-4P connectors
  • PH2.0 battery connector with TP4059 charging; UART0-IN port doubles as a 5V power input
  • STC8 helper MCU (I2C 0x30 on V1.2+) controls backlight brightness, touch reset and amplifier mute
  • USB-C flashing and logs via CH340K; Boot and Reset buttons
  • Multiple hardware revisions (V1.0-V1.5) with per-revision ESPHome examples

FAQ

6 common questions
Does the CrowPanel Advance 7.0 work with ESPHome?
Yes, and Elecrow maintains official example configs - but they are split by hardware revision, and picking the wrong one gives you a dark screen or dead touch. The display is a `rpi_dpi_rgb` panel, I2C runs on IO15/IO16, and on V1.2+ the backlight is set by writing a single byte to the STC8 helper at I2C address 0x30 (0 is full brightness, 245 is off - the scale is inverted). Check the version printed on the board silk before copying a config.
Which hardware revision will I get, and does it matter?
New stock ships the latest revision (V1.3 and later), but plenty of V1.0/V1.2 units exist - our review unit was a V1.0. It matters for software - V1.0 controlled the backlight through a PCA9557 GPIO expander, V1.2+ through an STC8 microcontroller at I2C 0x30, and the buzzer and touch-reset wiring moved too. The functionality is the same; the configs are not interchangeable.
Can I use the microphone, speaker, SD card and a radio module at the same time?
No - this is the board's main compromise. The S0/S1 DIP switches on the back multiplex IO4-IO6 and IO19/IO20 between mic+speaker, the wireless module and the TF card, and only the printed combinations are valid. If audio or SD mysteriously stopped working, the switches are the first thing to check.
How does it compare to the non-Advance CrowPanel 7.0?
Same screen size, much better platform. The Advance adds the ESP32-S3 (vs the original's ESP32), more PSRAM for LVGL, the RTC with coin-cell backup, the mic/speaker audio path, battery charging and the wireless module socket. We reviewed both, and the Advance's brightness and viewing angles were visibly better out of the box.
Does the Meshtastic module really work with it?
Yes - we tested it in our review and it behaved like a proper Meshtastic node with a 7-inch UI. Be aware Elecrow's Meshtastic firmware targets specific hardware revisions (V1.0 era), so check the wiki's Meshtastic section against your board version before ordering the LoRa module specifically for this.
How do I flash it?
Over the USB-C port, which goes through a CH340K to UART0 (IO43/IO44) - Arduino IDE, PlatformIO, ESP-IDF, MicroPython and ESPHome all work. Hold BOOT while tapping RESET if the auto-download circuit doesn't trigger. The UART0-IN connector carries the same UART plus a 5V input, which is handy for permanently installed panels.

Where to buy

prices are typical street prices
Elecrow CrowPanel Advance 7.0 (ESP32-S3)
Elecrow CrowPanel Advance 7.0 (ESP32-S3)
$34.90per unit, typical
The Elecrow store link is an affiliate link - ESPboards may earn a commission on purchases, at no extra cost to you.

Resources

Similar boards