My Arduino IDE don´t have some libraries

Hello, greetings to all. I have an Arduino code in which I must include these libraries but they are not within the Arduino IDE that I have. How do I include them? They are: BLE, LittleFS, RainMaker and USB.
Also, when I add the ESP32 library, the code shows <dummy.h> what does it mean? Beforehand thank you very much.

Hi @dieguitovalle. Which version of the Arduino IDE are you using?

Try the library manager. You find it behind one of the tabs. Tools? There You can download new libraries.

If a library is not included in the IDE's library manager, you must download a zip file containing the library, often this will be available from GitHub. Once you have downloaded the zipped library, you can import it into the IDE using the "Add .ZIP Library" from the menus.

You can use the Library Manager. IDE menu Sketch -> Include Library -> Manage Libraries.

If the libraries that you need are not in there, you will have to hunt for them using your favorite search engine; most of them are on GitHub. Keywords could be Arduino or ESP plus the name of the library. Download the zip and IDE menu Sketch -> Include Library -> Include .ZIP Library.

I have a suspicion that you did not install things as it should be; I leave it to @in0 to determine that :wink:

Slow down folks. @dieguitovalle is referring to the ESP32 boards platform's "platform bundled libraries":

Those libraries are installed via Boards Manager along with the ESP32 support. If you go looking for them in Library Manager you're going to have a bad day.

Would that mean that the boards package is not installed or installed incorrectly?

From the Arduino Library Specification:
https://arduino.github.io/arduino-cli/latest/library-specification/#source-code

When the user imports a library into their sketch (from the Arduino IDE's "Sketch > Include Library" menu or the Arduino Web Editor's "Include" button), the default behavior (configurable via the library.properties includes field) is for an #include statement to be added for all header (.h) files in the src/ directory

OK, so let's take a look at the library's library.properties metadata file:

https://github.com/espressif/arduino-esp32/blob/2.0.0/libraries/ESP32/library.properties

name=ESP32
version=2.0.0
author=Hristo Gochkov, Ivan Grokhtkov
maintainer=Hristo Gochkov <hristo@espressif.com>
sentence=ESP32 sketches examples
paragraph=
category=Other
url=
architectures=esp32

No includes field to be seen, so we can disregard that part of the specification. So we now know that when you select Sketch > Include Library > ESP32, the Arduino IDE will add #include directives for all the header files it finds in the library's source folder.

Let's see what is in that folder:
https://github.com/espressif/arduino-esp32/tree/2.0.0/libraries/ESP32/src

Sure enough, there is only a file named dummy.h. So everything is working just as expected.

But why would a library named "ESP32" only have a single header file with this weird name? The answer is provided in the file itself:
https://github.com/espressif/arduino-esp32/blob/2.0.0/libraries/ESP32/src/dummy.h

// This file is here only to silence warnings from Arduino IDE
// Currently IDE doesn't support no-code libraries, like this collection of example sketches.

That's all there is to it. Just an empty file with an explanatory comment to avoid too much confusion, thus the name "dummy".

Even though this library is not much to look at, it serves an important purpose. That purpose is to serve as a container for some example sketches that demonstrate some of the features of the ESP32 boards platform itself. Packaging these in the form of a library causes the Arduino IDE to make them easily accessible to the user via the File > Examples > ESP32 menu. Check them out!

It is possible. Some of the platform bundled libraries used to be integrated into the espressif/arduino-esp32 repository as submodules, and when people did the installation of the development version via Git, but didn't follow the complex instructions carefully, they would end up with the default behavior of only having empty folders where the submodules should have been. I don't remember if these specific libraries were ever submodules. They are not using any submodules at this time.

Another thing I notice is that some (but not all) of the listed libraries have different names in their metadata than the folder name. For example the "ESP32" library is actually defined as "ESP32 BLE Arduino".
https://github.com/espressif/arduino-esp32/blob/2.0.0/libraries/BLE/library.properties#L1

Ideally, the Arduino IDE always uses this "fancy" name when present, only falling back on the folder name in the case of the "1.0 format" libraries that don't have metadata. That is how the classic Arduino IDE works, but I notice that Arduino IDE 2.x uses the "fancy name" in the File > Examples menu, but the folder name in the Sketch > Include Library menu :confused:

1 Like