Guide · 21 min di lettura

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 libreriaDa dove arriva?Dove si trova?Esempi
Librerie integrateL'IDE le installa da solo al primo avvioLa cartella libraries dentro Arduino15Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse
Librerie del pacchetto di schedeArrivano con il pacchetto che installi dal Gestore schedeLa cartella libraries del pacchetto, sotto Arduino15/packagesWire, SPI, EEPROM, SoftwareSerial per Uno; WiFi, WebServer, HTTPClient, Preferences per ESP32
Librerie che installi tuGestore Librerie, .ZIP o copia manualeLa cartella libraries del tuo sketchbookDHT 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 operativoLibrerie che installi tuArduino15 (librerie integrate e pacchetti di schede)
WindowsC:\Users\<utente>\Documents\Arduino\librariesC:\Users\<utente>\AppData\Local\Arduino15
macOS/Users/<utente>/Documents/Arduino/libraries/Users/<utente>/Library/Arduino15
Linux/home/<utente>/Arduino/libraries/home/<utente>/.arduino15
La posizione reale del tuo sketchbook è indicata nel campo Percorso della cartella degli sketch in File > Preferenze; la cartella libraries è sempre al suo interno. Su Windows, se la cartella Documenti è sincronizzata con OneDrive, il percorso può essere C:\Users\<utente>\OneDrive\Documents\Arduino. Le cartelle AppData (Windows), Library (macOS) e .arduino15 (Linux) sono nascoste per impostazione predefinita; attiva la visualizzazione degli elementi nascosti nel file manager oppure premi Cmd + Maiusc + . nel Finder di macOS.

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Modulo display OLED I2C da 0,96 pollici
Display OLED da 0,96 pollici: installando la libreria Adafruit SSD1306 arrivano anche Adafruit GFX Library e Adafruit BusIO come dipendenze; se ne manca una, il codice non compila.

Quando l'elenco diventa affollato, i due filtri sopra la casella di ricerca ti semplificano la vita:

FiltroOpzioniA cosa serve?
TipoTutti, Aggiornabile, Installata, Arduino, Partner, Consigliato, Fornita da terzi, Fuori produzioneInstallata 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.
ArgomentoSchermo, Sensori, Comunicazione, Controllo dispositivi, Sincronizzazione, Archiviazione dati, Elaborazione dati, Segnale di ingresso/uscita, Altro, Senza categoriaRestringe 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.
ComponenteCerca nel Gestore LibrerieLibreria consigliata (autore) e dipendenzeRiga #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>
Ricevitore IR e telecomandoIRremoteIRremote (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 (su ESP32)ESP32ServoESP32Servo (Kevin Harrington, John K. Bennett)#include <ESP32Servo.h>
Display LCD 16x2 con modulo I2C
LCD 16x2 con modulo I2C: per questo display esistono diverse librerie con un nome quasi uguale, e ognuna lo avvia con una funzione diversa.

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.

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}

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:

  1. 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.
  2. Lascia il file scaricato così com'è, senza estrarlo. L'IDE estrae lo zip da solo; questo menu non accetta cartelle.
  3. Nell'Arduino IDE apri Sketch > Includi Libreria > Aggiungi libreria da file .ZIP... (in inglese Sketch > Include Library > Add .ZIP Library...).
  4. Nella finestra che si apre seleziona il file .zip scaricato e fai clic su Apri.
  5. 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.
  6. Controlla che la libreria sia arrivata cercando il suo nome in File > Esempi > Esempi da librerie di terzi.
A volte l'IDE rifiuta il file zip. L'errore archive is not valid: multiple files found in zip file top level significa che al primo livello dell'archivio ci sono più file o cartelle invece di un'unica cartella di libreria; di solito è un pacchetto di progetto con più librerie, codice e documenti. L'errore library not valid indica che non c'è alcun file header nella radice della cartella né nella sua sottocartella src, cioè che la vera libreria è rimasta un livello più in basso. In entrambi i casi estrai lo zip, trova la cartella della libreria e copiala a mano con il metodo successivo.

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:

  1. Chiudi l'Arduino IDE. L'IDE legge l'elenco delle librerie all'avvio e potrebbe non vedere subito le cartelle copiate mentre è aperto.
  2. 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.
  3. 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.
  4. 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.
  5. Riapri l'IDE e verifica che la libreria compaia nel menu File > Esempi.
Struttura delle cartelleRisultato
libraries/DHT_sensor_library/DHT.hCorretto: struttura vecchia (piatta), l'IDE la trova
libraries/DHT_sensor_library/library.properties + src/DHT.hCorretto: struttura attuale, l'IDE la trova
libraries/DHT-master/DHT-sensor-library-master/DHT.hSbagliato: 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
Se userai una libreria in un solo progetto e vuoi che viaggi con lui quando lo condividi, crea una cartella chiamata src dentro la cartella dello sketch e metti lì i file della libreria (es. src/MyLib/MyLib.h). In questo caso la includi con le virgolette e il percorso, non con le parentesi angolari: #include "src/MyLib/MyLib.h". L'IDE compila la cartella src insieme allo sketch; non devi installare nulla nella cartella libraries.

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:

  1. Cerca il nome della libreria nel Gestore Librerie oppure imposta il filtro Tipo su Installata. La scheda mostra la versione installata.
  2. Apri l'elenco delle versioni in fondo alla scheda. Sotto Altre versioni trovi tutte le versioni pubblicate della libreria.
  3. 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.
  4. 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.
  5. 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.
LibreriaCodice vecchioCodice nuovoSintomo di versione sbagliata
IRremote2.x: IRrecv irrecv(11); irrecv.decode(&results); results.value3.x e 4.x: IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.commandAvvisi deprecated nel codice vecchio, codici dei tasti vuoti o errati
ArduinoJson6.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 I2CVersione GitHub: lcd.begin();Versione del Gestore Librerie: lcd.init();no matching function for call to 'LiquidCrystal_I2C::begin()'
Pacchetto ESP32 ed ESP32ServoPacchetto 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:

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}

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 messaggioCausaSoluzione
Il file incluso dal tuo codice (DHT.h, LiquidCrystal_I2C.h)La libreria non è mai stata installataCercala nel Gestore Librerie e installala
Adafruit_Sensor.h (nel codice DHT)Manca una dipendenza: durante l'installazione è stato scelto Installa senza le dipendenzeInstalla la libreria Adafruit Unified Sensor
Adafruit_I2CDevice.h (nel codice OLED o RTC)Manca Adafruit BusIOInstalla la libreria Adafruit BusIO
OneWire.h (nel codice DS18B20)DallasTemperature non ha installato OneWire in automaticoInstalla la libreria OneWire a parte
SoftwareSerial.h (su ESP32)Questa libreria arriva con il pacchetto AVR e non esiste nel pacchetto ESP32Usa una porta seriale hardware (Serial2) o installa la libreria EspSoftwareSerial
Dht.h, liquidcrystal_i2c.hMaiuscole e minuscole sbagliate; l'IDE cerca il nome del file lettera per lettera, quindi l'errore compare anche su Windows e macOSScrivi la riga #include esattamente come il nome del file nella libreria
La libreria sembra installata ma il file non si trovaUn 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
Scorri verso l'alto nel pannello di output per vedere il messaggio d'errore completo; la vera causa di solito è nella prima riga rossa. Il percorso del file su quella riga mostra quale file chiede l'header mancante: se il percorso termina con DHT_U.h e il messaggio cita Adafruit_Sensor.h, è la libreria DHT, non il tuo codice, ad aver bisogno del file mancante. Per errori di battitura, punti e virgola dimenticati e altri errori di compilazione come was not declared in this scope, leggi Errori di compilazione Arduino.

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:

OrdineCosa guarda l'IDE?Esempio
1Compatibilità di architetturaSu un ESP32, una libreria il cui library.properties indica esp32 o * è preferita a una che indica solo avr
2Corrispondenza del nomePer Servo.h, una cartella chiamata esattamente Servo vince su una cartella Servo-master o MyServo
3Ottimizzazione per la schedaUna libreria che indica esplicitamente l'architettura della scheda (es. architectures=esp32) ha la precedenza su una che indica solo *
4PosizioneLa cartella libraries del tuo sketchbook viene prima delle librerie del pacchetto di schede, che vengono prima delle librerie integrate nell'IDE
5Ultima risorsaSe 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.
Non toccare a mano la sottocartella packages di Arduino15 né le librerie integrate. Librerie come Wire, SPI o WiFi che si trovano lì fanno parte del pacchetto di schede; se le cancelli, per quella scheda non compila più nulla e devi reinstallare il pacchetto dal Gestore schede. La copia che crea problemi è quasi sempre nella cartella libraries del tuo sketchbook.

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.

Se gli esempi della tua libreria non compaiono nel menu, controlla prima la scheda selezionata: l'elenco degli esempi viene costruito per quella scheda e gli esempi di librerie che non supportano la sua architettura potrebbero non comparire. Se hai copiato la libreria a mano, riavvia l'IDE. Se la struttura delle cartelle è sbagliata (un livello in più), la libreria e i suoi esempi restano del tutto invisibili.

Compatibilità delle librerie su ESP32

Scheda di sviluppo ESP32
ESP32: la maggior parte delle librerie Arduino funziona, ma quelle che accedono direttamente ai timer e ai registri di Uno vengono sostituite da equivalenti per 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 usiSu ESP32 usaPerché?
ServoESP32Servo (Gestore Librerie)La libreria Servo non supporta l'ESP32 e si ferma con #error
SoftwareSerialSerial1, Serial2 (UART hardware) o EspSoftwareSerialSoftwareSerial fa parte del pacchetto AVR; l'ESP32 ha già tre UART hardware
EEPROMPreferences (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, MsTimer2Ticker (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:

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}

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:

MetodoQuando?Come?
Gestore pacchetti di ThonnyIl modo più semplice, con il Pico collegato via USBCerca in Tools > Manage packages; per ssd1306, per esempio, scegli micropython-ssd1306 e installalo. Il file finisce nella cartella /lib del Pico
mpremoteSe usi la riga di comandoSul 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 computerEsegui import mip e mip.install("ssd1306") direttamente sul Pico
Copia manualeSe la libreria è un singolo file .pyNel pannello File di Thonny apri la cartella /lib del Pico, fai clic destro sul file del computer e caricalo sul 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 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.
Quando inizi un progetto, scrivi in un commento all'inizio del codice nome, autore e versione di ogni libreria che usi, per esempio // DHT sensor library (Adafruit) 1.4.7. Quando riaprirai il progetto mesi dopo o lo passerai a un amico, vedrai a colpo d'occhio quale versione di quale libreria installare. Se il codice compila ma non si carica sulla scheda, il problema non è la libreria; leggi piuttosto Errore di caricamento Arduino.

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à.

Vedi tutti i progetti
Temperatura e umidità con DHT11
#55Intermedio

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

4.7(47)
64
Utilizzo dello schermo LCD con I2C
#32Principiante
Premium

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

4.8(53)
70
Utilizzo del servomotore
#35Principiante
Premium

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

4.7(48)
67
Leggere i codici di un telecomando IR
#16Principiante
Premium

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

4.5(39)
55
Lettura del valore RFID
#53Principiante
Premium

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

4.7(47)
61
Utilizzo della striscia LED WS2812B
#69Intermedio
Premium

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

4.8(54)
70
Gioco delle Racchette - SSD1306
#86Intermedio
Premium

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

4.5(47)
65
Configurazione del modulo orologio RTC DS1302
#45Principiante
Premium

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

4.5(23)
31