Need help: Add ESP32-S3-mini in Platform IO in VS Code

Hello All,

  1. We made a new product prototype board based on ESP32-S3-Mini, these are engineering sample SOCs received from Espressif.

  2. I have a tested application code which we use with current generation ESP32-WROOM32 SOCs(its based on Arduino framework). I use PlatformIO to write code and for programing ESP32-WROOM32.

  3. I am trying to program our new prototype board in VS code PlatformIO. But i am not able to select the “ESP32-S3” under the board selection while creating a new project! , So we are not able to program our board!

Please, I need help. Did anyone faced similar problem, how was it resolved?
Can anyone help me with a solution. It would be of great help for us.

Thanks,
Sarath.

Yeah, because of Support for the latest Arduino v2.0 · Issue #619 · platformio/platform-espressif32 · GitHub. This was already discussed multiple times in this forum, e.g., Preferences not working with ESP32-S2 and PlatformIO, BUT working with Arduino IDE, Esp32-s2-saola-1 --> Error: This board doesn't support arduino framework!, …

The https://github.com/tasmota/platform-espressif32/tree/IDF44/ESP32-S3 branch of the custom platform has bleeding-edge support for it.

So, just create select the regular “ESP32 Dev Board” in the boards list, then overwrite the platformio.ini with

[env:esp32s3]
platform = https://github.com/tasmota/platform-espressif32/archive/refs/heads/IDF44/ESP32-S3.zip
board = esp32-s3-devkitc-1
framework = arduino

given that I add a trivial src/main.cpp file of

#include <Arduino.h>

void setup(){}
void loop(){}

and hit ‘Build’, I get

>pio run
Processing esp32s3 (platform: https://github.com/tasmota/platform-espressif32/archive/refs/heads/IDF44/ESP32-S3.zip; board: esp32-s3-devkitc-1; framework: arduino)
------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
FILESYSTEM  spiffs
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-s3-devkitc-1.html
PLATFORM: Espressif 32 (2.0.2) > Espressif ESP32-S3-DevKitC-1
HARDWARE: ESP32S3 240MHz, 512KB RAM, 8MB Flash
DEBUG: Current (esp-prog) External (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 0.0.0
 - tool-esptoolpy 1.30201.220126 (3.2.1)
 - tool-mklittlefs 1.203.210628 (2.3)
 - tool-mkspiffs 2.230.0 (2.30)
 - toolchain-esp32s2ulp 1.22851.191205 (2.28.51)
 - toolchain-riscv32-esp 8.4.0+2021r2-patch2
 - toolchain-xtensa-esp32s3 8.4.0+2021r2-patch2
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 31 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio\build\esp32s3\src\main.cpp.o
Generating partitions .pio\build\esp32s3\partitions.bin
Archiving .pio\build\esp32s3\libFrameworkArduinoVariant.a
Indexing .pio\build\esp32s3\libFrameworkArduinoVariant.a
Compiling .pio\build\esp32s3\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\HWCDC.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\Print.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\USB.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\USBCDC.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\USBMSC.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\WString.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\base64.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-i2c-slave.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-tinyusb.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\firmware_msc_fat.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\main.cpp.o
Compiling .pio\build\esp32s3\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\esp32s3\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\esp32s3\libFrameworkArduino.a
Indexing .pio\build\esp32s3\libFrameworkArduino.a
Linking .pio\build\esp32s3\firmware.elf
Retrieving maximum program size .pio\build\esp32s3\firmware.elf
Checking size .pio\build\esp32s3\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   1.8% (used 9648 bytes from 524288 bytes)
Flash: [=         ]   8.8% (used 115805 bytes from 1310720 bytes)
Building .pio\build\esp32s3\firmware.bin
esptool.py v3.2.1
Creating esp32s3 image...
Merged 2 ELF sections
Successfully created esp32s3 image.
============== [SUCCESS] Took 10.62 seconds ==============

so, that works.

Many thanks @maxgerhardt for your guidance. It is much needed help for us.

  1. We changed the platformio.ini file as indicated by you.
  1. Now we are able to flash esp32-s3-mini. We are able to see the serial print messages.

  2. We have a problem here, the GPIO read write functions, interrupts aren’t functioning.
    [e.g. pinMode(LED1, OUTPUT); digitalRead(SWITCH), digitalWrite(LED1) ]

  3. If i program esp32-s3 with the same sample GPIO test code using “Espressif IDE” the switch scanning and LED1 ON/OFF driving works. But in PlatformIO, the program doesnt work.

  4. The GPIO output pins doesn’t change state with below code
    #define LED1 42
    pinMode(LED1, OUTPUT);

            void Loop() {
             digitalWrite(LED1, HIGH);
             delay(500);
             digitalWrite(LED1, LOW);
             delay(500); }
    
  5. The GPIO output pins doesn’t change state with below code
    #define LED1 42
    pinMode(LED1, OUTPUT);

            void Loop() {
             if(1 == digitalRead(SWITCH))
             digitalWrite(LED1, LOW);
             else
             digitalWrite(LED1, LOW); }
    
  6. Attaching interrupts to the above pins doesn’t work.

  7. A point to observe is all the above works in when programmed in Espressif IDE.

  8. Our entire application is based on Arduino frame work.

Kindly guide us in resolving the above issues. Your help is greatly appreciated.

Thanks,
Sarath

The platform I linked to is external to PlatformIO, created by a Tasmota developer (@jason2866). I don’t know about the functionality of the included framework version in regards to the GPIO & interrupt code.

I do see however that Releases · Jason2866/esp32-arduino-lib-builder · GitHub has a few newer releases than what is referenced in the platform. Does adding

platform_packages = 
  framework-arduinoespressif32@https://github.com/Jason2866/esp32-arduino-lib-builder/releases/download/664/framework-arduinoespressif32-v4.4_dev-73c0f44528.tar.gz

in the platformio.ini make any difference?

Hi @maxgerhardt I added the below code in platformio.ini file

the GPIO pins are not getting scanned, driven.!

S3 support in Arduino is in a early stage and under heavy development.
For issues look in Issues · espressif/arduino-esp32 · GitHub
For S3 there are issues with interrupts ESP32-S3 Support testing · Discussion #6197 · espressif/arduino-esp32 · GitHub

** GPIO interrupts work only on CORE 0 on ESP32-S3. Fix is ready to be merged in esp-idf.

1 Like

Hello Sarath, I have the same problem as you, I developed an ESP32-s3 board and I want to take my arduino libraries and code into visual studio and platform.io
Did you find any solution?

Hi @albertogm19,
I didn’t find any solution yet.

Right now the way to do is with esp-idf !
No breakthrough for the issue.

Please post if you find any solution. Im taking my project to ESP32 better than doing new libraries

If you have the hardware (and datasheet of course), you could help with the development of Arduino-ESP32 on the remaining issue, I’m sure they’re open to pull-requests. As Jason said above, it’s just under heavy development, and the more people working on it, the better.

Hi for anybody who may find this post looking for the waveshare esp32 s3 mini,

the config is here:

[env:lolin_s3_mini]

platform = espressif32

board = lolin_s3_mini

framework = arduino

monitor_speed = 115200

build_flags = -DARDUINO_USB_CDC_ON_BOOT=1