Come installare una libreria Arduino: gestore, ZIP e manuale
Come installare una libreria Arduino passo passo: Gestore Librerie, file .ZIP o a mano, cambio di versione ed errore No such file or directory risolto.
Installare una libreria Arduino significa aggiungere all'Arduino IDE un pacchetto di codice già pronto, così da poter usare un sensore, un display o un modulo nel tuo sketch, e ci sono tre modi per farlo: il Gestore Librerie (il più semplice e consigliato), aggiungere all'IDE un file .ZIP scaricato oppure copiare a mano la cartella della libreria nella cartella libraries del tuo sketchbook. Una volta installata, scrivi #include <NomeLibreria.h> all'inizio dello sketch e tutte le funzioni della libreria sono pronte all'uso. La libreria giusta si installa in un minuto; la libreria sbagliata o la versione sbagliata possono trasformarsi in ore di caccia agli errori.
In questa guida vediamo i tre metodi passo passo con Arduino IDE 2. Poi imparerai a scegliere quella giusta tra decine di librerie dal nome simile, a tornare a una versione precedente, ad aprire gli esempi di una libreria e a risolvere i due messaggi più frequenti: l'errore No such file or directory e l'avviso Multiple libraries were found. Le ultime sezioni spiegano quali librerie funzionano su ESP32 e Raspberry Pi Pico, quali vanno sostituite e come aggiungere librerie in MicroPython. Se l'IDE non è ancora installato, parti da Come installare l'Arduino IDE.
Cos'è una libreria Arduino e a cosa serve?
Una libreria è un insieme di file di codice che svolge un compito preciso, impacchettato perché altri possano riutilizzarlo: almeno un file header (.h), di solito uno o più file sorgente (.cpp) e quasi sempre qualche sketch di esempio. Il sensore DHT11, per esempio, invia la misura su un solo filo come pacchetto da 40 bit con una temporizzazione al microsecondo. Invece di scrivere tu quella temporizzazione, installi la libreria DHT e scrivi solo dht.readTemperature(); la parte difficile la fa la libreria. Non confondere una libreria con un pacchetto di schede: il pacchetto installato dal Gestore schede insegna all'IDE una nuova famiglia di processori come l'ESP32 o il Pico, mentre la libreria semplifica l'uso di un hardware o di un compito specifico. Le librerie Arduino arrivano da tre posti diversi:
| Tipo di libreria | Da dove arriva? | Dove si trova? | Esempi |
|---|---|---|---|
| Librerie integrate | L'IDE le installa da solo al primo avvio | La cartella libraries dentro Arduino15 | Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse |
| Librerie del pacchetto di schede | Arrivano con il pacchetto che installi dal Gestore schede | La cartella libraries del pacchetto, sotto Arduino15/packages | Wire, SPI, EEPROM, SoftwareSerial per Uno; WiFi, WebServer, HTTPClient, Preferences per ESP32 |
| Librerie che installi tu | Gestore Librerie, .ZIP o copia manuale | La cartella libraries del tuo sketchbook | DHT sensor library, LiquidCrystal I2C, Adafruit SSD1306, ESP32Servo |
Le librerie fornite con il pacchetto di schede, come Wire, SPI o la libreria WiFi dell'ESP32, non vanno installate; basta scrivere la riga #include. Quelle che installi tu finiscono invece nella cartella libraries del tuo sketchbook. Questi sono i percorsi predefiniti per ogni sistema operativo:
| Sistema operativo | Librerie che installi tu | Arduino15 (librerie integrate e pacchetti di schede) |
|---|---|---|
| Windows | C:\Users\<utente>\Documents\Arduino\libraries | C:\Users\<utente>\AppData\Local\Arduino15 |
| macOS | /Users/<utente>/Documents/Arduino/libraries | /Users/<utente>/Library/Arduino15 |
| Linux | /home/<utente>/Arduino/libraries | /home/<utente>/.arduino15 |
Metodo 1: installare una libreria con il Gestore Librerie
Il Gestore Librerie ti permette di cercare tra migliaia di librerie dell'indice ufficiale di Arduino e di installarle con un clic. Le librerie di questo indice seguono regole di confezionamento precise, quindi la struttura delle cartelle non è mai rotta, le altre librerie di cui hanno bisogno (dipendenze) vengono proposte in automatico e l'IDE ti avvisa quando esce una nuova versione. Per questo, se la libreria che cerchi è nell'elenco, usa sempre questo metodo. Come esempio installiamo la libreria di Adafruit per i sensori DHT11 e DHT22:
- Apri Arduino IDE 2 e fai clic sull'icona dei libri nella barra laterale sinistra. Puoi aprire lo stesso pannello anche da Sketch > Includi Libreria > Gestisci librerie o con la scorciatoia Ctrl+Maiusc+I (Cmd+Maiusc+I su macOS). Nell'interfaccia inglese il menu si chiama Sketch > Include Library > Manage Libraries.
- Scrivi DHT sensor library nella casella di ricerca. In pochi secondi compaiono, sotto forma di schede, tutte le librerie che hanno queste parole nel nome o nella descrizione.
- Ogni scheda mostra in alto il nome e l'autore della libreria, sotto una breve descrizione e il link Maggiori informazioni. Vedrai diverse librerie DHT con nomi simili; scegli la scheda DHT sensor library il cui autore è Adafruit.
- L'elenco delle versioni in fondo alla scheda mostra la più recente. Se non hai un motivo particolare, lascia l'ultima versione e fai clic su Installa.
- L'IDE apre una finestra intitolata Installa le dipendenze della libreria e ti dice che la libreria ha bisogno di un'altra libreria chiamata Adafruit Unified Sensor. Fai clic su Installa tutto.
- Nel pannello di output scorrono le righe del download e in basso a destra compare una notifica come Libreria installata correttamente DHT sensor library:1.4.7. Ora la scheda mostra la versione installata.
La scelta nella finestra delle dipendenze è importante. Installa senza le dipendenze installa solo la libreria principale; quando compili ottieni Adafruit_Sensor.h: No such file or directory, perché uno dei file della libreria DHT include quell'header. A volte la catena di dipendenze ha più anelli: la libreria OLED Adafruit SSD1306 richiede la Adafruit GFX Library, che a sua volta richiede Adafruit BusIO. Con Installa tutto l'IDE installa l'intera catena in una volta; a meno che tu non voglia saltare di proposito una dipendenza, usa sempre questa opzione.

Quando l'elenco diventa affollato, i due filtri sopra la casella di ricerca ti semplificano la vita:
| Filtro | Opzioni | A cosa serve? |
|---|---|---|
| Tipo | Tutti, Aggiornabile, Installata, Arduino, Partner, Consigliato, Fornita da terzi, Fuori produzione | Installata mostra quali librerie hai e in quale versione, Aggiornabile quelle con una versione più recente. Arduino elenca le librerie ufficiali, Fornita da terzi quelle della community e Fuori produzione quelle non più sviluppate. |
| Argomento | Schermo, Sensori, Comunicazione, Controllo dispositivi, Sincronizzazione, Archiviazione dati, Elaborazione dati, Segnale di ingresso/uscita, Altro, Senza categoria | Restringe i risultati quando non conosci il nome esatto di una libreria; in Schermo, per esempio, restano solo le librerie per LCD, OLED e TFT. |
Scegliere quella giusta tra librerie con lo stesso nome
Se scrivi solo DHT nel Gestore Librerie ottieni decine di risultati; cercando LiquidCrystal I2C vedrai anche diverse librerie con nomi quasi identici. Anche se controllano lo stesso hardware, i nomi delle funzioni, i parametri del costruttore e gli esempi sono diversi. Il codice scritto per una libreria spesso non compila con un'altra dal nome simile. Per scegliere bene, segui questo ordine:
- Guarda la riga #include del tuo codice: se l'esempio che segui dice #include <LiquidCrystal_I2C.h>, ti serve la libreria che contiene quel file. Gli esempi fatti bene indicano anche il nome della libreria e il suo autore.
- Controlla l'autore: nomi noti come Adafruit, SparkFun, Arduino ed Espressif, o il produttore del componente, pubblicano di solito le librerie meglio documentate e mantenute più a lungo.
- Apri il link Maggiori informazioni: nella pagina della libreria guarda la data dell'ultimo aggiornamento, le segnalazioni aperte e le schede supportate. Una libreria ferma da anni può dare problemi su ESP32 o Pico.
- Guarda la cronologia delle versioni: molte versioni nell'elenco indicano che la libreria viene sviluppata con regolarità. Evita le librerie con una sola versione e senza descrizione.
- Prova prima l'esempio della libreria: dopo l'installazione compila uno dei suoi esempi. Se l'esempio compila ma il tuo codice no, molto probabilmente il tuo codice è stato scritto per un'altra libreria.
| Componente | Cerca nel Gestore Librerie | Libreria consigliata (autore) e dipendenze | Riga #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> |
| Ricevitore IR e telecomando | 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 (su ESP32) | ESP32Servo | ESP32Servo (Kevin Harrington, John K. Bennett) | #include <ESP32Servo.h> |

L'esempio più noto di questa confusione è l'LCD I2C. LiquidCrystal I2C (Frank de Brabander) del Gestore Librerie avvia il display con lcd.init(). Un'altra versione della stessa libreria che circola su GitHub usa invece lcd.begin() senza parametri. Se compili codice scritto per quella versione con la libreria del Gestore Librerie, ottieni no matching function for call to 'LiquidCrystal_I2C::begin()'. La soluzione è semplice: cambia lcd.begin() in lcd.init() oppure parti dagli esempi della libreria installata. Collegamenti e ricerca dell'indirizzo I2C sono spiegati nel dettaglio in Come usare un display LCD I2C.
Prova l'installazione: un termometro con due librerie
Il modo più rapido per verificare che le librerie siano installate bene è compilare un piccolo sketch che le usa. Il codice qui sotto mostra su un LCD 16x2 I2C la temperatura e l'umidità lette da un DHT11. Installa DHT sensor library (con la sua dipendenza) e LiquidCrystal I2C dal Gestore Librerie; collega il pin dati del DHT11 al pin 2 dell'Arduino Uno e i pin SDA e SCL dell'LCD ad A4 e A5. Puoi vedere dove si trovano questi pin sulla scheda con lo strumento 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}Le righe #include iniziali dicono al compilatore quali file di libreria aggiungere. Wire.h arriva con il pacchetto di schede, quindi non si installa a parte; DHT.h e LiquidCrystal_I2C.h arrivano dalle librerie che hai appena installato. Se premi Verifica e vedi la riga Sketch uses ... bytes nel pannello di output, tutte le librerie sono state trovate. Se compare un messaggio rosso No such file or directory, passa alla sezione sugli errori più in basso. Come funziona il sensore e in cosa differisce dal DHT22 è spiegato in Sensore di temperatura e umidità DHT11.
Metodo 2: aggiungere una libreria da un file .ZIP
Alcune librerie non sono nel Gestore Librerie: può essere una libreria nuova non ancora aggiunta all'indice, un driver che il produttore di un sensore pubblica sul proprio sito o una libreria personale di un libro, di un corso o del tuo insegnante. Di solito vengono distribuite tramite GitHub o direttamente come file .zip. L'Arduino IDE può estrarre l'archivio e metterlo da solo nella cartella giusta:
- Nella pagina GitHub della libreria fai clic sul pulsante verde Code e scegli Download ZIP. Se la pagina ha una sezione Releases, è più sicuro scaricare da lì lo zip di una versione stabile.
- Lascia il file scaricato così com'è, senza estrarlo. L'IDE estrae lo zip da solo; questo menu non accetta cartelle.
- Nell'Arduino IDE apri Sketch > Includi Libreria > Aggiungi libreria da file .ZIP... (in inglese Sketch > Include Library > Add .ZIP Library...).
- Nella finestra che si apre seleziona il file .zip scaricato e fai clic su Apri.
- Se l'installazione riesce, in basso a destra compare la notifica La libreria è stata installata con successo dalla cartella .... Se esiste già una libreria con lo stesso nome, l'IDE ti chiede se vuoi sovrascriverla; conferma se vuoi sostituire la versione installata con quella nuova.
- Controlla che la libreria sia arrivata cercando il suo nome in File > Esempi > Esempi da librerie di terzi.
Metodo 3: copiare a mano la libreria nella cartella libraries
L'installazione manuale è utile in un laboratorio scolastico senza internet, con una cartella di libreria che un amico ti passa su una chiavetta USB o con uno zip che l'IDE rifiuta. Devi solo mettere la cartella della libreria nel posto giusto e con la struttura giusta:
- Chiudi l'Arduino IDE. L'IDE legge l'elenco delle librerie all'avvio e potrebbe non vedere subito le cartelle copiate mentre è aperto.
- Estrai il file e trova la cartella che contiene un file library.properties o il file .h della libreria. Quella è la cartella radice della libreria.
- Copia questa cartella nella cartella libraries del tuo sketchbook (su Windows di solito Documenti\Arduino\libraries). Se la cartella libraries non esiste, creala tu; deve chiamarsi esattamente libraries, in minuscolo.
- Togli il suffisso -master o -main dal nome della cartella; per esempio rinomina IRremote-master in IRremote. I nomi delle cartelle delle librerie devono iniziare con una lettera o un numero, contenere solo lettere latine semplici, numeri, trattini bassi, punti e trattini ed essere lunghi al massimo 63 caratteri; non usare spazi né lettere accentate.
- Riapri l'IDE e verifica che la libreria compaia nel menu File > Esempi.
| Struttura delle cartelle | Risultato |
|---|---|
| libraries/DHT_sensor_library/DHT.h | Corretto: struttura vecchia (piatta), l'IDE la trova |
| libraries/DHT_sensor_library/library.properties + src/DHT.h | Corretto: struttura attuale, l'IDE la trova |
| libraries/DHT-master/DHT-sensor-library-master/DHT.h | Sbagliato: c'è un livello di cartella in più, l'IDE non trova la libreria |
| libraries/DHT.h (file senza cartella) | Sbagliato: ogni libreria deve stare nella sua cartella |
| libraries/La mia libreria/ | Rischioso: spazi e lettere accentate violano le regole sui nomi e possono creare problemi in compilazione |
| Cartella di installazione dell'IDE (es. Programmi) | Sbagliato: Arduino IDE 2 non cerca librerie lì; nel vecchio IDE 1.8 potevano essere cancellate aggiornando o disinstallando l'IDE |
Cambiare versione di una libreria: aggiornare e tornare indietro
Le librerie si evolvono e, nei grandi cambi di versione, alcune funzioni cambiano nome o modo d'uso. Se un esempio trovato su internet è stato scritto per una versione di qualche anno fa, potrebbe non compilare con l'ultima versione, oppure compilare e poi funzionare male. In quel caso torni alla versione per cui il codice è stato scritto oppure adatti il codice alla nuova versione. Il Gestore Librerie cambia versione in pochi clic:
- Cerca il nome della libreria nel Gestore Librerie oppure imposta il filtro Tipo su Installata. La scheda mostra la versione installata.
- Apri l'elenco delle versioni in fondo alla scheda. Sotto Altre versioni trovi tutte le versioni pubblicate della libreria.
- Scegli la versione che vuoi e fai clic su Installa. L'IDE rimuove la versione vecchia e installa quella scelta; di ogni libreria c'è una sola versione nella cartella libraries.
- All'avvio l'IDE mostra a volte la notifica Sono disponibili aggiornamenti per alcune librerie. Prima di fare da lì un aggiornamento in blocco, annota da quali versioni dipendono i tuoi progetti funzionanti; un aggiornamento in blocco può cambiare di colpo la versione principale di molte librerie.
- Per eliminare del tutto una libreria, passa il mouse sulla sua scheda e fai clic su Rimuovi; l'IDE chiede conferma e cancella la cartella da libraries.
| Libreria | Codice vecchio | Codice nuovo | Sintomo di versione sbagliata |
|---|---|---|---|
| IRremote | 2.x: IRrecv irrecv(11); irrecv.decode(&results); results.value | 3.x e 4.x: IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.command | Avvisi deprecated nel codice vecchio, codici dei tasti vuoti o errati |
| ArduinoJson | 6.x: StaticJsonDocument<200> doc; | 7.x: JsonDocument doc; | La 7.x compila le vecchie classi con avvisi deprecated; il codice della 5.x (StaticJsonBuffer) non compila affatto |
| LiquidCrystal I2C | Versione GitHub: lcd.begin(); | Versione del Gestore Librerie: lcd.init(); | no matching function for call to 'LiquidCrystal_I2C::begin()' |
| Pacchetto ESP32 ed ESP32Servo | Pacchetto 2.x: ledcSetup(), ledcAttachPin() | Pacchetto 3.x: ledcAttach(); ESP32Servo 3.x | 'ledcSetup' was not declared in this scope |
Il modo migliore per indicare per quale versione hai scritto il codice è annotare nome e versione delle librerie in un commento all'inizio del file. Alcune librerie dichiarano la propria versione anche con una macro; ArduinoJson, per esempio, definisce ARDUINOJSON_VERSION_MAJOR. Lo sketch seguente ferma la compilazione con un messaggio chiaro se è installata la versione principale sbagliata; con la versione giusta crea un piccolo testo JSON e stampa la versione della libreria nel Monitor seriale:
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}Così, quando condividi il codice con i compagni di classe o online, chi ha installato la versione sbagliata vede una sola riga che gli dice cosa fare, invece di errori incomprensibili. Se ti piace la riga di comando, con Arduino CLI puoi installare direttamente una versione precisa: arduino-cli lib install "DHT sensor [email protected]". Per vedere quale versione di ogni libreria viene davvero usata, attiva nelle Preferenze l'output dettagliato durante la compilazione; alla fine compare una riga Using library ... at version ... in folder: ... per ogni libreria.
Errore No such file or directory: cause e soluzione
È l'errore che vedrai più spesso aggiungendo librerie. Se il compilatore non trova in nessuna cartella di librerie il file richiesto da una riga #include, il pannello di output mostra fatal error: DHT.h: No such file or directory e compilation terminated., e in basso a destra compare la notifica Compilation error: DHT.h: No such file or directory. Il nome del file nel messaggio ti dice quale libreria manca. Attenzione: quel file non sempre viene da una riga scritta da te; anche una libreria installata può includerne un'altra:
| File nel messaggio | Causa | Soluzione |
|---|---|---|
| Il file incluso dal tuo codice (DHT.h, LiquidCrystal_I2C.h) | La libreria non è mai stata installata | Cercala nel Gestore Librerie e installala |
| Adafruit_Sensor.h (nel codice DHT) | Manca una dipendenza: durante l'installazione è stato scelto Installa senza le dipendenze | Installa la libreria Adafruit Unified Sensor |
| Adafruit_I2CDevice.h (nel codice OLED o RTC) | Manca Adafruit BusIO | Installa la libreria Adafruit BusIO |
| OneWire.h (nel codice DS18B20) | DallasTemperature non ha installato OneWire in automatico | Installa la libreria OneWire a parte |
| SoftwareSerial.h (su ESP32) | Questa libreria arriva con il pacchetto AVR e non esiste nel pacchetto ESP32 | Usa una porta seriale hardware (Serial2) o installa la libreria EspSoftwareSerial |
| Dht.h, liquidcrystal_i2c.h | Maiuscole e minuscole sbagliate; l'IDE cerca il nome del file lettera per lettera, quindi l'errore compare anche su Windows e macOS | Scrivi la riga #include esattamente come il nome del file nella libreria |
| La libreria sembra installata ma il file non si trova | Un livello di cartella in più dopo una copia manuale, o uno sketchbook diverso da quello usato dall'IDE (OneDrive) | Controlla la struttura delle cartelle e il percorso dello sketchbook nelle Preferenze |
Cosa significa l'avviso Multiple libraries were found?
Questo messaggio compare quando più di una libreria può soddisfare una riga #include del tuo codice. Per esempio, se hai installato nella cartella Documenti una vecchia libreria Servo di un progetto precedente, insieme alla libreria Servo integrata nell'IDE ci sono due candidate, e l'output mostra Multiple libraries were found for "Servo.h" seguito da Used: C:\Users\<utente>\Documents\Arduino\libraries\Servo e Not used: C:\Users\<utente>\AppData\Local\Arduino15\libraries\Servo. Non è un errore ma un'informazione; la compilazione prosegue. C'è un problema solo se la libreria nella riga Used non è quella che vuoi. L'IDE sceglie più o meno in questo ordine:
| Ordine | Cosa guarda l'IDE? | Esempio |
|---|---|---|
| 1 | Compatibilità di architettura | Su un ESP32, una libreria il cui library.properties indica esp32 o * è preferita a una che indica solo avr |
| 2 | Corrispondenza del nome | Per Servo.h, una cartella chiamata esattamente Servo vince su una cartella Servo-master o MyServo |
| 3 | Ottimizzazione per la scheda | Una libreria che indica esplicitamente l'architettura della scheda (es. architectures=esp32) ha la precedenza su una che indica solo * |
| 4 | Posizione | La cartella libraries del tuo sketchbook viene prima delle librerie del pacchetto di schede, che vengono prima delle librerie integrate nell'IDE |
| 5 | Ultima risorsa | Se tutto il resto è uguale, vince la libreria il cui nome somiglia di più al file incluso |
- Leggi la riga Used: la cartella usata è la libreria che ti aspettavi? Se sì, non devi fare nulla; puoi ignorare il messaggio.
- Togli la copia in più: se viene scelta la libreria sbagliata, trovala nel Gestore Librerie e fai clic su Rimuovi, oppure cancella la sua cartella dalla cartella libraries del tuo sketchbook con l'IDE chiuso.
- Attenzione ai resti del vecchio IDE: le vecchie librerie copiate a mano ai tempi di Arduino IDE 1.8 restano nella cartella Documenti e, grazie alla priorità di posizione, scavalcano le librerie integrate aggiornate dell'IDE.
- Non tenere due copie della stessa libreria: se in libraries ci sono due copie come IRremote e IRremote-master, il Gestore Librerie non può aggiornare quella libreria e ti chiede di eliminare a mano i doppioni.
- Fai un backup prima di cancellare: invece di eliminare una cartella, spostala prima temporaneamente sul desktop; se tutto funziona, cancellala dopo.
Aprire gli esempi di una libreria e aggiungerla al codice
Il modo più veloce per imparare una libreria sono i suoi sketch di esempio. Gli esempi arrivano con la versione installata, quindi, a differenza del codice trovato su internet, sono sempre compatibili con essa. Il menu File > Esempi viene costruito in base alla scheda selezionata e ha queste sezioni:
- Esempi integrati: gli esempi di base dell'IDE, come 01.Basics e 02.Digital, dove si trova anche Blink.
- La sezione con il nome della tua scheda (es. Esempi per Arduino Uno): esempi delle librerie fornite con l'IDE e con il pacchetto della scheda selezionata. Con Uno trovi qui Servo, EEPROM e SoftwareSerial; con ESP32, WiFi, WebServer e Preferences.
- Esempi da librerie di terzi: esempi delle librerie che hai installato tu (in inglese Examples from Custom Libraries), per esempio DHT sensor library > DHTtester.
Puoi raggiungere gli esempi di una libreria installata anche dal menu a tre puntini accanto alla sua scheda nel Gestore Librerie. L'esempio si apre in una nuova finestra; se lo modifichi e vuoi salvarlo, l'IDE ti chiede un nuovo nome e una nuova posizione, perché i file di esempio restano protetti nella cartella della libreria. Per aggiungere una libreria al tuo sketch basta fare clic sul suo nome nel menu Sketch > Includi Libreria: l'IDE scrive da solo le righe #include necessarie all'inizio del codice. Alcune librerie contengono più file header, quindi questo menu può aggiungere più righe; puoi cancellare quelle che non usi.
Compatibilità delle librerie su ESP32

Dato che anche l'ESP32 si programma con l'Arduino IDE, la maggior parte delle librerie funziona senza modifiche, soprattutto quelle per sensori e display che comunicano via I2C, SPI o su un solo filo. A creare problemi sono le librerie che toccano direttamente i timer e i registri del processore ATmega328P dell'Arduino Uno. Se l'IDE non trova l'architettura ESP32 nel library.properties di una libreria, all'inizio della compilazione scrive questo avviso: 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). È solo un avviso: LiquidCrystal I2C usa soltanto la libreria Wire e quindi funziona senza problemi su ESP32. La libreria Servo invece ferma di proposito la compilazione con un messaggio #error che inizia con This library only supports boards with an AVR, SAM, SAMD, NRF52. Inoltre non installare dal Gestore Librerie le librerie WiFi, WebServer, HTTPClient, Preferences e BluetoothSerial già fornite con il pacchetto ESP32; altre librerie con lo stesso nome creano solo confusione.
| Su Uno usi | Su ESP32 usa | Perché? |
|---|---|---|
| Servo | ESP32Servo (Gestore Librerie) | La libreria Servo non supporta l'ESP32 e si ferma con #error |
| SoftwareSerial | Serial1, Serial2 (UART hardware) o EspSoftwareSerial | SoftwareSerial fa parte del pacchetto AVR; l'ESP32 ha già tre UART hardware |
| EEPROM | Preferences (fornita con il pacchetto di schede) | Sull'ESP32 la EEPROM è emulata nella flash; Preferences salva coppie chiave-valore in modo più sicuro e semplice |
| TimerOne, MsTimer2 | Ticker (fornita con il pacchetto di schede) | Le librerie che accedono ai registri dei timer AVR non compilano su ESP32 |
Se vuoi usare lo stesso sketch su Uno, ESP32 e Pico, puoi scegliere la libreria giusta per ogni scheda con le macro di architettura definite dai pacchetti di schede. Il pacchetto ESP32 definisce ARDUINO_ARCH_ESP32, il pacchetto arduino-pico del Pico ARDUINO_ARCH_RP2040 e le schede AVR come Uno e Nano ARDUINO_ARCH_AVR. Lo sketch per servo qui sotto compila su tutte e tre le schede; per l'ESP32 devi solo installare la libreria 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}Sull'ESP32 conta anche che la versione della libreria sia compatibile con quella del pacchetto di schede. Nella serie 3.x del pacchetto ESP32 le funzioni PWM (LEDC) sono cambiate: ledcSetup() e ledcAttachPin() sono state rimosse e sostituite da ledcAttach(). Per questo le versioni di librerie e gli esempi che usano le vecchie funzioni falliscono con la 3.x dando 'ledcSetup' was not declared in this scope. Le versioni attuali di ESP32Servo sono scritte per il pacchetto 3.x. La soluzione è passare alla versione attuale della libreria oppure, se devi compilare un vecchio progetto così com'è, riportare nel Gestore schede il pacchetto esp32 alla 2.0.17, l'ultima versione 2.x. Trovi i pin della scheda e un primo progetto Wi-Fi in Cos'è l'ESP32?, e collegamento e alimentazione del servo in Cos'è un servomotore?.
Librerie su Raspberry Pi Pico: Arduino IDE e MicroPython
Se programmi il Pico con l'Arduino IDE (pacchetto di schede Raspberry Pi Pico/RP2040/RP2350 di Earle F. Philhower), le librerie si installano come su Uno e finiscono nella stessa cartella libraries. Il nome di architettura di questo pacchetto è rp2040; il chip RP2350 del Pico 2 usa lo stesso nome. Wire, SPI, Servo, EEPROM e un SoftwareSerial basato su PIO sono inclusi nel pacchetto, e sul Pico W è pronta anche la libreria WiFi. La maggior parte delle librerie per sensori e display di Adafruit funziona bene sul Pico; quelle che toccano i registri AVR non funzionano nemmeno qui. Sul Pico la EEPROM è emulata nella flash, quindi si avvia con EEPROM.begin() e le modifiche si salvano con EEPROM.commit().
In MicroPython una libreria è un file .py (o un .mpy compilato) nel file system del Pico, di solito nella cartella /lib. Moduli come machine, time, dht, onewire, ds18x20, neopixel e framebuf sono già inclusi in MicroPython; scrivi help("modules") nella Shell di Thonny per vedere l'elenco completo. Un driver che non è nell'elenco si aggiunge in quattro modi:
| Metodo | Quando? | Come? |
|---|---|---|
| Gestore pacchetti di Thonny | Il modo più semplice, con il Pico collegato via USB | Cerca in Tools > Manage packages; per ssd1306, per esempio, scegli micropython-ssd1306 e installalo. Il file finisce nella cartella /lib del Pico |
| mpremote | Se usi la riga di comando | Sul computer, mpremote mip install ssd1306 scarica la libreria da micropython-lib e la copia sul Pico |
| mip (solo Pico W) | Con il Pico W connesso al Wi-Fi, senza computer | Esegui import mip e mip.install("ssd1306") direttamente sul Pico |
| Copia manuale | Se la libreria è un singolo file .py | Nel pannello File di Thonny apri la cartella /lib del Pico, fai clic destro sul file del computer e caricalo sul 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 prima parte del codice prova a importare il modulo ssd1306; se manca, collega il Pico W al Wi-Fi, scarica la libreria da micropython-lib e poi scrive un testo sul display. Su un Pico senza Wi-Fi fai la stessa cosa dal computer con Thonny o mpremote. Collegamenti e comandi di disegno dell'OLED sono in Come usare un display OLED (SSD1306), i comandi di base e il file system di MicroPython in Basi di MicroPython. Se configuri il Pico per la prima volta, parti da Cos'è il Raspberry Pi Pico?.
Errori frequenti quando si aggiungono librerie
- Installare la libreria e dimenticare il pacchetto di schede: installare una libreria per ESP32 o Pico non insegna la scheda all'IDE; installa prima il pacchetto di schede dal Gestore schede, poi la libreria.
- Saltare le dipendenze: Installa senza le dipendenze è la causa più comune degli errori per file mancanti come Adafruit_Sensor.h o Adafruit_I2CDevice.h.
- Estrarre lo zip e poi usare il menu .ZIP: quel menu accetta solo file zip; se hai una cartella, copiala a mano nella cartella libraries.
- Mettere la libreria nel posto sbagliato: una libreria copiata nella cartella dello sketch, sul desktop o nella cartella di installazione dell'IDE non viene trovata; il posto giusto è la cartella libraries del tuo sketchbook.
- Più copie della stessa libreria: due cartelle come IRremote e IRremote-master causano l'avviso Multiple libraries e l'uso della versione sbagliata; cancellane una.
- Aggiornare tutto alla cieca: un aggiornamento che salta una versione principale può rompere un progetto funzionante; dai un'occhiata alle note di rilascio della libreria prima di aggiornare.
- Lettere accentate o spazi nella tua libreria: se scrivi una libreria tutta tua, usa nei nomi di cartelle e file solo lettere latine semplici, numeri e trattini bassi.
Una volta presa la mano con l'installazione delle librerie Arduino, ogni nuovo sensore o display diventa questione di pochi minuti: trova nel Gestore Librerie la libreria dell'autore giusto, installala con le sue dipendenze, prova prima il suo esempio e poi passa al tuo codice. Nell'app BlueGrays trovi progetti che usano librerie, come temperatura e umidità con il DHT11, un LCD I2C, un servomotore, un lettore di tessere RFID, un telecomando IR, LED WS2812B e un gioco Pong su OLED, con schemi elettrici e codice spiegato passo passo.
Domande frequenti
Dove vengono installate le librerie Arduino?
Le librerie installate con il Gestore Librerie, con un .ZIP o a mano finiscono nella cartella libraries del tuo sketchbook; su Windows di solito è Documenti\Arduino\libraries, su Linux ~/Arduino/libraries. La posizione esatta è indicata in File > Preferenze, nel campo del percorso della cartella degli sketch. Le librerie integrate nell'IDE e quelle dei pacchetti di schede si trovano invece a parte, nella cartella Arduino15.
Perché la libreria ZIP che ho scaricato non si installa nell'Arduino IDE?
Il motivo più comune è che lo zip contiene più cartelle invece di un'unica cartella di libreria, oppure che la libreria è nascosta in una sottocartella; l'IDE allora segnala "multiple files found in zip file top level" o "library not valid". Estrai lo zip, trova la cartella che contiene library.properties o un file .h e copiala a mano in libraries. Se lo avevi già estratto, il menu .ZIP non accetta la cartella.
Come si disinstalla una libreria Arduino?
Trova la libreria nel Gestore Librerie, passa il mouse sulla sua scheda e fai clic su Rimuovi; l'IDE cancella la sua cartella da libraries. Una libreria installata a mano si può eliminare dalla cartella libraries del tuo sketchbook con l'IDE chiuso. Non toccare le librerie dei pacchetti di schede nella cartella Arduino15.
Come si risolve l'errore "No such file or directory" su Arduino?
Scopri a quale libreria appartiene il file .h del messaggio e installa quella libreria dal Gestore Librerie. Se è un header che non hai incluso tu (es. Adafruit_Sensor.h), manca una dipendenza di una libreria installata. Se l'errore resta anche con la libreria installata, controlla maiuscole e minuscole nella riga #include e la struttura delle cartelle copiate a mano.
Si può installare una libreria Arduino senza internet?
Sì. Scarica lo zip della libreria su un altro computer connesso e portalo con una chiavetta USB. Aggiungi lo zip con Aggiungi libreria da file .ZIP oppure copia la cartella estratta nella cartella libraries del tuo sketchbook; non dimenticare di portare allo stesso modo, una per una, anche le dipendenze della libreria.
Le librerie Arduino funzionano su ESP32 e Raspberry Pi Pico?
La maggior parte delle librerie per sensori e display che comunicano via I2C, SPI o su un solo filo funziona senza modifiche su ESP32 e con il pacchetto Arduino del Pico. Librerie come Servo e TimerOne, che accedono direttamente ai timer del processore AVR, su ESP32 si sostituiscono con ESP32Servo e Ticker, mentre il pacchetto del Pico include una propria libreria Servo. L'avviso "claims to run on avr architecture(s)" da solo non significa che la libreria non funzionerà.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Temperatura e umidità con DHT11
Quanti gradi ci sono nella tua stanza, e l'aria è umida o secca? Il sensore DHT11 misura temperatura e umidità, e l'Arduino scrive i valori su uno schermo LCD a due righe, aggiornandoli ogni paio di s

Utilizzo dello schermo LCD con I2C
Regala al tuo Arduino uno schermo tutto suo e fagli scrivere il primo messaggio. Lo schermo LCD a due righe si collega con pochi fili; prima compare un saluto nella riga in alto, poi un secondo testo

Utilizzo del servomotore
Il braccio di un piccolo servomotore ruota a turno in tre posizioni: tutto all'inizio, esattamente a metà e tutto alla fine, aspettando due secondi a ogni fermata. L'Arduino dice al motore a quale ang

Leggere i codici di un telecomando IR
Ogni tasto del telecomando della TV invia un codice segreto con una luce che non puoi vedere. Il ricevitore a infrarossi cattura quella luce e l'Arduino scrive sullo schermo del computer il codice di

Lettura del valore RFID
Il portachiavi del condominio o la tessera d'ingresso nascondono un numero di identificazione segreto, e questo progetto lo legge. Avvicina la tessera al lettore RFID e l'Arduino scrive il suo numero

Utilizzo della striscia LED WS2812B
Conosci una striscia LED intelligente in cui puoi colorare ogni singola luce per conto suo. L'Arduino accende prima i primi cinque LED di rosso, un secondo dopo gli altri cinque di blu, poi li spegne

Gioco delle Racchette - SSD1306
Una pallina, due racchette e tu: giochi a ping pong, uno dei primissimi videogiochi, su un piccolo display OLED. Con due pulsanti muovi su e giù la tua racchetta a destra, mentre il computer guida que

Configurazione del modulo orologio RTC DS1302
Metti in funzione un piccolo modulo orologio che non dimentica l'ora nemmeno quando l'Arduino è spento. Il modulo ha una sua minuscola batteria e, una volta regolata l'ora, data e ora compaiono ogni s
Altri articoli
App BlueGrays
Costruisci questo circuito passo passo sul telefono
Schema, codice ed elenco componenti in un’unica schermata. Oltre 160 progetti Arduino, ESP32 e Pico da realizzare.
Inquadra con il telefono
Punta la fotocamera sul codice: si apre lo store del tuo telefono.
oppure apri lo store

