Guías · 22 min de lectura

Cómo instalar una librería en Arduino: gestor, ZIP y a mano

Cómo instalar una librería en Arduino paso a paso: Gestor de Bibliotecas, .ZIP o a mano, cambiar de versión y resolver No such file or directory.

Instalar una librería en Arduino significa añadir al Arduino IDE un paquete de código ya hecho para poder usar un sensor, una pantalla o un módulo en tu sketch, y hay tres formas de hacerlo: el Gestor de Bibliotecas (la más fácil y la recomendada), añadir al IDE un archivo .ZIP descargado o copiar a mano la carpeta de la librería en la carpeta libraries de tu sketchbook. Una vez instalada, escribes #include <NombreLibreria.h> al principio del sketch y todas sus funciones quedan listas para usar. La librería correcta se instala en un minuto; la librería equivocada o la versión equivocada puede convertirse en horas buscando errores.

En esta guía vemos los tres métodos paso a paso en Arduino IDE 2. Después aprenderás a elegir la correcta entre decenas de librerías con nombres parecidos, a volver a una versión anterior, a abrir los ejemplos de una librería y a resolver los dos mensajes más frecuentes: el error No such file or directory y el aviso Multiple libraries were found. Las últimas secciones explican qué librerías funcionan en el ESP32 y en la Raspberry Pi Pico, cuáles necesitan un sustituto y cómo añadir librerías en MicroPython. Si todavía no tienes el IDE instalado, empieza por Cómo instalar el Arduino IDE.

¿Qué es una librería de Arduino y para qué sirve?

Una librería es un conjunto de archivos de código que hace un trabajo concreto, empaquetado para que otros puedan reutilizarlo: al menos un archivo de cabecera (.h), normalmente uno o varios archivos fuente (.cpp) y casi siempre algunos sketches de ejemplo. Por ejemplo, el sensor DHT11 envía su medida por un solo cable en un paquete de 40 bits con una temporización de microsegundos. En lugar de programar esa temporización tú mismo, instalas la librería DHT y escribes solo dht.readTemperature(); la parte difícil la hace la librería. No confundas una librería con un paquete de placa: el paquete que instalas desde el Gestor de placas enseña al IDE una nueva familia de procesadores, como el ESP32 o la Pico, mientras que la librería facilita el uso de un hardware o una tarea concreta. Las librerías de Arduino vienen de tres sitios distintos:

Tipo de librería¿De dónde viene?¿Dónde se guarda?Ejemplos
Librerías integradasEl IDE las instala solo la primera vez que se abreLa carpeta libraries dentro de Arduino15Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse
Librerías del paquete de placaLlegan con el paquete que instalas desde el Gestor de placasLa carpeta libraries propia del paquete, dentro de Arduino15/packagesWire, SPI, EEPROM, SoftwareSerial para el Uno; WiFi, WebServer, HTTPClient, Preferences para el ESP32
Librerías que instalas túGestor de Bibliotecas, .ZIP o copia a manoLa carpeta libraries de tu sketchbookDHT sensor library, LiquidCrystal I2C, Adafruit SSD1306, ESP32Servo

Las librerías que vienen con el paquete de placa, como Wire, SPI o la librería WiFi del ESP32, no hace falta instalarlas; basta con escribir la línea #include. Las que instalas tú van a la carpeta libraries de tu sketchbook. Estas son las rutas por defecto según el sistema operativo:

Sistema operativoLibrerías que instalas túArduino15 (librerías integradas y paquetes de placa)
WindowsC:\Users\<usuario>\Documents\Arduino\librariesC:\Users\<usuario>\AppData\Local\Arduino15
macOS/Users/<usuario>/Documents/Arduino/libraries/Users/<usuario>/Library/Arduino15
Linux/home/<usuario>/Arduino/libraries/home/<usuario>/.arduino15
La ubicación real de tu sketchbook aparece en el campo Ruta del Sketchbook de Archivo > Preferencias; la carpeta libraries siempre está dentro. En Windows, si tu carpeta Documentos se sincroniza con OneDrive, la ruta puede ser C:\Users\<usuario>\OneDrive\Documents\Arduino. Las carpetas AppData (Windows), Library (macOS) y .arduino15 (Linux) están ocultas por defecto; activa la opción de mostrar elementos ocultos en el explorador de archivos o pulsa Cmd + Shift + . en el Finder de macOS.

Método 1: instalar una librería con el Gestor de Bibliotecas

El Gestor de Bibliotecas te permite buscar entre miles de librerías del índice oficial de Arduino e instalarlas con un clic. Las librerías de este índice siguen unas reglas fijas de empaquetado, así que la estructura de carpetas nunca está rota, las demás librerías que necesitan (dependencias) se ofrecen automáticamente y el IDE te avisa cuando sale una versión nueva. Por eso, si la librería que buscas está en la lista, usa siempre este método. Como ejemplo, vamos a instalar la librería de Adafruit para los sensores DHT11 y DHT22:

  1. Abre Arduino IDE 2 y haz clic en el icono de libros de la barra lateral izquierda. También puedes abrir el mismo panel desde Sketch > Incluir biblioteca > Gestionar bibliotecas o con el atajo Ctrl+Mayús+I (Cmd+Shift+I en macOS). En la interfaz en inglés el menú se llama Sketch > Include Library > Manage Libraries.
  2. Escribe DHT sensor library en el cuadro de búsqueda. En pocos segundos aparecen, en forma de tarjetas, todas las librerías que tienen esas palabras en el nombre o la descripción.
  3. Cada tarjeta muestra arriba el nombre y el autor de la librería, debajo una breve descripción y el enlace Más información. Verás varias librerías DHT con nombres parecidos; elige la tarjeta DHT sensor library cuyo autor es Adafruit.
  4. La lista de versiones de la parte inferior de la tarjeta muestra la más reciente. Si no tienes un motivo concreto, deja la última versión y pulsa Instalar.
  5. El IDE abre una ventana titulada Instalar las dependencias de la biblioteca y te dice que la librería necesita otra llamada Adafruit Unified Sensor. Haz clic en Instalar todo.
  6. En el panel de salida pasan las líneas de descarga y abajo a la derecha aparece un aviso como Biblioteca DHT sensor library:1.4.7 instalada correctamente. La tarjeta ya muestra la versión instalada.

Lo que eliges en la ventana de dependencias importa. Instalar sin dependencias instala solo la librería principal; al compilar te saldrá Adafruit_Sensor.h: No such file or directory, porque uno de los archivos de la librería DHT incluye esa cabecera. A veces la cadena de dependencias tiene varios eslabones: la librería OLED Adafruit SSD1306 necesita Adafruit GFX Library, y esta a su vez Adafruit BusIO. Con Instalar todo, el IDE instala la cadena completa de una vez; salvo que quieras saltarte una dependencia a propósito, usa siempre esta opción.

Módulo de pantalla OLED I2C de 0,96 pulgadas
Pantalla OLED de 0,96 pulgadas: al instalar la librería Adafruit SSD1306 llegan también Adafruit GFX Library y Adafruit BusIO como dependencias; si falta una, el código no compila.

Cuando la lista se llena de resultados, los dos filtros que hay encima del cuadro de búsqueda te facilitan la tarea:

FiltroOpciones¿Para qué sirve?
TipoTodo, Actualizable, Instalado, Arduino, Socio, Recomendado, Contribuido, RetiradoInstalado muestra qué librerías tienes y en qué versión, Actualizable las que tienen una versión más nueva. Arduino lista las librerías oficiales, Contribuido las de la comunidad y Retirado las que ya no se desarrollan.
TemaPantalla, Sensores, Comunicación, Control de dispositivo, Temporización, Almacenamiento de datos, Procesando datos, Señal Entrada/Salida, Otro, DescategorizadoReduce los resultados cuando no sabes el nombre exacto de una librería; por ejemplo, en Pantalla solo quedan librerías de LCD, OLED y TFT.

Elegir la correcta entre librerías con el mismo nombre

Si escribes solo DHT en el Gestor de Bibliotecas salen decenas de resultados; al buscar LiquidCrystal I2C también verás varias librerías con nombres casi idénticos. Aunque controlan el mismo hardware, sus nombres de funciones, los parámetros del constructor y los ejemplos son distintos. El código escrito para una librería a menudo no compila con otra de nombre parecido. Para elegir bien, sigue este orden:

  • Mira la línea #include de tu código: si el ejemplo que sigues dice #include <LiquidCrystal_I2C.h>, necesitas la librería que contiene ese archivo. Los buenos ejemplos indican también el nombre de la librería y su autor.
  • Comprueba el autor: nombres conocidos como Adafruit, SparkFun, Arduino y Espressif, o el fabricante de la pieza, suelen publicar las librerías mejor documentadas y con mantenimiento más largo.
  • Abre el enlace Más información: en la página de la librería revisa la fecha de la última actualización, los problemas abiertos y las placas que admite. Una librería sin actualizar desde hace años puede dar problemas en un ESP32 o una Pico.
  • Revisa el historial de versiones: muchas versiones en la lista indican que la librería se desarrolla con regularidad. Evita las librerías con una sola versión y sin descripción.
  • Prueba primero el ejemplo de la librería: después de instalarla, compila uno de sus ejemplos. Si el ejemplo compila pero tu código no, lo más probable es que tu código se escribiera para otra librería.
ComponenteBuscar en el Gestor de BibliotecasLibrería recomendada (autor) y dependenciasLínea #include
DHT11 / DHT22DHT sensor libraryDHT sensor library (Adafruit) + Adafruit Unified Sensor#include <DHT.h>
LCD 16x2 I2CLiquidCrystal I2CLiquidCrystal I2C (Frank de Brabander)#include <LiquidCrystal_I2C.h>
OLED SSD1306Adafruit SSD1306Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO#include <Adafruit_SSD1306.h>
DS18B20DallasTemperatureDallasTemperature (Miles Burton) + OneWire#include <DallasTemperature.h>
RFID RC522MFRC522MFRC522 (GithubCommunity)#include <MFRC522.h>
Receptor IR y mandoIRremoteIRremote (shirriff, z3t0, ArminJo)#include <IRremote.hpp>
WS2812B NeoPixelAdafruit NeoPixelAdafruit NeoPixel (Adafruit)#include <Adafruit_NeoPixel.h>
RTC DS1307 / DS3231RTClibRTClib (Adafruit) + Adafruit BusIO#include <RTClib.h>
Servo (en el ESP32)ESP32ServoESP32Servo (Kevin Harrington, John K. Bennett)#include <ESP32Servo.h>
Pantalla LCD 16x2 con módulo I2C
LCD 16x2 con módulo I2C: para esta pantalla hay varias librerías con casi el mismo nombre, y cada una la inicia con una función distinta.

El ejemplo más conocido de esta confusión es la LCD I2C. LiquidCrystal I2C (Frank de Brabander) del Gestor de Bibliotecas inicia la pantalla con lcd.init(). Otra versión de la misma librería que circula por GitHub usa en cambio lcd.begin() sin parámetros. Si compilas código escrito para esa versión con la librería del Gestor de Bibliotecas, obtienes no matching function for call to 'LiquidCrystal_I2C::begin()'. La solución es sencilla: cambia lcd.begin() por lcd.init() o parte de los ejemplos de la librería que instalaste. El cableado y cómo encontrar la dirección I2C los explicamos en detalle en Cómo usar una pantalla LCD I2C.

Prueba la instalación: un indicador de temperatura con dos librerías

La forma más rápida de comprobar que las librerías están bien instaladas es compilar un sketch pequeño que las use. El siguiente código muestra en una LCD 16x2 I2C la temperatura y la humedad que lee un DHT11. Instala DHT sensor library (con su dependencia) y LiquidCrystal I2C desde el Gestor de Bibliotecas; conecta el pin de datos del DHT11 al pin 2 del Arduino Uno y los pines SDA y SCL de la LCD a A4 y A5. Puedes ver dónde están esos pines en la placa con la herramienta Pinout.

Arduino (C++)
1// Gereken kütüphaneler / Required libraries (Kütüphane Yöneticisi / Library Manager):
2//   DHT sensor library (Adafruit) + Adafruit Unified Sensor
3//   LiquidCrystal I2C (Frank de Brabander)
4#include <Wire.h>                  // kart paketiyle gelir / bundled with the board package
5#include <DHT.h>                   // DHT sensor library
6#include <LiquidCrystal_I2C.h>     // LiquidCrystal I2C
7
8#define DHT_PIN 2                  // DHT11 veri pini / DHT11 data pin
9#define DHT_TYPE DHT11             // DHT22 için DHT22 yaz / write DHT22 for a DHT22
10
11DHT dht(DHT_PIN, DHT_TYPE);
12LiquidCrystal_I2C lcd(0x27, 16, 2);    // adres, sütun, satır / address, columns, rows
13
14void setup() {
15  Serial.begin(9600);
16  dht.begin();
17  lcd.init();                      // bu kütüphanede begin() değil init() / init(), not begin(), in this library
18  lcd.backlight();                 // arka ışığı aç / backlight on
19  lcd.print(F("Kutuphaneler OK"));
20  delay(1500);
21}
22
23void loop() {
24  float t = dht.readTemperature(); // santigrat / Celsius
25  float h = dht.readHumidity();    // bağıl nem % / relative humidity %
26
27  if (isnan(t) || isnan(h)) {      // sensör cevap vermedi / sensor did not respond
28    Serial.println(F("DHT okunamadi / DHT read failed"));
29    delay(2000);
30    return;
31  }
32
33  lcd.clear();
34  lcd.setCursor(0, 0);             // sütun 0, satır 0 / column 0, row 0
35  lcd.print(F("Sicaklik: "));
36  lcd.print(t, 1);
37  lcd.print(F(" C"));
38  lcd.setCursor(0, 1);             // ikinci satır / second row
39  lcd.print(F("Nem: %"));
40  lcd.print(h, 0);
41
42  Serial.print(t);
43  Serial.print(F(" C  "));
44  Serial.print(h);
45  Serial.println(F(" %"));
46  delay(2000);                     // DHT11 en fazla saniyede bir ölçer / DHT11 measures at most once per second
47}

Las líneas #include del principio le dicen al compilador qué archivos de librería debe añadir. Wire.h viene con el paquete de placa, así que no se instala aparte; DHT.h y LiquidCrystal_I2C.h vienen de las librerías que acabas de instalar. Si pulsas Verificar y ves la línea Sketch uses ... bytes en el panel de salida, se han encontrado todas las librerías. Si aparece un mensaje rojo No such file or directory, salta a la sección de errores más abajo. Cómo funciona el sensor y en qué se diferencia del DHT22 lo explicamos en Sensor de temperatura y humedad DHT11.

Método 2: añadir una librería desde un archivo .ZIP

Algunas librerías no están en el Gestor de Bibliotecas: puede ser una librería nueva que aún no se ha añadido al índice, un driver que un fabricante de sensores comparte en su propia web o una librería propia de un libro, un curso o tu profesor. Suelen distribuirse por GitHub o directamente como archivo .zip. El Arduino IDE puede descomprimir el archivo y colocarlo en la carpeta correcta él solo:

  1. En la página de GitHub de la librería, haz clic en el botón verde Code y elige Download ZIP. Si la página tiene una sección Releases, es más seguro descargar desde allí el zip de una versión estable.
  2. Deja el archivo descargado tal cual, sin descomprimirlo. El IDE descomprime el zip él mismo; este menú no acepta carpetas.
  3. En el Arduino IDE abre Sketch > Incluir biblioteca > Añadir biblioteca .ZIP... (en inglés, Sketch > Include Library > Add .ZIP Library...).
  4. En la ventana que se abre, selecciona el archivo .zip que descargaste y pulsa Abrir.
  5. Si todo va bien, abajo a la derecha aparece el aviso Biblioteca instalada correctamente desde el archivo .... Si ya existe una librería con el mismo nombre, el IDE te pregunta si quieres sobrescribirla; confirma si quieres sustituir la versión instalada por la nueva.
  6. Comprueba que la librería ha llegado buscando su nombre en Archivo > Ejemplos > Ejemplos de bibliotecas personalizadas.
A veces el IDE rechaza el archivo zip. El error archive is not valid: multiple files found in zip file top level significa que en el nivel superior del archivo hay varios archivos o carpetas en lugar de una única carpeta de librería; suele ser un paquete de proyecto con varias librerías, código y documentos. El error library not valid indica que no hay ningún archivo de cabecera en la raíz de la carpeta ni en su subcarpeta src, es decir, que la librería de verdad se ha quedado un nivel más abajo. En los dos casos, descomprime el zip, busca dentro la carpeta de la librería y cópiala a mano con el método siguiente.

Método 3: copiar la librería a mano en la carpeta libraries

La instalación manual sirve en un aula de informática sin internet, con una carpeta de librería que te pasa un amigo en un pendrive o con un zip que el IDE rechaza. Solo tienes que poner la carpeta de la librería en el sitio correcto y con la estructura correcta:

  1. Cierra el Arduino IDE. El IDE revisa la lista de librerías al arrancar, así que puede no ver las carpetas copiadas mientras está abierto.
  2. Descomprime el archivo y busca la carpeta que contiene un archivo library.properties o el archivo .h de la librería. Esa es la carpeta raíz de la librería.
  3. Copia esa carpeta en la carpeta libraries de tu sketchbook (en Windows suele ser Documentos\Arduino\libraries). Si no existe la carpeta libraries, créala tú; debe llamarse exactamente libraries, en minúsculas.
  4. Quita el sufijo -master o -main del nombre de la carpeta; por ejemplo, cambia IRremote-master por IRremote. Los nombres de carpeta de librería deben empezar por una letra o un número, contener solo letras latinas básicas, números, guiones bajos, puntos y guiones, y tener como máximo 63 caracteres; no uses espacios, tildes ni la ñ.
  5. Vuelve a abrir el IDE y comprueba que la librería aparece en el menú Archivo > Ejemplos.
Estructura de carpetasResultado
libraries/DHT_sensor_library/DHT.hCorrecto: estructura antigua (plana), el IDE la encuentra
libraries/DHT_sensor_library/library.properties + src/DHT.hCorrecto: estructura actual, el IDE la encuentra
libraries/DHT-master/DHT-sensor-library-master/DHT.hIncorrecto: sobra un nivel de carpeta, el IDE no encuentra la librería
libraries/DHT.h (archivo sin carpeta)Incorrecto: cada librería debe estar en su propia carpeta
libraries/Mi librería/Arriesgado: los espacios y las tildes rompen las reglas de nombres y pueden dar problemas al compilar
Carpeta de instalación del IDE (p. ej. Archivos de programa)Incorrecto: Arduino IDE 2 no busca librerías ahí; en el antiguo IDE 1.8 podían borrarse al actualizar o desinstalar el IDE
Si vas a usar una librería en un solo proyecto y quieres que viaje con él cuando lo compartas, crea una carpeta llamada src dentro de la carpeta del sketch y pon ahí los archivos de la librería (p. ej. src/MyLib/MyLib.h). En ese caso la incluyes con comillas y su ruta, no con corchetes angulares: #include "src/MyLib/MyLib.h". El IDE compila la carpeta src junto con el sketch, así que no tienes que instalar nada en la carpeta libraries.

Cambiar la versión de una librería: actualizar y volver atrás

Las librerías evolucionan con el tiempo y, en los cambios de versión grandes, algunas funciones cambian de nombre o de forma de uso. Si un ejemplo que encontraste en internet se escribió para una versión de hace unos años, puede que no compile con la última versión o que compile y funcione mal. En ese caso vuelves a la versión para la que se escribió el código o adaptas el código a la nueva versión. El Gestor de Bibliotecas cambia de versión en unos pocos clics:

  1. Busca el nombre de la librería en el Gestor de Bibliotecas o pon el filtro Tipo en Instalado. La tarjeta muestra la versión instalada.
  2. Abre la lista de versiones de la parte inferior de la tarjeta. En Otras versiones aparecen todas las versiones publicadas de la librería.
  3. Elige la versión que quieras y pulsa Instalar. El IDE quita la versión anterior e instala la elegida; de cada librería solo hay una versión en la carpeta libraries.
  4. Al arrancar, el IDE muestra a veces el aviso Actualizaciones disponibles para algunas de tus bibliotecas. Antes de hacer una actualización masiva desde ahí, apunta de qué versiones dependen tus proyectos que funcionan; una actualización masiva puede cambiar de golpe la versión principal de muchas librerías.
  5. Para borrar una librería por completo, pasa el ratón por encima de su tarjeta y pulsa Eliminar; el IDE pide confirmación y borra la carpeta de libraries.
LibreríaCódigo antiguoCódigo nuevoSíntoma de versión equivocada
IRremote2.x: IRrecv irrecv(11); irrecv.decode(&results); results.value3.x y 4.x: IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.commandAvisos deprecated en código antiguo, códigos de tecla vacíos o erróneos
ArduinoJson6.x: StaticJsonDocument<200> doc;7.x: JsonDocument doc;La 7.x compila las clases antiguas con avisos deprecated; el código de la 5.x (StaticJsonBuffer) no compila
LiquidCrystal I2CVersión de GitHub: lcd.begin();Versión del Gestor de Bibliotecas: lcd.init();no matching function for call to 'LiquidCrystal_I2C::begin()'
Paquete ESP32 y ESP32ServoPaquete 2.x: ledcSetup(), ledcAttachPin()Paquete 3.x: ledcAttach(); ESP32Servo 3.x'ledcSetup' was not declared in this scope

La mejor forma de dejar constancia de la versión para la que escribiste el código es poner el nombre y la versión de las librerías en un comentario al principio del archivo. Algunas librerías también informan de su versión con una macro; ArduinoJson, por ejemplo, define ARDUINOJSON_VERSION_MAJOR. El siguiente sketch detiene la compilación con un mensaje claro si está instalada una versión principal equivocada; con la versión correcta genera un pequeño texto JSON y escribe la versión de la librería en el Monitor Serie:

Arduino (C++)
1// ArduinoJson 7.x (Benoit Blanchon) gerekir / requires ArduinoJson 7.x
2#include <ArduinoJson.h>
3
4#if ARDUINOJSON_VERSION_MAJOR < 7
5#error "Bu kod ArduinoJson 7 ister, Kutuphane Yoneticisinden surumu degistir / This sketch needs ArduinoJson 7"
6#endif
7
8void setup() {
9  Serial.begin(115200);
10  while (!Serial) {}                     // yerel USB'li kartlarda seri portu bekle / wait for native USB serial
11
12  JsonDocument doc;                      // 7.x: boyut vermek gerekmez / 7.x: no capacity needed
13  doc["sensor"] = "DHT11";
14  doc["sicaklik"] = 23.5;
15  doc["nem"] = 48;
16
17  serializeJson(doc, Serial);            // {"sensor":"DHT11","sicaklik":23.5,"nem":48}
18  Serial.println();
19  Serial.print(F("ArduinoJson: "));
20  Serial.println(ARDUINOJSON_VERSION);   // ör. / e.g. 7.4.2
21}
22
23void loop() {
24}

Así, cuando compartas tu código con compañeros de clase o en internet, quien haya instalado la versión equivocada verá una sola línea que le dice qué hacer, en lugar de errores incomprensibles. Si te gusta la línea de comandos, con Arduino CLI puedes instalar directamente una versión concreta: arduino-cli lib install "DHT sensor [email protected]". Para ver qué versión de cada librería se usa realmente, activa en Preferencias la salida detallada durante la compilación; al final se escribe una línea Using library ... at version ... in folder: ... por cada librería.

Error No such file or directory: causas y solución

Es el error que más verás al añadir librerías. Si el compilador no encuentra en ninguna carpeta de librerías el archivo que pide una línea #include, el panel de salida muestra fatal error: DHT.h: No such file or directory y compilation terminated., y abajo a la derecha aparece el aviso Compilation error: DHT.h: No such file or directory. El nombre del archivo en el mensaje te dice qué librería falta. Ten en cuenta que ese archivo no siempre sale de una línea que escribiste tú; una librería que instalaste también puede estar incluyendo otra:

Archivo del mensajeCausaSolución
El archivo que incluye tu código (DHT.h, LiquidCrystal_I2C.h)La librería no se instaló nuncaBúscala en el Gestor de Bibliotecas e instálala
Adafruit_Sensor.h (en código DHT)Falta una dependencia: se eligió Instalar sin dependencias al instalarInstala la librería Adafruit Unified Sensor
Adafruit_I2CDevice.h (en código de OLED o RTC)Falta Adafruit BusIOInstala la librería Adafruit BusIO
OneWire.h (en código DS18B20)DallasTemperature no instaló OneWire automáticamenteInstala la librería OneWire por separado
SoftwareSerial.h (en el ESP32)Esta librería viene con el paquete AVR y no existe en el paquete del ESP32Usa un puerto serie por hardware (Serial2) o instala la librería EspSoftwareSerial
Dht.h, liquidcrystal_i2c.hMayúsculas y minúsculas mal escritas; el IDE busca el nombre del archivo letra por letra, así que falla también en Windows y macOSEscribe la línea #include exactamente igual que el nombre del archivo en la librería
La librería parece instalada pero no encuentra el archivoUn nivel de carpeta de más al copiar a mano o un sketchbook distinto del que usa el IDE (OneDrive)Revisa la estructura de carpetas y la Ruta del Sketchbook en Preferencias
Sube en el panel de salida para ver el mensaje de error completo; la causa real suele estar en la primera línea roja. La ruta de archivo de esa línea muestra qué archivo pidió la cabecera que falta: si la ruta termina en DHT_U.h y el mensaje dice Adafruit_Sensor.h, quien necesita el archivo es la librería DHT, no tu código. Para erratas, puntos y coma que faltan y otros errores de compilación como was not declared in this scope, consulta Errores de compilación en Arduino.

¿Qué significa el aviso Multiple libraries were found?

Este mensaje aparece cuando más de una librería puede satisfacer una línea #include de tu código. Por ejemplo, si instalaste en tu carpeta Documentos una librería Servo antigua de un proyecto anterior, junto con la librería Servo integrada del IDE hay dos candidatas, y la salida muestra Multiple libraries were found for "Servo.h" y debajo Used: C:\Users\<usuario>\Documents\Arduino\libraries\Servo y Not used: C:\Users\<usuario>\AppData\Local\Arduino15\libraries\Servo. No es un error, sino información; la compilación continúa. Solo hay un problema si la librería de la línea Used no es la que quieres. El IDE elige más o menos en este orden:

Orden¿Qué mira el IDE?Ejemplo
1Compatibilidad de arquitecturaEn un ESP32 se prefiere una librería cuyo library.properties diga esp32 o * frente a una que solo diga avr
2Coincidencia de nombrePara Servo.h, una carpeta llamada exactamente Servo gana a una carpeta Servo-master o MyServo
3Optimizada para la placaUna librería que nombra explícitamente la arquitectura de la placa (p. ej. architectures=esp32) tiene prioridad sobre una que solo dice *
4UbicaciónLa carpeta libraries de tu sketchbook va antes que las librerías del paquete de placa, y estas antes que las librerías integradas del IDE
5Último recursoSi todo lo demás es igual, gana la librería cuyo nombre se parece más al del archivo incluido
  • Lee la línea Used: ¿la carpeta usada es la librería que esperabas? Si es así, no tienes que hacer nada; puedes ignorar el mensaje.
  • Quita la copia sobrante: si se elige la librería equivocada, búscala en el Gestor de Bibliotecas y pulsa Eliminar, o borra su carpeta de la carpeta libraries de tu sketchbook con el IDE cerrado.
  • Cuidado con los restos del IDE antiguo: las librerías antiguas copiadas a mano en la época de Arduino IDE 1.8 siguen en tu carpeta Documentos y, por la prioridad de ubicación, se imponen a las librerías integradas actualizadas del IDE.
  • No guardes dos copias de la misma librería: si en libraries hay dos copias como IRremote e IRremote-master, el Gestor de Bibliotecas no puede actualizar esa librería y te pide que borres los duplicados a mano.
  • Haz una copia antes de borrar: en lugar de borrar la carpeta, muévela primero al escritorio; si todo funciona, bórrala después.
No toques a mano la subcarpeta packages de Arduino15 ni las librerías integradas. Librerías como Wire, SPI o WiFi que hay ahí forman parte del paquete de placa; si las borras, no compila nada para esa placa y tendrás que reinstalar el paquete desde el Gestor de placas. La copia que da problemas está casi siempre en la carpeta libraries de tu propio sketchbook.

Abrir los ejemplos de una librería y añadirla a tu código

La forma más rápida de aprender a usar una librería son sus sketches de ejemplo. Los ejemplos llegan con la versión que instalaste, así que, a diferencia del código de internet, siempre encajan con ella. El menú Archivo > Ejemplos se construye según la placa seleccionada y tiene estas secciones:

  • Ejemplos integrados: los ejemplos básicos del IDE, como 01.Basics y 02.Digital, donde está Blink.
  • La sección con el nombre de tu placa (p. ej. Ejemplos para Arduino Uno): ejemplos de las librerías que vienen con el IDE y con el paquete de la placa seleccionada. Con un Uno encontrarás aquí Servo, EEPROM y SoftwareSerial; con un ESP32, WiFi, WebServer y Preferences.
  • Ejemplos de bibliotecas personalizadas: ejemplos de las librerías que instalaste tú (en inglés, Examples from Custom Libraries), por ejemplo DHT sensor library > DHTtester.

También puedes llegar a los ejemplos de una librería instalada desde el menú de tres puntos junto a su tarjeta en el Gestor de Bibliotecas. El ejemplo se abre en una ventana nueva; si lo cambias y quieres guardarlo, el IDE te pide un nombre y una ubicación nuevos, porque los archivos de ejemplo se conservan protegidos en la carpeta de la librería. Para añadir una librería a tu propio sketch, basta con hacer clic en su nombre en el menú Sketch > Incluir biblioteca: el IDE escribe él mismo las líneas #include necesarias al principio del código. Algunas librerías tienen varios archivos de cabecera, así que este menú puede añadir varias líneas; puedes borrar las que no uses.

Si los ejemplos de tu librería no aparecen en el menú, revisa primero la placa seleccionada: la lista de ejemplos se construye para esa placa, y es posible que no se muestren los ejemplos de librerías que no admiten su arquitectura. Si copiaste la librería a mano, reinicia el IDE. Si la estructura de carpetas está mal (un nivel de más), la librería y sus ejemplos quedan totalmente invisibles.

Compatibilidad de librerías en el ESP32

Placa de desarrollo ESP32
ESP32: la mayoría de las librerías de Arduino funcionan, pero las que acceden directamente a los temporizadores y registros del Uno se sustituyen por equivalentes para ESP32.

Como el ESP32 también se programa con el Arduino IDE, la mayoría de las librerías funcionan en él sin cambios, sobre todo las de sensores y pantallas que se comunican por I2C, SPI o un solo cable. Las que dan problemas son las que tocan directamente los temporizadores y registros del procesador ATmega328P del Arduino Uno. Si el IDE no encuentra la arquitectura del ESP32 en el library.properties de una librería, escribe este aviso al empezar a compilar: WARNING: library LiquidCrystal I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp32 architecture(s). Es solo un aviso: LiquidCrystal I2C solo usa la librería Wire, así que funciona sin problemas en el ESP32. La librería Servo, en cambio, detiene la compilación a propósito con un mensaje #error que empieza por This library only supports boards with an AVR, SAM, SAMD, NRF52. Además, no instales desde el Gestor de Bibliotecas las librerías WiFi, WebServer, HTTPClient, Preferences y BluetoothSerial que ya vienen con el paquete del ESP32; otras librerías con el mismo nombre solo crean confusión.

Lo que usas en el UnoUsa en el ESP32¿Por qué?
ServoESP32Servo (Gestor de Bibliotecas)La librería Servo no admite el ESP32 y se detiene con #error
SoftwareSerialSerial1, Serial2 (UART por hardware) o EspSoftwareSerialSoftwareSerial pertenece al paquete AVR; el ESP32 ya tiene tres UART por hardware
EEPROMPreferences (viene con el paquete de placa)En el ESP32 la EEPROM se emula en la flash; Preferences guarda pares clave-valor de forma más segura y sencilla
TimerOne, MsTimer2Ticker (viene con el paquete de placa)Las librerías que acceden a los registros de los temporizadores AVR no compilan en el ESP32

Si quieres usar el mismo sketch en el Uno, el ESP32 y la Pico, puedes elegir la librería adecuada para cada placa con las macros de arquitectura que definen los paquetes de placa. El paquete del ESP32 define ARDUINO_ARCH_ESP32, el paquete arduino-pico de la Pico ARDUINO_ARCH_RP2040 y las placas AVR como el Uno y el Nano ARDUINO_ARCH_AVR. El siguiente sketch de servo compila en las tres placas; para el ESP32 solo tienes que instalar la librería ESP32Servo:

Arduino (C++)
1// Aynı kod Uno, ESP32 ve Pico'da / Same sketch on Uno, ESP32 and Pico
2#if defined(ARDUINO_ARCH_ESP32)
3  #include <ESP32Servo.h>            // Kütüphane Yöneticisi: ESP32Servo / Library Manager: ESP32Servo
4  const int SERVO_PIN = 18;          // güvenli bir GPIO / a safe GPIO
5#elif defined(ARDUINO_ARCH_RP2040)
6  #include <Servo.h>                 // arduino-pico paketiyle gelir / bundled with the arduino-pico core
7  const int SERVO_PIN = 15;          // GP15
8#else
9  #include <Servo.h>                 // IDE ile gelir (Uno, Nano, Mega) / bundled with the IDE
10  const int SERVO_PIN = 9;
11#endif
12
13Servo servo;
14
15void setup() {
16#if defined(ARDUINO_ARCH_ESP32)
17  servo.setPeriodHertz(50);          // yalnız ESP32: 50 Hz servo sinyali / ESP32 only: 50 Hz servo signal
18#endif
19  servo.attach(SERVO_PIN, 500, 2400); // darbe aralığı mikrosaniye / pulse range in microseconds
20}
21
22void loop() {
23  servo.write(0);    delay(1000);    // 0 derece / 0 degrees
24  servo.write(90);   delay(1000);    // orta konum / center
25  servo.write(180);  delay(1000);    // 180 derece / 180 degrees
26}

En el ESP32 también importa que la versión de la librería coincida con la versión del paquete de placa. En la serie 3.x del paquete del ESP32 cambiaron las funciones PWM (LEDC): ledcSetup() y ledcAttachPin() se eliminaron y se sustituyeron por ledcAttach(). Por eso las versiones de librerías y los ejemplos que usan las funciones antiguas fallan en 3.x con 'ledcSetup' was not declared in this scope. Las versiones actuales de ESP32Servo están escritas para el paquete 3.x. La solución es pasar a la versión actual de la librería o, si necesitas compilar un proyecto antiguo sin cambios, bajar el paquete esp32 en el Gestor de placas a la 2.0.17, la última versión 2.x. Encontrarás los pines de la placa y un primer proyecto Wi-Fi en ¿Qué es el ESP32?, y la conexión y alimentación del servo en ¿Qué es un servomotor?.

Librerías en la Raspberry Pi Pico: Arduino IDE y MicroPython

Si programas la Pico con el Arduino IDE (paquete de placa Raspberry Pi Pico/RP2040/RP2350 de Earle F. Philhower), las librerías se instalan igual que en el Uno y van a la misma carpeta libraries. El nombre de arquitectura de este paquete es rp2040; el chip RP2350 de la Pico 2 usa el mismo nombre. Wire, SPI, Servo, EEPROM y un SoftwareSerial basado en PIO vienen dentro del paquete de placa, y en la Pico W también está lista la librería WiFi. La mayoría de las librerías de sensores y pantallas de Adafruit funcionan bien en la Pico; las que tocan registros AVR tampoco funcionan aquí. En la Pico la EEPROM se emula en la flash, así que se inicia con EEPROM.begin() y los cambios se guardan con EEPROM.commit().

En MicroPython, una librería es un archivo .py (o un .mpy compilado) en el sistema de archivos de la Pico, normalmente dentro de la carpeta /lib. Módulos como machine, time, dht, onewire, ds18x20, neopixel y framebuf ya vienen con MicroPython; escribe help("modules") en la Shell de Thonny para ver la lista completa. Un driver que no esté en la lista lo añades de cuatro formas:

Método¿Cuándo?¿Cómo?
Gestor de paquetes de ThonnyLa forma más fácil, con la Pico conectada por USBBusca en Tools > Manage packages; para ssd1306, por ejemplo, elige micropython-ssd1306 e instálalo. El archivo se guarda en la carpeta /lib de la Pico
mpremoteSi usas la línea de comandosEn el ordenador, mpremote mip install ssd1306 descarga la librería de micropython-lib y la copia a la Pico
mip (solo Pico W)Con la Pico W conectada al Wi-Fi, sin ordenadorEjecuta import mip y mip.install("ssd1306") en la propia Pico
Copia manualSi la librería es un único archivo .pyEn el panel Archivos de Thonny abre la carpeta /lib de la Pico, haz clic derecho en el archivo del ordenador y súbelo a la Pico
MicroPython
1# Pico W: kütüphane yoksa karttan kur, sonra dene / Pico W: install the library from the board if missing, then test
2import time
3
4try:
5    import ssd1306                          # zaten kurulu mu? / already installed?
6except ImportError:
7    import network, mip
8    wlan = network.WLAN(network.STA_IF)
9    wlan.active(True)
10    wlan.connect("AG_ADI", "SIFRE")         # kendi Wi-Fi ağın / your own Wi-Fi network
11    for _ in range(40):                     # en fazla 20 sn bekle / wait up to 20 s
12        if wlan.isconnected():
13            break
14        time.sleep(0.5)
15    if not wlan.isconnected():              # ağa bağlanamadı / could not join the network
16        raise RuntimeError("Wi-Fi baglantisi yok / no Wi-Fi connection")
17    mip.install("ssd1306")                  # /lib klasörüne iner / lands in /lib
18    import ssd1306
19
20from machine import Pin, I2C
21
22i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)   # GP4 = SDA, GP5 = SCL
23oled = ssd1306.SSD1306_I2C(128, 64, i2c)
24oled.fill(0)                                 # ekranı temizle / clear the screen
25oled.text("Kutuphane OK", 0, 0)
26oled.show()                                  # ekrana gönder / push to the screen

La primera parte del código intenta importar el módulo ssd1306; si no está, conecta la Pico W al Wi-Fi, descarga la librería de micropython-lib y después escribe un texto en la pantalla. En una Pico sin Wi-Fi haces lo mismo desde el ordenador con Thonny o mpremote. El cableado y los comandos de dibujo de la OLED están en Cómo usar una pantalla OLED (SSD1306), y los comandos básicos y el sistema de archivos de MicroPython en Fundamentos de MicroPython. Si vas a configurar la Pico por primera vez, empieza por ¿Qué es la Raspberry Pi Pico?.

Errores frecuentes al añadir librerías

  • Instalar la librería y olvidar el paquete de placa: instalar una librería para el ESP32 o la Pico no le enseña la placa al IDE; instala primero el paquete de placa desde el Gestor de placas y después la librería.
  • Saltarse las dependencias: Instalar sin dependencias es la causa más habitual de errores por archivos que faltan, como Adafruit_Sensor.h o Adafruit_I2CDevice.h.
  • Descomprimir el zip y luego usar el menú .ZIP: ese menú solo acepta archivos zip; si tienes una carpeta, cópiala a mano en la carpeta libraries.
  • Poner la librería en el sitio equivocado: una librería copiada dentro de la carpeta del sketch, en el escritorio o en la carpeta de instalación del IDE no se encuentra; el sitio correcto es la carpeta libraries de tu sketchbook.
  • Varias copias de la misma librería: dos carpetas como IRremote e IRremote-master provocan el aviso Multiple libraries y que se use la versión equivocada; borra una.
  • Actualizarlo todo a ciegas: una actualización que salta de versión principal puede romper un proyecto que funcionaba; echa un vistazo a las notas de versión de la librería antes de actualizar.
  • Tildes o espacios en tu propia librería: si escribes tu propia librería, usa en los nombres de carpetas y archivos solo letras latinas básicas, números y guiones bajos.
Cuando empieces un proyecto, escribe en un comentario al principio del código el nombre, el autor y la versión de cada librería que uses, por ejemplo // DHT sensor library (Adafruit) 1.4.7. Cuando vuelvas a abrir el proyecto meses después o se lo pases a un amigo, verás de un vistazo qué versión de cada librería hay que instalar. Si tu código compila pero no se sube a la placa, el problema no es la librería; consulta mejor Error al subir código a Arduino.

Cuando dominas la instalación de librerías en Arduino, cada sensor y pantalla nuevos son cosa de unos minutos: busca en el Gestor de Bibliotecas la librería del autor adecuado, instálala con sus dependencias, prueba primero su propio ejemplo y luego pasa a tu código. En la app BlueGrays encontrarás proyectos que usan librerías, como temperatura y humedad con el DHT11, una LCD I2C, un servomotor, un lector de tarjetas RFID, un mando IR, LEDs WS2812B y un juego Pong en OLED, con esquemas de circuito y código explicado paso a paso.

Preguntas frecuentes

¿Dónde se instalan las librerías de Arduino?

Las librerías que instalas con el Gestor de Bibliotecas, con un .ZIP o a mano van a la carpeta libraries de tu sketchbook; en Windows suele ser Documentos\Arduino\libraries y en Linux ~/Arduino/libraries. La ubicación exacta aparece en el campo Ruta del Sketchbook de Archivo > Preferencias. Las librerías integradas del IDE y las de los paquetes de placa se guardan aparte, en la carpeta Arduino15.

¿Por qué no se instala mi librería ZIP descargada en el Arduino IDE?

Lo más habitual es que el zip contenga varias carpetas en lugar de una sola carpeta de librería, o que la librería esté metida en una subcarpeta; entonces el IDE muestra "multiple files found in zip file top level" o "library not valid". Descomprímelo, busca la carpeta que tiene library.properties o un archivo .h y cópiala a mano en libraries. Si ya lo habías descomprimido, el menú .ZIP no acepta la carpeta.

¿Cómo se desinstala una librería de Arduino?

Busca la librería en el Gestor de Bibliotecas, pasa el ratón por encima de su tarjeta y pulsa Eliminar; el IDE borra su carpeta de libraries. Una librería que instalaste a mano puedes borrarla de la carpeta libraries de tu sketchbook con el IDE cerrado. No toques las librerías de los paquetes de placa que hay en la carpeta Arduino15.

¿Cómo soluciono el error "No such file or directory" en Arduino?

Averigua a qué librería pertenece el archivo .h del mensaje e instala esa librería desde el Gestor de Bibliotecas. Si es una cabecera que no incluiste tú (p. ej. Adafruit_Sensor.h), falta una dependencia de una librería instalada. Si el error sigue con la librería instalada, revisa las mayúsculas y minúsculas de la línea #include y la estructura de las carpetas copiadas a mano.

¿Se puede instalar una librería de Arduino sin internet?

Sí. Descarga el zip de la librería en otro ordenador con conexión y llévalo en un pendrive. Añade el zip con Añadir biblioteca .ZIP o copia la carpeta descomprimida en la carpeta libraries de tu sketchbook; no olvides traer también, una a una, las dependencias de la librería.

¿Funcionan las librerías de Arduino en el ESP32 y la Raspberry Pi Pico?

La mayoría de las librerías de sensores y pantallas que se comunican por I2C, SPI o un solo cable funcionan sin cambios en el ESP32 y con el paquete Arduino de la Pico. Librerías como Servo y TimerOne, que acceden directamente a los temporizadores del procesador AVR, se sustituyen en el ESP32 por ESP32Servo y Ticker, mientras que el paquete de la Pico incluye su propia librería Servo. El aviso "claims to run on avr architecture(s)" por sí solo no significa que la librería no vaya a funcionar.

Ver todos los proyectos
Temperatura y humedad con DHT11
#55Intermedio

Temperatura y humedad con DHT11

¿Qué temperatura hace en tu habitación, y el aire está húmedo o seco? El sensor DHT11 mide la temperatura y la humedad, y el Arduino escribe los valores en una pantalla LCD de dos líneas, actualizándo

4.7(47)
64
Uso de la pantalla LCD con I2C
#32Principiante
Premium

Uso de la pantalla LCD con I2C

Dale a tu Arduino su propia pantalla y haz que escriba su primer mensaje. La pantalla LCD de dos líneas se conecta con solo unos pocos cables; primero aparece un saludo en la línea de arriba, luego un

4.8(53)
70
Uso del servomotor
#35Principiante
Premium

Uso del servomotor

El brazo de un pequeño servomotor gira por turnos a tres posiciones: al principio del todo, justo al centro y al final del todo, esperando dos segundos en cada parada. El Arduino le dice al motor en q

4.7(48)
67
Leer los códigos de un mando IR
#16Principiante
Premium

Leer los códigos de un mando IR

Cada botón del mando de la tele envía un código secreto con una luz que no puedes ver. El receptor de infrarrojos atrapa esa luz y el Arduino escribe en la pantalla de tu ordenador el código de cada b

4.5(39)
55
Lectura de valores RFID
#53Principiante
Premium

Lectura de valores RFID

El llavero del portal o la tarjeta de acceso guardan un número de identificación secreto, y este proyecto lo lee. Acerca la tarjeta al lector RFID y el Arduino escribe su número en la pantalla del ord

4.7(47)
61
Uso de la tira LED WS2812B
#69Intermedio
Premium

Uso de la tira LED WS2812B

Conoces una tira LED inteligente en la que puedes dar color a cada luz por separado. El Arduino enciende primero los cinco primeros LED en rojo, un segundo después los otros cinco en azul, luego los a

4.8(54)
70
Juego de Raquetas - SSD1306
#86Intermedio
Premium

Juego de Raquetas - SSD1306

Una pelota, dos palas y tú: juegas al tenis de mesa, uno de los primeros videojuegos de la historia, en una pequeña pantalla OLED. Con dos botones mueves tu pala de la derecha arriba y abajo, mientras

4.5(47)
65
Configuración del módulo de reloj RTC DS1302
#45Principiante
Premium

Configuración del módulo de reloj RTC DS1302

Pones en marcha un pequeño módulo de reloj que no olvida la hora aunque el Arduino se apague. El módulo tiene su propia pila diminuta y, una vez puesta la hora, la fecha y la hora aparecen cada segund

4.5(23)
31