I’m hoping to get a little lesson on the layout of things when using Platformio to develop for ESP32.
I currently am successfully building using VSCode and Platformio, using mostly Arduino ESP32, but here and there I use the esp-idf.
In my platformio.ini file, I specify versions for some of the libraries I use. However, I see no indication of what version of Arduino_esp32 or esp_idf are used.
In my ESP32 program, if I call ESP.getSdkVersion() I get 4.4.5. If I am not mistaken, that framework is up to 5.1.1. How do I upgrade to the latest, or am I gated on Platformio to incorporate it into their updates?
How can I learn about:
the relationship between these building blocks; I know the arduino_esp32 uses esp_idf; platformio build both of those into something else?
where do these frameworks live on my drive? I had a hell of a time trying to duplicate my desktop environment onto a laptop because it was not finding esp_idf. I resorted to blindly installing everything, and I never learned where these pieces were installed.
how do I upgrade, or specify not to upgrade, these frameworks as new ones are released? I expected that to be part of the platformio.ini file.
When using framework = arduino in an ESP32 project, PlatformIO builds the project exactly as in the Arduino IDE: It compiles Arduino-ESP32, and that links in a statically precompiled version of ESP-IDF in the version that is indicated in the releases. These precompiled files live inside the Arduino-ESP32 package, see e.g. here.
As thus, neither the Arduino IDE nor PlatformIO build ESP-IDF from source in a regular Arduino project.
However, PlatformIO does have the special capability to create an ESP-IDF base project, on which the Arduino-ESP32 core is added on top (Arduino-ESP32 as an ESP-IDF component). That’s what happening in the reference project with framework = arduino, espidf.
All PlatformIO packages are stored in C:\Users\<user>\.platformio\packages unless specified otherwise in the platformio.ini. For example, in the most basic framework = arduino project, the package for Arduino-ESP32 will be inside there as framework-arduinoespressif32. Similiarly for framework-espidf.
PlatformIO does not update your platform (“Espressif32” e.g.) by default. Usually, when using only official resources, you can affect the used framework versions (such as Arduino-ESP32 version x.y.z) by chosing a platform version that uses the wanted version. See https://github.com/platformio/platform-espressif32/releases for available platform versions and which framework versions they used / were upgraded. See docs on how to specify a wanted version.
Of course, PlatformIO also has the capability to source packages (such as framework-arduinoespressif32) from other sources. Manually post-adjusting these packages (i.e. chosing a different version than what the platform would have dictated) is done in platform_packages. For regular projects, you should stick with official versions via platform though.