Elecrow CrowPanel 7.0 (ESP32-S3)

The classic 7" 800x480 CrowPanel on an ESP32-S3 N4R8 - capacitive touch, RGB parallel panel and Crowtail ports. We reviewed it and later published the full ESPHome pin-mapping guide for it.

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

Pinout

33 pins
View:
Elecrow CrowPanel 7.0 (ESP32-S3) pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
10IO0LCD_PCLKBOOTstrapping-Doubles as the RGB pixel clock AND the boot-strap pin - display glitches during flashing are normal
21IO1LCD_Gsafe-Internal - RGB panel data
32IO2LCD_BLsafepwmDisplay backlight - PWM dimmable (LEDC)
43IO3LCD_Gstrapping-Internal - RGB panel data
54IO4LCD_Bsafe-Internal - RGB panel data
65IO5LCD_Bsafe-Internal - RGB panel data
76IO6LCD_Bsafe-Internal - RGB panel data
87IO7LCD_Bsafe-Internal - RGB panel data
98IO8LCD_Gsafe-Internal - RGB panel data
109IO9LCD_Gstrapping-Internal - RGB panel data
1110IO10SD_CSstrappingspimicroSD slot - chip select
1211IO11SD_MOSIstrappingspimicroSD slot - MOSI
1312IO12SD_CLKstrappingspimicroSD slot - clock
1413IO13SD_MISOstrappingspimicroSD slot - MISO
1514IO14LCD_Rstrapping-Internal - RGB panel data
1615IO15LCD_Bsafe-Internal - RGB panel data
1716IO16LCD_Gsafe-Internal - RGB panel data
1817IO17I2S_SDINsafe-Internal I2S data to the NS4168 speaker amplifier
1918IO18I2S_LRCLKsafe-Internal I2S word clock to the NS4168 speaker amplifier
2019IO19SDAuarti2cI2C ports - shared with the GT911 touch controller; add devices, don't repurpose
2120IO20SCLuarti2cI2C ports - same shared bus as IO19
2221IO21LCD_Rsafe-Internal - RGB panel data
2338IO38GPIO_Dstrapping-The one free general-purpose pin, on the GPIO_D port
2439IO39LCD_HSYNCstrapping-Internal - RGB panel horizontal sync
2540IO40LCD_VSYNCstrapping-Internal - RGB panel vertical sync
2641IO41LCD_DEstrapping-Internal - RGB panel data enable
2742IO42I2S_BCLKstrapping-Internal I2S bit clock to the NS4168 speaker amplifier
2843IO43TXD0strappinguartUART0 - CH340C USB-C flashing/logs, also on the UART0 port (5V input capable)
2944IO44RXD0strappinguartUART0 - CH340C USB-C flashing/logs, also on the UART0 port (5V input capable)
3045IO45LCD_Rstrapping-Internal - RGB panel data
3146IO46LCD_Gstrapping-Internal - RGB panel data
3247IO47LCD_Rstrapping-Internal - RGB panel data
3348IO48LCD_Rstrapping-Internal - RGB panel data

Start with these

12 pins with no boot or system involvement
IO1LCD_GIO2LCD_BLIO4LCD_BIO5LCD_BIO6LCD_BIO7LCD_BIO8LCD_GIO15LCD_BIO16LCD_GIO17I2S_SDINIO18I2S_LRCLKIO21LCD_R

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

Fine - with a little care

sampled at boot or shared with debug/serial
PinLabelWhat to knowRole
IO0GPIO0Must be pulled high (default) or low (to enter UART download mode) at reset. Using it for other functions can interfere with boot mode configuration.Strapping
IO3GPIO3Sampled at reset to select JTAG interface (USB Serial/JTAG controller vs. external pins). Improper use can disable external JTAG or alter debug interface.Strapping
IO39MTCK (GPIO39)Default JTAG debugging TCK pin. If JTAG is needed, this pin must be free; it may also be used internally for PSRAM chip select on certain modules, so avoid repurposing it.Other
IO40MTDO (GPIO40)Default JTAG TDO output for debugging. Using it as GPIO will interfere with JTAG debugging functionality.Other
IO41MTDI (GPIO41)Default JTAG TDI input for debugging. Should be reserved for JTAG or left unused if JTAG is to remain available.Other
IO42MTMS (GPIO42)Default JTAG TMS signal for debugging. Using this pin for other purposes will disable the JTAG interface (unless JTAG is rerouted to USB).Other
IO43U0TXD (GPIO43)Used for bootloader output and UART console logs. If repurposed, you will lose the default serial output (and programming via UART0).Other
IO44U0RXD (GPIO44)Used for bootloader input (download mode via serial). If repurposed, you cannot use the default UART0 download mode for programming the chip.Other
IO45GPIO45Determines 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.Strapping
IO46GPIO46Must 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.Strapping

Only if you know the tricks

wired to flash or USB - expect a fight
PinLabelWhat to knowRole
IO9FSPIHDConnected to external flash (data/hold signal) on most modules. Not recommended for use as GPIO, since it must remain dedicated to flash communication.Flash
IO10FSPICS0Used to select the external flash chip. It is required for flash access and cannot be repurposed without losing flash connectivityFlash
IO11FSPIDUsed as a data line for flash (and in-package PSRAM). It should not be used as GPIO when the flash/PSRAM is in use.Flash
IO12FSPICLKDrives the flash (and PSRAM) clock. This critical signal must be reserved for memory and not used as general GPIO.Flash
IO13FSPIQUsed as a data line for flash/PSRAM transfers. Not available for other uses when flash/PSRAM is connected.Flash
IO14FSPIWPConnected to external flash (data/write-protect signal). Not recommended as GPIO because it’s reserved for flash operations.Flash
IO19USB_D-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.USB
IO20USB_D+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.USB
IO38FSPIWPOn flash-equipped chips, this pin is tied to the flash’s WP# (or D3) line. It should be avoided for other use, as it’s needed for flash operations.Flash
IO47SPICLK_PUsed only on variants with Octal SPI interface (e.g. ESP32-S3R16V) as part of the differential clock pair. On such chips it operates at 1.8 V and is reserved for the high-speed octal SPI clock, not for general GPIO use.Flash
IO48SPICLK_NUsed only on variants with Octal SPI interface, as the negative leg of the differential clock&. On such chips it operates at 1.8 V; it should be avoided for GPIO to prevent conflicts with the octal flash/PSRAM clock.Flash
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.
Pinout notes The Elecrow CrowPanel 7.0 (ESP32-S3) pinout brings out 33 GPIO pins - every one of them usable in your project. For peripherals, I²C is mapped to SDA on GPIO19…

The Elecrow CrowPanel 7.0 (ESP32-S3) pinout brings out 33 GPIO pins - every one of them usable in your project.

For peripherals, I²C is mapped to SDA on GPIO19 and SCL on GPIO20.

On the analog side there are PWM on 1 pins.

If you want zero surprises, IO1, IO2, IO4, IO5 and 8 more are free of any such role - the safest first picks. 10 of the exposed pins carry boot-time or system duties on the ESP32-S3 (IO0, IO3, IO39 and 7 more).


The 800x480 panel occupies the majority of the S3's pins as a 16-bit RGB bus - red on IO14/IO21/IO47/IO48/IO45, green on IO9/IO46/IO3/IO8/IO16/IO1, blue on IO15/IO7/IO6/IO5/IO4, with DE on IO41, HSYNC/VSYNC on IO39/IO40 and - unusually - PCLK on IO0, the boot-strap pin. The backlight is PWM on IO2.

User-facing I/O lives on the back ports: two I2C ports on IO19 (SDA) / IO20 (SCL) - the same bus the GT911 touch controller uses - a GPIO_D port exposing IO38, and the UART0 port (IO43/IO44, shared with the CH340C USB-C flashing path, 5V input capable). The microSD slot runs SPI on IO10 (CS), IO11 (MOSI), IO12 (CLK), IO13 (MISO), and the NS4168 speaker amp takes I2S on IO17 (data), IO42 (bit clock), IO18 (word clock).

Practical upshot: IO38 is the only free general-purpose pin, so plan sensor expansion around I2C. And because IO0 moonlights as the pixel clock, a display refresh glitch during flashing is normal - use BOOT+RESET if a download won't start.

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
The onboard LED on GPIO1 blinks - swap the pin if your board's LED differs.
Set these in Tools · leave everything else at default
Arduino IDE 2.x — Tools Copy
Board: "ESP32S3 Dev Module"
Flash Size: "4MB (32Mb)"
PSRAM: "OPI PSRAM"
Partition Scheme: "Default 4MB with spiffs (1.2MB APP / 1.5MB SPIFFS)" (default)
Upload Speed: "921600"
▸ every other Tools option — leave at default
Board: ESP32S3 Dev Module
Flash Size: 4MB (32Mb)
PSRAM: OPI PSRAM
Partition Scheme: Default 4MB with spiffs (1.2MB APP / 1.5MB SPIFFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32S3 Dev Module
blink.ino Copy
// blink the onboard LED
void setup() {
  pinMode(1, OUTPUT);
}
void loop() {
  digitalWrite(1, HIGH); delay(500);
  digitalWrite(1, LOW);  delay(500);
}
board to selectesp32-s3-devkitc-1⧉ copy
platformio.ini Copy
[env:elecrow-crowpanel-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: 
  framework:
    type: esp-idf
psram:
  mode: octal
  speed: 80MHz

# blink - GPIO1
output:
  - platform: gpio
    pin: 1
    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
The pin mapping fight, so you don't have to illustration
The pin mapping fight, so you don't have to

When we first brought this panel up in ESPHome we got everything from a lit-but-blank backlight to marching artifacts - the 5-inch example config's pins simply don't apply. The correct 7.0 mapping (PCLK on IO0, DE IO41, HSYNC IO39, VSYNC IO40) plus octal-PSRAM sdkconfig flags fixed it for good.

The full working config is in our ESPHome guide for this exact panel - copy it verbatim, then build up.

Touch and brightness are a follow-up config away illustration
Touch and brightness are a follow-up config away

The GT911 touch controller sits on the shared I2C bus (IO19/IO20) and the backlight is honest PWM on IO2 - so touch input and dimmable brightness both slot into ESPHome cleanly once the display works. We covered both in the follow-up guide.

Run the backlight LEDC output at ~1.2kHz - some panels whine audibly at lower PWM frequencies.

Expansion is port-shaped, not header-shaped illustration
Expansion is port-shaped, not header-shaped

There is no pin header - you get Crowtail connectors: two I2C ports, a GPIO_D port with IO38, and the UART0 port that also accepts 5V power for installed panels. With the display consuming the rest of the GPIO, I2C sensor chains are the practical expansion path.

The I2C ports share the touch controller's bus - keep added devices off address 0x5D and expect touch traffic on the analyzer.

Specifications

ESP32-S3
Compute
MCU
ESP32-S3
Clock
240 MHz
SRAM · Flash
512 KB · 4MB · 8MB (OPI) PSRAM
Radio
Wi-Fi
802.11 b/g/n
Bluetooth
5.0 LE
Antenna
PCB
I/O
GPIO · ADC
33 · Two 12-bit, 20 Channels
UART · I²C · SPI
3 · 2 · 4
PWM
8 channels
Power
USB
USB-C
Serial
CH340C
Boot address
0x0
Display
Screen
TN TFT-LCD · 7.0" · 800x480
Driver
-
Touch
GT911
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
- · -
Sketch · Data
- · -
The Elecrow CrowPanel 7.0 (ESP32-S3) uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates.

About this board

At its core is the ESP32-S3 - a dual-core Xtensa with vector extensions suited to AI workloads.

Expect to pay about $29.40 - in line with other ESP32-S3 boards.

33 GPIO are broken out - more than most ESP32-S3 boards, so the pin budget is rarely the constraint.

Onboard you'll find 8MB (OPI) PSRAM, a TN TFT-LCD 7.0" 800x480 display with touch, a microSD slot, a speaker, a speaker connector (PH2.0-2P), an amplifier (NS4168), battery charging via PH2.0-2P and Boot/Reset buttons.


The Elecrow CrowPanel 7.0 is the original big CrowPanel - a 7-inch 800x480 capacitive touchscreen driven directly by an ESP32-S3-WROOM-1 N4R8 (4 MB flash, 8 MB octal PSRAM) over a 16-bit RGB parallel bus. We've spent more time with this panel than most: it was half of our CrowPanel roundup review, and later the subject of a full ESPHome bring-up guide where we worked out the correct pin mappings the hard way.


The screen itself is the strong suit - decent brightness, good viewing angles, and a GT911 capacitive touch layer that feels like a phone rather than a 2000s GPS unit. Around back you get the usual CrowPanel practicality: Crowtail I2C and GPIO ports, UART0 port doubling as a 5V input, microSD, a speaker output through an NS4168 I2S amplifier, and a battery connector with charging.


The trade-offs are generational. The S3 drives 800x480 adequately but not effortlessly - LVGL runs well with PSRAM buffering, though heavy animations will show their seams. Flash is only 4 MB, which fills quickly once LVGL assets and fonts pile up. And almost every GPIO is consumed by the display bus, so expansion is Crowtail-port-shaped: the shared I2C bus and IO38 are what's genuinely free.


If you're choosing within the family: the Advance 7.0 adds four times the flash, an RTC, a mic and the radio module socket for a few dollars more, and is the better default today. The classic 7.0 earns its keep when the price gap matters or when you're following the large body of existing projects and tutorials built around it - including our own ESPHome config, which you can copy verbatim.

  • 7" 800x480 TN TFT-LCD panel (per Elecrow's spec) with GT911 capacitive touch, driven over a 16-bit RGB parallel bus
  • ESP32-S3-WROOM-1 N4R8 - 4 MB flash, 8 MB octal PSRAM (PSRAM does the LVGL heavy lifting)
  • Crowtail ports on the back - two I2C (IO19/IO20), GPIO_D (IO38), UART0 with 5V input
  • microSD slot on its own SPI bus (IO10-IO13)
  • Speaker output through an NS4168 I2S amplifier (PH2.0 connector)
  • PH2.0 battery connector with onboard charging
  • CH340C USB-C flashing; Boot and Reset buttons
  • Ships with a demo firmware preloaded - it powers up doing something useful out of the box
  • Fully documented ESPHome pin mapping - worked out and published in our bring-up guide

FAQ

5 common questions
Does the CrowPanel 7.0 work with ESPHome?
Yes - but the pin mapping is the whole battle, and we published the working config after fighting it ourselves. The display is a `rpi_dpi_rgb` platform with PCLK on IO0, DE on IO41, HSYNC/VSYNC on IO39/IO40, backlight PWM on IO2 and touch I2C on IO19/IO20. Copy the complete config from our guide rather than adapting the 5-inch example - the mappings differ and the failure mode is a scrambled or dark screen.
Why does my display show artifacts or flicker with ESPHome?
Almost always PSRAM bandwidth. The RGB panel streams the framebuffer from PSRAM continuously, so you need the octal PSRAM options enabled (mode octal, 80MHz, plus the SPIRAM fetch/rodata sdkconfig flags). Our guide documents the exact set - without them we got exactly the artifacts you're seeing.
Should I buy this or the Advance 7.0?
For a few dollars more, the Advance 7.0 gets you 16 MB flash (vs 4 MB), an RTC with coin-cell backup, a microphone, a buzzer and the swappable radio module socket. We'd pick the Advance for new projects. The classic 7.0 makes sense on price, or when you want the exact hardware that most existing CrowPanel 7.0 tutorials - ours included - were written against.
Can I use TFT_eSPI with it?
No - TFT_eSPI doesn't support RGB parallel panels, which we confirmed the hard way in our review. Use LovyanGFX, Elecrow's LVGL examples, or ESPHome. In Arduino, Elecrow's tutorial sets up LVGL over the ESP-IDF RGB driver.
What pins are actually free for my own hardware?
Very few - the display bus eats nearly everything. Realistically you have IO38 on the GPIO_D port and the shared I2C bus on IO19/IO20 (already hosting the GT911 touch controller). Anything more ambitious should be I2C devices or a UART peripheral on the UART0 port once flashing is done.

Where to buy

prices are typical street prices
Elecrow CrowPanel 7.0 (ESP32-S3)
Elecrow CrowPanel 7.0 (ESP32-S3)
$29.40per unit, typical
As an Amazon Associate, ESPboards earns from qualifying purchases.

Resources

Similar boards