clockwise icon indicating copy to clipboard operation
clockwise copied to clipboard

ESP32-S3 Support (Adafruit MatrixPortal S3)

Open fitzy89 opened this issue 1 year ago • 6 comments

I'm trying to load this on a Adafruit MatrixPortal S3 but when using the webserial method it tells me the S3 model isn't supported. What would be required to make it supported?

fitzy89 avatar Sep 19 '24 08:09 fitzy89

ESP32-S2 isnt supported either.

Andrew93752 avatar Jan 06 '25 13:01 Andrew93752

Would love to see ESP32-S3

pr10dr avatar Jan 22 '25 15:01 pr10dr

Hi @fitzy89 ! Can you try to compile and upload targeting the ESP32-S3? It should be able to execute but the firmware was not compiled for them.

jnthas avatar Feb 05 '25 20:02 jnthas

@Andrew93752, for ESP32-S2 is a little bit more difficult because the S2 has less resources, especially RAM memory that can be a challenge. In general terms, S2 is an upgraded version of ESP8266. But I would like to see what happens if you try to compile and upload as well.

jnthas avatar Feb 05 '25 20:02 jnthas

Esp32-S3 works without problems with the esphome implementation. I added a example.yaml for esphome, which uses HD-WF2 (Esp32-S3 with 8mb Ram and no PSRam) as hardware. See https://github.com/aschoelzhorn/clockwise-esphome/tree/main/examples You just need to update the pin mapping to the default pins for Esp32-S3 used by the underlying hub75 library

aschoelzhorn avatar Oct 15 '25 18:10 aschoelzhorn

For the S3, what if you just added the board type to the platform.ini file and uploaded? I don't have a S3 to test with.

[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
upload_speed = 921600
lib_deps = 
	https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git
	adafruit/Adafruit GFX Library@^1.10.1
	adafruit/Adafruit BusIO@^1.5.0
	SPI
	Wire
	ropg/ezTime@^0.8.3
	https://github.com/jnthas/Improv-WiFi-Library
	https://github.com/tzapu/WiFiManager
	bblanchon/ArduinoJson@^6.21.2
	bitbank2/PNGdec@^1.0.1
build_src_filter = +<*> -<.git/> -<.svn/> -<example/> -<examples/> -<test/> -<tests/> -<clockfaces/>
build_flags = 
	-D CW_FW_VERSION="\"1.4.2\""
	-D CW_FW_NAME="\"${sysenv.FW_NAME}\""

This option would require compiling with vscode and not webserial. If you are new to vscode and platform.io what better time to learn :).

krzimmer avatar Oct 22 '25 18:10 krzimmer

I tested with a Matrix Portal S3 and got the following error:

Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-s3-devkitc-1.html
PLATFORM: Espressif 32 (6.12.0) > Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)
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: 
 - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b 
 - tool-esptoolpy @ 2.40900.250804 (4.9.0) 
 - tool-mkfatfs @ 2.0.1 
 - tool-mklittlefs @ 1.203.210628 (2.3) 
 - tool-mkspiffs @ 2.230.0 (2.30) 
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 44 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ESP32 HUB75 LED MATRIX PANEL DMA Display @ 3.0.13+sha.30c984a
|-- Adafruit GFX Library @ 1.12.4
|-- Adafruit BusIO @ 1.17.4
|-- SPI @ 2.0.0
|-- Wire @ 2.0.0
|-- ezTime @ 0.8.3
|-- Improv WiFi Library @ 0.0.3+sha.2ac77de
|-- WiFiManager @ 2.0.17+sha.32655b7
|-- ArduinoJson @ 6.21.5
|-- PNGdec @ 1.1.6
|-- cw-commons
|-- timeinwords
Building in release mode
Compiling .pio/build/esp32-s3-devkitc-1/lib69e/ezTime/ezTime.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/src/main.cpp.o
Building .pio/build/esp32-s3-devkitc-1/bootloader.bin
Generating partitions .pio/build/esp32-s3-devkitc-1/partitions.bin
Compiling .pio/build/esp32-s3-devkitc-1/liba82/Wire/Wire.cpp.o
esptool.py v4.9.0
Creating esp32s3 image...
Merged 1 ELF section
Successfully created esp32s3 image.
Compiling .pio/build/esp32-s3-devkitc-1/libd3f/SPI/SPI.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib624/Adafruit BusIO/Adafruit_BusIO_Register.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib624/Adafruit BusIO/Adafruit_GenericDevice.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib624/Adafruit BusIO/Adafruit_I2CDevice.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib624/Adafruit BusIO/Adafruit_SPIDevice.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/libcaf/Adafruit GFX Library/Adafruit_GFX.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/libcaf/Adafruit GFX Library/Adafruit_GrayOLED.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/libcaf/Adafruit GFX Library/Adafruit_SPITFT.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/libcaf/Adafruit GFX Library/glcdfont.c.o
In file included from lib/timeinwords/Clockface.h:5,
                 from src/main.cpp:6:
lib/timeinwords/gfx/Super_Mario_Bros__24pt7b.h:6:12: fatal error: M5Stack.h: No such file or directory

*****************************************************************
* Looking for M5Stack.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:M5Stack.h"
* Web  > https://registry.platformio.org/search?q=header:M5Stack.h
*
*****************************************************************

   #include <M5Stack.h>
            ^~~~~~~~~~~
compilation terminated.
*** [.pio/build/esp32-s3-devkitc-1/src/main.cpp.o] Error 1
================================================================================================================================================================================================================ [FAILED] Took 10.63 seconds ================================================================================================================================================================================================================

Environment         Status    Duration
------------------  --------  ------------
esp32-s3-devkitc-1  FAILED    00:00:10.635
==================================================================

I added m5stack/M5Stack@^0.4.6 to lib_deps and tried again. I got more errors:

Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-s3-devkitc-1.html
PLATFORM: Espressif 32 (6.12.0) > Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)
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: 
 - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b 
 - tool-esptoolpy @ 2.40900.250804 (4.9.0) 
 - tool-mkfatfs @ 2.0.1 
 - tool-mklittlefs @ 1.203.210628 (2.3) 
 - tool-mkspiffs @ 2.230.0 (2.30) 
 - toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 
 - toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 44 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ESP32 HUB75 LED MATRIX PANEL DMA Display @ 3.0.14+sha.30c984a
|-- Adafruit GFX Library @ 1.12.4
|-- Adafruit BusIO @ 1.17.4
|-- SPI @ 2.0.0
|-- Wire @ 2.0.0
|-- ezTime @ 0.8.3
|-- Improv WiFi Library @ 0.0.3+sha.2ac77de
|-- WiFiManager @ 2.0.17+sha.32655b7
|-- ArduinoJson @ 6.21.5
|-- PNGdec @ 1.1.6
|-- M5Stack @ 0.4.6
|-- cw-commons
Building in release mode
Compiling .pio/build/esp32-s3-devkitc-1/libc88/ezTime/ezTime.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/src/main.cpp.o
Building .pio/build/esp32-s3-devkitc-1/bootloader.bin
Generating partitions .pio/build/esp32-s3-devkitc-1/partitions.bin
Compiling .pio/build/esp32-s3-devkitc-1/liba82/Wire/Wire.cpp.o
esptool.py v4.9.0
Creating esp32s3 image...
Merged 1 ELF section
Successfully created esp32s3 image.
Compiling .pio/build/esp32-s3-devkitc-1/libd3f/SPI/SPI.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib964/Adafruit BusIO/Adafruit_BusIO_Register.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib964/Adafruit BusIO/Adafruit_GenericDevice.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib964/Adafruit BusIO/Adafruit_I2CDevice.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib964/Adafruit BusIO/Adafruit_SPIDevice.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib0a8/Adafruit GFX Library/Adafruit_GFX.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib0a8/Adafruit GFX Library/Adafruit_GrayOLED.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib0a8/Adafruit GFX Library/Adafruit_SPITFT.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib0a8/Adafruit GFX Library/glcdfont.c.o
Compiling .pio/build/esp32-s3-devkitc-1/lib54a/ESP32 HUB75 LED MATRIX PANEL DMA Display/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp.o
Archiving .pio/build/esp32-s3-devkitc-1/liba82/libWire.a
Indexing .pio/build/esp32-s3-devkitc-1/liba82/libWire.a
Archiving .pio/build/esp32-s3-devkitc-1/libd3f/libSPI.a
Compiling .pio/build/esp32-s3-devkitc-1/lib54a/ESP32 HUB75 LED MATRIX PANEL DMA Display/ESP32-HUB75-MatrixPanel-leddrivers.cpp.o
Indexing .pio/build/esp32-s3-devkitc-1/libd3f/libSPI.a
Compiling .pio/build/esp32-s3-devkitc-1/lib54a/ESP32 HUB75 LED MATRIX PANEL DMA Display/platforms/esp32/esp32_i2s_parallel_dma.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib54a/ESP32 HUB75 LED MATRIX PANEL DMA Display/platforms/esp32s3/gdma_lcd_parallel16.cpp.o
In file included from .pio/libdeps/esp32-s3-devkitc-1/M5Stack/src/M5Display.h:8,
                 from .pio/libdeps/esp32-s3-devkitc-1/M5Stack/src/M5Stack.h:111,
                 from lib/cw-commons/gfx/Super_Mario_Bros__24pt7b.h:6,
                 from lib/cw-commons/Clockface.h:5,
                 from src/main.cpp:5:
.pio/libdeps/esp32-s3-devkitc-1/M5Stack/src/utility/In_eSPI.h:633:20: error: 'VSPI' was not declared in this scope
     uint8_t port = VSPI;
                    ^~~~
.pio/libdeps/esp32-s3-devkitc-1/M5Stack/src/utility/In_eSPI.h:633:20: note: suggested alternative: 'SPI'
     uint8_t port = VSPI;
                    ^~~~
                    SPI
In file included from .pio/libdeps/esp32-s3-devkitc-1/M5Stack/src/M5Stack.h:111,
                 from lib/cw-commons/gfx/Super_Mario_Bros__24pt7b.h:6,
                 from lib/cw-commons/Clockface.h:5,
                 from src/main.cpp:5:
lib/cw-commons/StatusController.h: In member function 'void StatusController::printCenter(const char*, int)':
.pio/libdeps/esp32-s3-devkitc-1/M5Stack/src/M5Display.h:66:17: error: 'class Adafruit_GFX' has no member named 'setFreeFont'; did you mean 'setFont'?
 #define setFont setFreeFont
                 ^~~~~~~~~~~
lib/cw-commons/StatusController.h:168:26: note: in expansion of macro 'setFont'
   Locator::getDisplay()->setFont(&Picopixel);
                          ^~~~~~~
Compiling .pio/build/esp32-s3-devkitc-1/lib798/EEPROM/EEPROM.cpp.o
Compiling .pio/build/esp32-s3-devkitc-1/lib91e/Preferences/Preferences.cpp.o
*** [.pio/build/esp32-s3-devkitc-1/src/main.cpp.o] Error 1
.pio/libdeps/esp32-s3-devkitc-1/ESP32 HUB75 LED MATRIX PANEL DMA Display/src/platforms/esp32s3/gdma_lcd_parallel16.cpp:21:19: note: #pragma message: Compiling for ESP32-S3
   #pragma message "Compiling for ESP32-S3"
                   ^~~~~~~~~~~~~~~~~~~~~~~~
================================================================================================================================================================================================================ [FAILED] Took 11.42 seconds ================================================================================================================================================================================================================

Environment         Status    Duration
------------------  --------  ------------
esp32-s3-devkitc-1  FAILED    00:00:11.416
==================================================

Looks like its this statement in lib/cw-commons/gfx/Super_Mario_Bros__24pt7b.h that selects M5Stack.h

#ifdef ARDUINO_ESP32_DEV
  #include <gfxfont.h>
#else
  #include <M5Stack.h>
#endif

I'll edit the above to see if the build for ESP32-S3 will work with gfxfont.h.

krzimmer avatar Nov 26 '25 02:11 krzimmer

Builds without error if I remove the statement and just import gfxfont.h. However, I need to update the pins for the Matrix Portal S3. The onboard NeoPixel lights up, but I get nothing on the panel.

Image

krzimmer avatar Nov 26 '25 02:11 krzimmer

I got it to build and the display is happy now.

Image

Here are the pins for those interested:

  mxconfig.gpio.r1 = 42;  //25
  mxconfig.gpio.r2 = 38;  //14
  mxconfig.gpio.g1 = 41;  //26
  mxconfig.gpio.g2 = 39;  //12
  mxconfig.gpio.b1 = 40;  //27
  mxconfig.gpio.b2 = 37;  //13
  mxconfig.gpio.a = 45;   //23
  mxconfig.gpio.b = 36;   //19
  mxconfig.gpio.c = 48;    //5
  mxconfig.gpio.d = 35;   //17
  mxconfig.gpio.e = 21;   //32
  mxconfig.gpio.clk = 2; //16
  mxconfig.gpio.lat = 47;  //4
  mxconfig.gpio.oe = 14;  //15
  mxconfig.clkphase = false;

Wifi fails.

krzimmer avatar Nov 26 '25 02:11 krzimmer

Works. The only issue I had was with the font on the Mario clockface.

#ifdef ARDUINO_ESP32_DEV
  #include <gfxfont.h>
  #else 
  #include <M5Stack.h>
#endif

When I commented M5Stack.h, it worked.

Image

Image

krzimmer avatar Dec 04 '25 03:12 krzimmer