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 integradas | El IDE las instala solo la primera vez que se abre | La carpeta libraries dentro de Arduino15 | Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse |
| Librerías del paquete de placa | Llegan con el paquete que instalas desde el Gestor de placas | La carpeta libraries propia del paquete, dentro de Arduino15/packages | Wire, 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 mano | La carpeta libraries de tu sketchbook | DHT 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 operativo | Librerías que instalas tú | Arduino15 (librerías integradas y paquetes de placa) |
|---|---|---|
| Windows | C:\Users\<usuario>\Documents\Arduino\libraries | C:\Users\<usuario>\AppData\Local\Arduino15 |
| macOS | /Users/<usuario>/Documents/Arduino/libraries | /Users/<usuario>/Library/Arduino15 |
| Linux | /home/<usuario>/Arduino/libraries | /home/<usuario>/.arduino15 |
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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.

Cuando la lista se llena de resultados, los dos filtros que hay encima del cuadro de búsqueda te facilitan la tarea:
| Filtro | Opciones | ¿Para qué sirve? |
|---|---|---|
| Tipo | Todo, Actualizable, Instalado, Arduino, Socio, Recomendado, Contribuido, Retirado | Instalado 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. |
| Tema | Pantalla, Sensores, Comunicación, Control de dispositivo, Temporización, Almacenamiento de datos, Procesando datos, Señal Entrada/Salida, Otro, Descategorizado | Reduce 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.
| Componente | Buscar en el Gestor de Bibliotecas | Librería recomendada (autor) y dependencias | Línea #include |
|---|---|---|---|
| DHT11 / DHT22 | DHT sensor library | DHT sensor library (Adafruit) + Adafruit Unified Sensor | #include <DHT.h> |
| LCD 16x2 I2C | LiquidCrystal I2C | LiquidCrystal I2C (Frank de Brabander) | #include <LiquidCrystal_I2C.h> |
| OLED SSD1306 | Adafruit SSD1306 | Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO | #include <Adafruit_SSD1306.h> |
| DS18B20 | DallasTemperature | DallasTemperature (Miles Burton) + OneWire | #include <DallasTemperature.h> |
| RFID RC522 | MFRC522 | MFRC522 (GithubCommunity) | #include <MFRC522.h> |
| Receptor IR y mando | IRremote | IRremote (shirriff, z3t0, ArminJo) | #include <IRremote.hpp> |
| WS2812B NeoPixel | Adafruit NeoPixel | Adafruit NeoPixel (Adafruit) | #include <Adafruit_NeoPixel.h> |
| RTC DS1307 / DS3231 | RTClib | RTClib (Adafruit) + Adafruit BusIO | #include <RTClib.h> |
| Servo (en el ESP32) | ESP32Servo | ESP32Servo (Kevin Harrington, John K. Bennett) | #include <ESP32Servo.h> |

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.
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:
- 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.
- Deja el archivo descargado tal cual, sin descomprimirlo. El IDE descomprime el zip él mismo; este menú no acepta carpetas.
- En el Arduino IDE abre Sketch > Incluir biblioteca > Añadir biblioteca .ZIP... (en inglés, Sketch > Include Library > Add .ZIP Library...).
- En la ventana que se abre, selecciona el archivo .zip que descargaste y pulsa Abrir.
- 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.
- Comprueba que la librería ha llegado buscando su nombre en Archivo > Ejemplos > Ejemplos de bibliotecas personalizadas.
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:
- 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.
- 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.
- 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.
- 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 ñ.
- Vuelve a abrir el IDE y comprueba que la librería aparece en el menú Archivo > Ejemplos.
| Estructura de carpetas | Resultado |
|---|---|
| libraries/DHT_sensor_library/DHT.h | Correcto: estructura antigua (plana), el IDE la encuentra |
| libraries/DHT_sensor_library/library.properties + src/DHT.h | Correcto: estructura actual, el IDE la encuentra |
| libraries/DHT-master/DHT-sensor-library-master/DHT.h | Incorrecto: 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 |
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:
- 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.
- Abre la lista de versiones de la parte inferior de la tarjeta. En Otras versiones aparecen todas las versiones publicadas de la librería.
- 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.
- 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.
- 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ía | Código antiguo | Código nuevo | Síntoma de versión equivocada |
|---|---|---|---|
| IRremote | 2.x: IRrecv irrecv(11); irrecv.decode(&results); results.value | 3.x y 4.x: IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.command | Avisos deprecated en código antiguo, códigos de tecla vacíos o erróneos |
| ArduinoJson | 6.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 I2C | Versió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 ESP32Servo | Paquete 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:
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 mensaje | Causa | Solución |
|---|---|---|
| El archivo que incluye tu código (DHT.h, LiquidCrystal_I2C.h) | La librería no se instaló nunca | Bú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 instalar | Instala la librería Adafruit Unified Sensor |
| Adafruit_I2CDevice.h (en código de OLED o RTC) | Falta Adafruit BusIO | Instala la librería Adafruit BusIO |
| OneWire.h (en código DS18B20) | DallasTemperature no instaló OneWire automáticamente | Instala 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 ESP32 | Usa un puerto serie por hardware (Serial2) o instala la librería EspSoftwareSerial |
| Dht.h, liquidcrystal_i2c.h | Mayúsculas y minúsculas mal escritas; el IDE busca el nombre del archivo letra por letra, así que falla también en Windows y macOS | Escribe la línea #include exactamente igual que el nombre del archivo en la librería |
| La librería parece instalada pero no encuentra el archivo | Un 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 |
¿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 |
|---|---|---|
| 1 | Compatibilidad de arquitectura | En un ESP32 se prefiere una librería cuyo library.properties diga esp32 o * frente a una que solo diga avr |
| 2 | Coincidencia de nombre | Para Servo.h, una carpeta llamada exactamente Servo gana a una carpeta Servo-master o MyServo |
| 3 | Optimizada para la placa | Una librería que nombra explícitamente la arquitectura de la placa (p. ej. architectures=esp32) tiene prioridad sobre una que solo dice * |
| 4 | Ubicación | La 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 recurso | Si 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.
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.
Compatibilidad de librerías en el 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 Uno | Usa en el ESP32 | ¿Por qué? |
|---|---|---|
| Servo | ESP32Servo (Gestor de Bibliotecas) | La librería Servo no admite el ESP32 y se detiene con #error |
| SoftwareSerial | Serial1, Serial2 (UART por hardware) o EspSoftwareSerial | SoftwareSerial pertenece al paquete AVR; el ESP32 ya tiene tres UART por hardware |
| EEPROM | Preferences (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, MsTimer2 | Ticker (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:
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 Thonny | La forma más fácil, con la Pico conectada por USB | Busca 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 |
| mpremote | Si usas la línea de comandos | En 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 ordenador | Ejecuta import mip y mip.install("ssd1306") en la propia Pico |
| Copia manual | Si la librería es un único archivo .py | En 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 |
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 screenLa 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 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.
Proyectos para hacer después de leer esto
Ver todos los proyectos
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

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

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

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

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

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

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

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
Más artículos
App BlueGrays
Monta este circuito paso a paso en tu teléfono
Esquema, código y lista de piezas en una sola pantalla. Más de 160 proyectos de Arduino, ESP32 y Pico listos para montar.
Escanea con tu teléfono
Apunta la cámara al código y se abrirá la tienda de apps de tu teléfono.
o ábrela en la tienda

