Guias · 22 min de leitura

Como instalar uma biblioteca no Arduino: Gerenciador de Bibliotecas, ZIP e manual

Como instalar uma biblioteca no Arduino passo a passo: Gerenciador de Bibliotecas, instalação por .ZIP e manual, troca de versão e solução do erro No such file or directory.

Instalar uma biblioteca no Arduino significa acrescentar à Arduino IDE um pacote de código pronto para usar um sensor, display ou módulo no seu sketch, e há três formas de fazer isso: o Gerenciador de Bibliotecas (a forma mais fácil e recomendada), adicionar à IDE um arquivo .ZIP baixado ou copiar a pasta da biblioteca à mão para a pasta libraries do seu sketchbook. Depois de instalada, você escreve #include <NomeDaBiblioteca.h> no topo do sketch e todas as funções da biblioteca ficam prontas para usar. A biblioteca certa leva um minuto para instalar; a biblioteca ou a versão errada pode virar horas caçando bugs.

Neste guia passamos pelos três métodos, passo a passo, na Arduino IDE 2. Depois você vai ver como escolher a certa entre dezenas de bibliotecas com nomes parecidos, voltar para uma versão mais antiga, abrir os exemplos de uma biblioteca e resolver as duas mensagens mais comuns: o erro No such file or directory e o aviso Multiple libraries were found. As últimas seções mostram quais bibliotecas funcionam no ESP32 e no Raspberry Pi Pico, quais precisam de substituta e como adicionar bibliotecas no MicroPython. Se a IDE ainda não está instalada, comece por Como instalar a Arduino IDE.

O que é uma biblioteca do Arduino e para que serve?

Uma biblioteca é um conjunto de arquivos de código que faz um trabalho específico, empacotado para que outras pessoas possam reutilizá-lo: pelo menos um arquivo de cabeçalho (.h), normalmente um ou mais arquivos-fonte (.cpp) e quase sempre alguns sketches de exemplo. Por exemplo, o sensor DHT11 envia a leitura por um único fio como um pacote de 40 bits com temporização de microssegundos. Em vez de escrever essa temporização você mesmo, você instala a biblioteca DHT e só escreve dht.readTemperature(); a biblioteca cuida da parte difícil. Não confunda biblioteca com pacote de placa: um pacote de placa instalado pelo Gerenciador de Placas ensina à IDE uma nova família de processadores, como o ESP32 ou o Pico, enquanto uma biblioteca facilita um hardware ou uma tarefa específicos. As bibliotecas do Arduino vêm de três lugares diferentes:

Tipo de bibliotecaDe onde vem?Onde fica?Exemplos
Bibliotecas embutidasA própria IDE as instala na primeira execuçãoA pasta libraries dentro da Arduino15Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse
Bibliotecas do pacote da placaVêm com o pacote que você instala pelo Gerenciador de PlacasA pasta libraries do próprio pacote, em Arduino15/packagesWire, SPI, EEPROM, SoftwareSerial para o Uno; WiFi, WebServer, HTTPClient, Preferences para o ESP32
Bibliotecas que você instalaGerenciador de Bibliotecas, .ZIP ou cópia manualA pasta libraries do seu sketchbookDHT sensor library, LiquidCrystal I2C, Adafruit SSD1306, ESP32Servo

Você não precisa instalar as bibliotecas que vêm com o pacote da placa, como a Wire, a SPI ou a biblioteca WiFi do ESP32; basta escrever a linha #include. As bibliotecas que você mesmo instala vão para a pasta libraries dentro do seu sketchbook. Estes são os locais padrão em cada sistema operacional:

Sistema operacionalBibliotecas que você instalaArduino15 (bibliotecas embutidas e pacotes de placas)
WindowsC:\Users\<usuário>\Documents\Arduino\librariesC:\Users\<usuário>\AppData\Local\Arduino15
macOS/Users/<usuário>/Documents/Arduino/libraries/Users/<usuário>/Library/Arduino15
Linux/home/<usuário>/Arduino/libraries/home/<usuário>/.arduino15
Você pode ver o local real do seu sketchbook no campo Local do Sketchbook em Arquivo > Preferências; a pasta libraries fica sempre dentro dele. No Windows, se a sua pasta Documentos estiver sincronizada com o OneDrive, o caminho pode ser C:\Users\<usuário>\OneDrive\Documents\Arduino. As pastas AppData (Windows), Library (macOS) e .arduino15 (Linux) ficam ocultas por padrão; ative a exibição de itens ocultos no explorador de arquivos ou aperte Cmd + Shift + . no Finder do macOS.

Método 1: instale uma biblioteca com o Gerenciador de Bibliotecas

O Gerenciador de Bibliotecas permite buscar milhares de bibliotecas no índice oficial do Arduino e instalá-las com um clique. As bibliotecas desse índice são empacotadas seguindo uma especificação fixa, então a estrutura de pastas nunca vem quebrada, as outras bibliotecas de que elas precisam (dependências) são oferecidas automaticamente, e a IDE avisa quando sai uma versão nova. Então, se a biblioteca que você precisa está na lista, use sempre este método. Como exemplo, vamos instalar a biblioteca da Adafruit para os sensores DHT11 e DHT22:

  1. Abra a Arduino IDE 2 e clique no ícone de livros na barra lateral esquerda. Você também pode abrir o mesmo painel em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas ou com o atalho Ctrl+Shift+I (Cmd+Shift+I no macOS).
  2. Digite DHT sensor library na caixa de busca. Em poucos segundos, todas as bibliotecas com essas palavras no nome ou na descrição aparecem como uma lista de cartões.
  3. Cada cartão mostra no topo o nome e o autor da biblioteca, embaixo uma descrição curta e um link Mais informações (More info). Você vai ver várias bibliotecas DHT com nomes parecidos; escolha o cartão DHT sensor library cujo autor é a Adafruit.
  4. A lista de versões embaixo do cartão mostra a versão mais nova. A menos que tenha um motivo específico, deixe na versão mais recente e clique em Instalar.
  5. A IDE abre uma janela de dependências da biblioteca (Install library dependencies) e avisa que a biblioteca precisa de outra chamada Adafruit Unified Sensor. Clique em Instalar tudo.
  6. Linhas de download passam pelo painel de saída e uma notificação como Successfully installed library DHT sensor library:1.4.7 aparece no canto inferior direito. O cartão passa a mostrar a versão instalada.

A escolha que você faz na janela de dependências importa. Instalar sem dependências instala só a biblioteca principal; quando você compila, recebe Adafruit_Sensor.h: No such file or directory, porque um dos arquivos da biblioteca DHT inclui esse cabeçalho. Às vezes a cadeia de dependências tem vários elos: a biblioteca de OLED Adafruit SSD1306 precisa da Adafruit GFX Library, que por sua vez precisa da Adafruit BusIO. Quando você clica em Instalar tudo, a IDE instala a cadeia inteira de uma vez; a menos que esteja pulando uma dependência de propósito, use sempre essa opção.

Módulo display OLED I2C de 0,96 polegada
Display OLED de 0,96 polegada: quando você instala a biblioteca Adafruit SSD1306, a Adafruit GFX Library e a Adafruit BusIO vêm junto como dependências; se faltar uma, o código não compila.

Quando a lista fica cheia, os dois filtros acima da caixa de busca facilitam a vida:

FiltroOpçõesPara que serve
TipoTodos, Atualizáveis, Instalados, Arduino, Parceiro, Recomendado, Contribuído, AposentadoInstalados mostra quais bibliotecas estão instaladas e em que versão, Atualizáveis mostra as que têm uma versão mais nova. Arduino lista as bibliotecas oficiais, Contribuído, as da comunidade, e Aposentado, as que não são mais desenvolvidas.
TópicoExibição, Sensores, Comunicação, Controle de dispositivo, Temporização, Armazenamento de dados, Processamento de dados, Entrada/saída de sinal, Outros, Sem categoriaRestringe os resultados quando você não sabe o nome exato de uma biblioteca; por exemplo, em Exibição só ficam as bibliotecas de LCD, OLED e TFT.

Como escolher a certa entre bibliotecas com o mesmo nome

Digite só DHT no Gerenciador de Bibliotecas e você recebe dezenas de resultados; buscar LiquidCrystal I2C também mostra várias bibliotecas com nomes quase idênticos. Mesmo controlando o mesmo hardware, os nomes das funções, os parâmetros do construtor e os exemplos delas são diferentes. Um código escrito para uma biblioteca muitas vezes não compila com outra de nome parecido. Para escolher a certa, siga esta ordem:

  • Olhe a linha #include no seu código: se o exemplo que você está seguindo diz #include <LiquidCrystal_I2C.h>, você precisa da biblioteca que contém esse arquivo. Exemplos bem escritos também citam a biblioteca e o autor.
  • Confira o autor: nomes conhecidos como Adafruit, SparkFun, Arduino e Espressif, ou o fabricante da peça, costumam publicar as bibliotecas mais bem documentadas e mantidas por mais tempo.
  • Abra o link Mais informações: na página da biblioteca, confira a data da última atualização, as issues abertas e as placas suportadas. Uma biblioteca sem atualização há anos pode dar problema em um ESP32 ou em um Pico.
  • Olhe o histórico de versões: uma lista longa de versões mostra que a biblioteca é desenvolvida com regularidade. Fique longe de bibliotecas com uma única versão e descrição vazia.
  • Teste primeiro o exemplo da própria biblioteca: depois de instalar, compile um dos exemplos dela. Se o exemplo compila mas o seu código não, o seu código provavelmente foi escrito para outra biblioteca.
PeçaBuscar no Gerenciador de BibliotecasBiblioteca recomendada (autor) e dependênciasLinha #include
DHT11 / DHT22DHT sensor libraryDHT sensor library (Adafruit) + Adafruit Unified Sensor#include <DHT.h>
LCD I2C 16x2LiquidCrystal I2CLiquidCrystal I2C (Frank de Brabander)#include <LiquidCrystal_I2C.h>
OLED SSD1306Adafruit SSD1306Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO#include <Adafruit_SSD1306.h>
DS18B20DallasTemperatureDallasTemperature (Miles Burton) + OneWire#include <DallasTemperature.h>
RFID RC522MFRC522MFRC522 (GithubCommunity)#include <MFRC522.h>
Receptor IR e controle remotoIRremoteIRremote (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 (no ESP32)ESP32ServoESP32Servo (Kevin Harrington, John K. Bennett)#include <ESP32Servo.h>
Display LCD 16x2 com adaptador I2C
LCD 16x2 com adaptador I2C: há várias bibliotecas com quase o mesmo nome para este display, e cada uma o inicia com uma função diferente.

O exemplo mais conhecido dessa confusão é o LCD I2C. A LiquidCrystal I2C (Frank de Brabander) do Gerenciador de Bibliotecas inicia o display com lcd.init(). Outra versão da mesma biblioteca que circula no GitHub usa lcd.begin() sem parâmetros no lugar. Se você compilar um código escrito para essa versão com a biblioteca do Gerenciador de Bibliotecas, recebe no matching function for call to 'LiquidCrystal_I2C::begin()'. A solução é simples: troque lcd.begin() por lcd.init() ou parta dos exemplos da biblioteca que você instalou. Explicamos a ligação e como descobrir o endereço I2C em detalhe em Como usar um display LCD I2C.

Teste a instalação: um display de temperatura com duas bibliotecas

A forma mais rápida de conferir se as suas bibliotecas estão instaladas corretamente é compilar um pequeno sketch que as use. O código abaixo mostra a temperatura e a umidade lidas de um DHT11 em um LCD I2C 16x2. Instale a DHT sensor library (com a dependência dela) e a LiquidCrystal I2C pelo Gerenciador de Bibliotecas; ligue o pino de dados do DHT11 ao pino 2 do Arduino Uno e os pinos SDA e SCL do LCD ao A4 e ao A5. Você pode ver onde ficam esses pinos na placa com a ferramenta Pinagem.

C++ (Arduino IDE)
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}

As linhas #include no topo dizem ao compilador quais arquivos de biblioteca acrescentar. A Wire.h vem com o pacote da placa, então você não a instala separadamente; DHT.h e LiquidCrystal_I2C.h vêm das bibliotecas que você acabou de instalar. Se você clicar em Verificar e vir a linha O sketch usa ... bytes no painel de saída, todas as bibliotecas foram encontradas. Se aparecer uma mensagem vermelha No such file or directory, vá para a seção de erros abaixo. Como o sensor funciona e como ele difere do DHT22 está em Sensor de temperatura e umidade DHT11.

Método 2: adicione uma biblioteca a partir de um arquivo .ZIP

Algumas bibliotecas não estão no Gerenciador de Bibliotecas: pode ser uma biblioteca nova que ainda não entrou no índice, um driver que um fabricante de sensores compartilha no próprio site ou uma biblioteca personalizada de um livro, de um curso ou do seu professor. Elas costumam ser distribuídas pelo GitHub ou como um simples arquivo .zip. A Arduino IDE consegue descompactar o arquivo e colocá-lo sozinha na pasta certa:

  1. Na página da biblioteca no GitHub, clique no botão verde Code e escolha Download ZIP. Se a página tiver uma seção Releases, baixar dali o zip de uma versão estável é mais seguro.
  2. Deixe o arquivo baixado como está, sem descompactar. A IDE extrai o zip sozinha; esse menu não aceita pastas.
  3. Na Arduino IDE, abra Sketch > Incluir Biblioteca > Adicionar biblioteca .ZIP....
  4. Na janela que se abre, selecione o arquivo .zip que você baixou e clique em Abrir.
  5. Se a instalação der certo, uma notificação Successfully installed library from ... archive aparece no canto inferior direito. Se já existir uma biblioteca com o mesmo nome, a IDE pergunta se você quer sobrescrevê-la; confirme se quiser trocar a versão instalada pela nova.
  6. Confira se a biblioteca chegou procurando o nome dela em Arquivo > Exemplos > Exemplos de bibliotecas personalizadas.
Às vezes a IDE recusa o arquivo zip. O erro archive is not valid: multiple files found in zip file top level significa que o nível superior do arquivo tem vários arquivos ou pastas em vez de uma única pasta de biblioteca; normalmente é um pacote de projeto com várias bibliotecas, códigos e documentos dentro. O erro library not valid significa que não há arquivo de cabeçalho na raiz da pasta nem na subpasta src, então a biblioteca de verdade está presa um nível de pasta mais abaixo. Nos dois casos, descompacte o arquivo, encontre a pasta da biblioteca dentro dele e copie-a à mão usando o próximo método.

Método 3: copie a biblioteca à mão para a pasta libraries

Instalar à mão é útil em um laboratório escolar sem internet, para uma pasta de biblioteca que um amigo passa em um pen drive ou para um arquivo zip que a IDE recusa. Tudo o que você precisa fazer é colocar a pasta da biblioteca no lugar certo, com a estrutura certa:

  1. Feche a Arduino IDE. Ela lê a lista de bibliotecas na inicialização, então pode não ver pastas copiadas enquanto está aberta.
  2. Descompacte o arquivo e encontre a pasta que tem um arquivo library.properties ou o arquivo .h da biblioteca. Essa é a pasta raiz da biblioteca.
  3. Copie essa pasta para a pasta libraries do seu sketchbook (normalmente Documents\Arduino\libraries no Windows). Se não houver pasta libraries, crie-a você mesmo; o nome precisa ser exatamente libraries, em minúsculas.
  4. Tire qualquer sufixo -master ou -main do nome da pasta; por exemplo, renomeie IRremote-master para IRremote. Os nomes das pastas de biblioteca precisam começar com uma letra ou um número, conter só letras latinas básicas, números, sublinhados, pontos e hifens e ter no máximo 63 caracteres; não use espaços nem caracteres acentuados.
  5. Abra a IDE de novo e confira se a biblioteca aparece no menu Arquivo > Exemplos.
Estrutura de pastasResultado
libraries/DHT_sensor_library/DHT.hCorreto: layout antigo (plano), a IDE encontra
libraries/DHT_sensor_library/library.properties + src/DHT.h (com subpasta src)Correto: layout atual, a IDE encontra
libraries/DHT-master/DHT-sensor-library-master/DHT.h (pasta extra)Errado: um nível de pasta a mais, a IDE não encontra a biblioteca
libraries/DHT.h (arquivo sem pasta)Errado: toda biblioteca precisa ficar na sua própria pasta
libraries/Minha Biblioteca/Arriscado: espaços e caracteres acentuados quebram as regras de nome e podem causar problemas na compilação
A pasta de instalação da IDE (ex.: Program Files)Errado: a Arduino IDE 2 nunca procura bibliotecas ali; na antiga IDE 1.8 elas podiam ser apagadas quando a IDE era atualizada ou desinstalada
Se você vai usar uma biblioteca em um único projeto e quer que ela vá junto com o projeto quando você compartilhar, crie uma pasta chamada src dentro da pasta do sketch e coloque ali os arquivos da biblioteca (ex.: src/MyLib/MyLib.h). Nesse caso, você inclui a biblioteca com aspas e o caminho dela em vez de sinais de menor e maior: #include "src/MyLib/MyLib.h". A IDE compila a pasta src junto com o sketch, então você não precisa instalar nada na pasta libraries.

Como trocar a versão de uma biblioteca: atualizar e voltar

As bibliotecas evoluem com o tempo e, nas mudanças de versão principal, algumas funções podem ser renomeadas ou passar a funcionar de outro jeito. Se um exemplo que você achou na internet foi escrito para uma versão de alguns anos atrás, ele pode não compilar com a versão mais recente, ou compilar e depois se comportar errado. Nesse caso, ou você volta para a versão para a qual o código foi escrito, ou adapta o código à versão nova. O Gerenciador de Bibliotecas troca de versão em poucos cliques:

  1. Busque o nome da biblioteca no Gerenciador de Bibliotecas ou coloque o filtro Tipo em Instalados. O cartão mostra a versão instalada.
  2. Abra a lista de versões embaixo do cartão. Todas as versões publicadas da biblioteca aparecem listadas em Other Versions (outras versões).
  3. Selecione a versão que você quer e clique em Instalar. A IDE remove a versão antiga e instala a que você escolheu; uma biblioteca só tem uma versão na pasta libraries.
  4. Na inicialização, a IDE às vezes mostra a notificação Updates are available for some of your libraries. (há atualizações para algumas das suas bibliotecas). Antes de fazer uma atualização em massa por ali, anote de quais versões os seus projetos que funcionam dependem; uma atualização em massa pode mudar a versão principal de muitas bibliotecas de uma vez.
  5. Para remover uma biblioteca por completo, passe o mouse sobre o cartão dela e clique em Remover; a IDE pede confirmação e apaga a pasta de libraries.
BibliotecaCódigo antigoCódigo novoSintoma de incompatibilidade
IRremote2.x: IRrecv irrecv(11); irrecv.decode(&results); results.value (API antiga)3.x e 4.x: IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.commandAvisos de deprecated no código antigo, códigos de tecla vazios ou errados
ArduinoJson6.x: StaticJsonDocument<200> doc; (versão antiga)7.x: JsonDocument doc; (versão nova)A 7.x compila as classes antigas com avisos de deprecated; código da 5.x (StaticJsonBuffer) nem compila
LiquidCrystal I2CVersão do GitHub: lcd.begin();Versão do Gerenciador de Bibliotecas: lcd.init();no matching function for call to 'LiquidCrystal_I2C::begin()' (erro de compilação)
Pacote de placas ESP32 e ESP32ServoPacote de placas 2.x: ledcSetup(), ledcAttachPin()Pacote de placas 3.x: ledcAttach(); ESP32Servo 3.x'ledcSetup' was not declared in this scope (erro de compilação)

A melhor forma de registrar para qual versão o seu código foi escrito é colocar os nomes e as versões das bibliotecas em um comentário no topo do arquivo. Algumas bibliotecas também informam a versão por uma macro; a ArduinoJson, por exemplo, define ARDUINOJSON_VERSION_MAJOR. O sketch abaixo interrompe a compilação com uma mensagem clara se a versão principal errada estiver instalada; com a versão certa, ele monta uma pequena string JSON e mostra a versão da biblioteca no Monitor Serial:

C++ (Arduino IDE)
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}

Com essa abordagem, quando você compartilha código com colegas ou na internet, quem instalou a versão errada vê uma única linha dizendo o que fazer em vez de erros enigmáticos. Se você gosta de linha de comando, pode instalar uma versão específica direto com a Arduino CLI: arduino-cli lib install "DHT sensor [email protected]". Para ver qual versão de qual biblioteca está sendo usada de fato, ative a saída detalhada durante a compilação nas Preferências; no fim da compilação, uma linha Using library ... at version ... in folder: ... é mostrada para cada biblioteca.

O erro No such file or directory e como resolvê-lo

Este é o erro que você mais vai ver ao adicionar bibliotecas. Se o compilador não encontra em nenhuma pasta de biblioteca o arquivo pedido por uma linha #include, o painel de saída mostra fatal error: DHT.h: No such file or directory e compilation terminated., e uma notificação Compilation error: DHT.h: No such file or directory aparece no canto inferior direito. O nome do arquivo na mensagem diz qual biblioteca está faltando. Lembre-se de que o arquivo nem sempre vem de uma linha que você escreveu; uma biblioteca que você instalou pode estar incluindo outra biblioteca:

Arquivo na mensagemCausaSolução
O arquivo que o seu código inclui (DHT.h, LiquidCrystal_I2C.h)A biblioteca nunca foi instaladaBusque-a no Gerenciador de Bibliotecas e instale
Adafruit_Sensor.h (em código de DHT)Dependência faltando: Instalar sem dependências foi escolhido na instalaçãoInstale a biblioteca Adafruit Unified Sensor
Adafruit_I2CDevice.h (em código de OLED ou RTC)Falta a Adafruit BusIOInstale a biblioteca Adafruit BusIO
OneWire.h (em código de DS18B20)A DallasTemperature não instalou a OneWire automaticamenteInstale a biblioteca OneWire separadamente
SoftwareSerial.h (no ESP32)Essa biblioteca vem com o pacote de placas AVR e não existe no pacote do ESP32Use uma porta serial de hardware (Serial2) ou instale a biblioteca EspSoftwareSerial
Dht.h, liquidcrystal_i2c.h (maiúsculas/minúsculas erradas)Maiúsculas ou minúsculas erradas; a IDE procura os nomes de cabeçalho letra por letra, então isso falha também no Windows e no macOSEscreva a linha #include exatamente como o arquivo se chama na biblioteca
A biblioteca parece instalada, mas o arquivo não é encontradoUm nível de pasta a mais em uma cópia manual, ou um sketchbook diferente do que a IDE usa (OneDrive)Confira a estrutura de pastas e o local do sketchbook nas Preferências
Role para cima no painel de saída para ver a mensagem de erro inteira; a causa real normalmente está na primeira linha vermelha. O caminho de arquivo nessa linha mostra qual arquivo pediu o cabeçalho que falta: se o caminho termina em DHT_U.h e a mensagem diz Adafruit_Sensor.h, é a biblioteca DHT, não o seu código, que precisa do arquivo que falta. Para erros de digitação, ponto e vírgula esquecido e outros erros do compilador como was not declared in this scope, veja Erros de compilação do Arduino.

O que significa o aviso Multiple libraries were found?

Essa mensagem aparece quando mais de uma biblioteca pode atender a uma linha #include do seu código. Por exemplo, se você instalou na pasta Documentos uma biblioteca Servo antiga de um projeto anterior, existem dois candidatos junto com a biblioteca Servo embutida da IDE, e a saída mostra Multiple libraries were found for "Servo.h" seguido de Used: C:\Users\<usuário>\Documents\Arduino\libraries\Servo e Not used: C:\Users\<usuário>\AppData\Local\Arduino15\libraries\Servo. Não é um erro, é uma informação; a compilação continua. Só há problema se a biblioteca da linha Used não for a que você quer. A IDE escolhe mais ou menos nesta ordem:

OrdemO que a IDE confereExemplo
1Compatibilidade de arquiteturaEm um ESP32, uma biblioteca cujo library.properties diz esp32 ou * tem preferência sobre uma que diz só avr
2Correspondência de nomePara Servo.h, uma pasta chamada exatamente Servo vence uma pasta Servo-master ou MyServo
3Otimização específica para a placaUma biblioteca que lista explicitamente a arquitetura da placa (ex.: architectures=esp32) tem prioridade sobre uma que diz só *
4LocalA pasta libraries do seu sketchbook vem antes das bibliotecas do pacote da placa, que vêm antes das bibliotecas embutidas da IDE
5Último critérioSe tudo o mais for igual, é escolhida a biblioteca cujo nome é mais parecido com o do arquivo incluído
  • Leia a linha Used: a pasta usada é a biblioteca que você esperava? Se for, não precisa fazer nada; pode ignorar a mensagem.
  • Remova a cópia extra: se a biblioteca errada for escolhida, encontre-a no Gerenciador de Bibliotecas e clique em Remover, ou apague a pasta dela da pasta libraries do seu sketchbook com a IDE fechada.
  • Cuidado com restos da IDE antiga: bibliotecas antigas copiadas à mão na época da Arduino IDE 1.8 ficam na sua pasta Documentos e, graças à prioridade de local, se sobrepõem às bibliotecas embutidas atualizadas da IDE.
  • Não mantenha duas cópias da mesma biblioteca: se a pasta libraries tiver duas cópias, como IRremote e IRremote-master, o Gerenciador de Bibliotecas não consegue atualizar essa biblioteca e pede que você remova as duplicatas à mão.
  • Faça backup antes de apagar: em vez de apagar uma pasta, mova-a primeiro para a área de trabalho por um tempo; se tudo funcionar, apague depois.
Não mexa à mão na subpasta packages da Arduino15 nem nas bibliotecas embutidas. Bibliotecas como Wire, SPI ou WiFi que ficam ali fazem parte do pacote da placa; se você as apagar, nada compila para aquela placa e você precisa reinstalar o pacote pelo Gerenciador de Placas. A cópia que causa problema quase sempre está na pasta libraries do seu próprio sketchbook.

Como abrir os exemplos de uma biblioteca e adicionar uma biblioteca ao seu código

A forma mais rápida de aprender uma biblioteca é pelos sketches de exemplo dela. Os exemplos vêm com a versão que você instalou, então, ao contrário de códigos da internet, eles sempre combinam com a versão instalada. O menu Arquivo > Exemplos é montado para a placa selecionada e tem estas seções:

  • Exemplos embutidos: os exemplos básicos da IDE, como 01.Basics e 02.Digital, onde fica o Blink.
  • A seção com o nome da sua placa (ex.: Exemplos para Arduino Uno): exemplos das bibliotecas que vêm com a IDE e com o pacote da placa selecionada. Com um Uno selecionado, você encontra ali Servo, EEPROM e SoftwareSerial; com um ESP32, WiFi, WebServer e Preferences.
  • Exemplos de bibliotecas personalizadas: exemplos das bibliotecas que você mesmo instalou, por exemplo DHT sensor library > DHTtester.

Você também chega aos exemplos de uma biblioteca instalada pelo menu de três pontos ao lado do cartão dela no Gerenciador de Bibliotecas. O exemplo abre em uma janela nova; quando você o modifica e quer salvar, a IDE pede um novo nome e local, porque os arquivos de exemplo ficam guardados como somente leitura na pasta da biblioteca. Para adicionar uma biblioteca ao seu próprio sketch, basta clicar no nome dela no menu Sketch > Incluir Biblioteca: a IDE escreve as linhas #include necessárias no topo do código. Algumas bibliotecas têm vários arquivos de cabeçalho, então esse menu pode acrescentar várias linhas; você pode apagar as que não usar.

Se os exemplos da sua biblioteca não aparecem no menu, confira primeiro a placa selecionada: a lista de exemplos é montada para a placa selecionada, e exemplos de bibliotecas que não suportam a arquitetura da sua placa podem não ser listados. Se você copiou a biblioteca à mão, reinicie a IDE. Se a estrutura de pastas estiver errada (um nível de pasta a mais), a biblioteca e os exemplos dela ficam completamente invisíveis.

Compatibilidade de bibliotecas no ESP32

Placa de desenvolvimento ESP32
ESP32: a maioria das bibliotecas do Arduino funciona, mas as que acessam diretamente os timers e registradores do Uno são substituídas por equivalentes para o ESP32.

Como o ESP32 também é programado com a Arduino IDE, a maioria das bibliotecas, principalmente as de sensores e displays que se comunicam por I2C, SPI ou fio único, funciona no ESP32 sem mudanças. As problemáticas são as bibliotecas que mexem diretamente nos timers e registradores do processador ATmega328P do Arduino Uno. Se a IDE não vê a arquitetura do ESP32 no arquivo library.properties de uma biblioteca, ela mostra este aviso no início da compilação: 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). É só um aviso: a LiquidCrystal I2C não usa nada além da biblioteca Wire, então funciona bem no ESP32. Já a biblioteca Servo interrompe a compilação de propósito com uma mensagem #error que começa com This library only supports boards with an AVR, SAM, SAMD, NRF52. Também não instale pelo Gerenciador de Bibliotecas as bibliotecas WiFi, WebServer, HTTPClient, Preferences e BluetoothSerial que vêm com o pacote de placas do ESP32; outras bibliotecas com os mesmos nomes só causam confusão.

O que você usa no UnoUse no ESP32Por quê?
ServoESP32Servo (Gerenciador de Bibliotecas)A biblioteca Servo não suporta o ESP32 e para com #error
SoftwareSerialSerial1, Serial2 (UART de hardware) ou EspSoftwareSerialA SoftwareSerial pertence ao pacote AVR; o ESP32 já tem três UARTs de hardware
EEPROMPreferences (vem com o pacote da placa)No ESP32, a EEPROM é emulada na flash; a Preferences guarda dados chave-valor de forma mais segura e fácil
TimerOne, MsTimer2Ticker (vem com o pacote da placa)Bibliotecas que acessam registradores de timer do AVR não compilam no ESP32

Se você quer usar o mesmo sketch no Uno, no ESP32 e no Pico, pode escolher a biblioteca certa para cada placa com as macros de arquitetura que os pacotes de placas definem. O pacote do ESP32 define ARDUINO_ARCH_ESP32, o pacote arduino-pico do Pico, ARDUINO_ARCH_RP2040, e placas AVR como o Uno e o Nano, ARDUINO_ARCH_AVR. O sketch de servo abaixo compila nas três placas; para o ESP32 você só precisa instalar a biblioteca ESP32Servo:

C++ (Arduino IDE)
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}

No ESP32 também importa que a versão da biblioteca combine com a versão do pacote de placas. Na série 3.x do pacote de placas do ESP32, as funções de PWM (LEDC) mudaram: ledcSetup() e ledcAttachPin() foram removidas e substituídas por ledcAttach(). Por isso versões de bibliotecas e exemplos que usam as funções antigas falham na 3.x com 'ledcSetup' was not declared in this scope. As versões atuais da ESP32Servo são escritas para o pacote de placas 3.x. A solução é passar para a versão atual da biblioteca ou, se você precisa compilar um projeto antigo sem mudanças, voltar o pacote esp32 no Gerenciador de Placas para a 2.0.17, a última versão 2.x. Você encontra os pinos da placa e um primeiro projeto com Wi-Fi em O que é o ESP32?, e a ligação e a alimentação do servo em O que é um servo motor?.

Bibliotecas no Raspberry Pi Pico: Arduino IDE e MicroPython

Se você programa o Pico com a Arduino IDE (o pacote de placas Raspberry Pi Pico/RP2040/RP2350, de Earle F. Philhower), as bibliotecas são instaladas do mesmo jeito que no Uno e vão para a mesma pasta libraries. O nome de arquitetura desse pacote é rp2040; o chip RP2350 do Pico 2 usa o mesmo nome. Wire, SPI, Servo, EEPROM e uma SoftwareSerial baseada em PIO vêm dentro do pacote de placas, e no Pico W a biblioteca WiFi também já vem pronta. A maioria das bibliotecas de sensores e displays da Adafruit funciona bem no Pico; bibliotecas que mexem em registradores do AVR também não funcionam aqui. No Pico, a EEPROM é emulada na flash, então você a inicia com EEPROM.begin() e salva as mudanças com EEPROM.commit().

No MicroPython, uma biblioteca é um arquivo .py (ou .mpy, compilado) no sistema de arquivos do Pico, normalmente colocado na pasta /lib. Módulos como machine, time, dht, onewire, ds18x20, neopixel e framebuf vêm com o MicroPython; digite help("modules") no Shell do Thonny para ver a lista completa. Você pode acrescentar um driver que não está na lista de quatro formas:

MétodoQuando?Como?
Gerenciador de pacotes do ThonnyA forma mais fácil, com o Pico ligado pelo USBBusque em Ferramentas > Gerenciar pacotes; para o ssd1306, por exemplo, escolha micropython-ssd1306 e instale. O arquivo vai para a pasta /lib no Pico
mpremoteSe você usa a linha de comandoNo seu computador, mpremote mip install ssd1306 baixa a biblioteca da micropython-lib e a copia para o Pico
mip (só no Pico W)Com o Pico W no Wi-Fi, sem precisar de computadorRode import mip e mip.install("ssd1306") no próprio Pico
Cópia manualSe a biblioteca é um único arquivo .pyNo painel Arquivos do Thonny, abra a pasta /lib no Pico, clique com o botão direito no arquivo do seu computador e envie-o para o 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

A primeira parte do código tenta importar o módulo ssd1306; se ele não existir, conecta o Pico W ao Wi-Fi, baixa a biblioteca da micropython-lib e depois escreve um texto no display. Em um Pico sem Wi-Fi, você faz o mesmo trabalho pelo computador com o Thonny ou o mpremote. A ligação do OLED e os comandos de desenho estão em Como usar um display OLED (SSD1306), e os comandos básicos e o sistema de arquivos do MicroPython em Fundamentos de MicroPython. Se você está configurando o Pico pela primeira vez, comece por O que é o Raspberry Pi Pico?.

Erros comuns ao adicionar bibliotecas

  • Instalar a biblioteca e esquecer o pacote da placa: instalar uma biblioteca para o ESP32 ou para o Pico não ensina a placa à IDE; instale primeiro o pacote da placa pelo Gerenciador de Placas e depois a biblioteca.
  • Pular dependências: Instalar sem dependências é a causa mais comum de erros de arquivo faltando, como Adafruit_Sensor.h ou Adafruit_I2CDevice.h.
  • Descompactar primeiro e depois usar o menu .ZIP: esse menu só aceita arquivos zip; se você tem uma pasta, copie-a à mão para a pasta libraries.
  • Colocar a biblioteca no lugar errado: uma biblioteca copiada para a pasta do sketch, para a área de trabalho ou para a pasta de instalação da IDE não é encontrada; o lugar certo é a pasta libraries do seu sketchbook.
  • Várias cópias da mesma biblioteca: duas pastas como IRremote e IRremote-master levam ao aviso Multiple libraries e ao uso da versão errada; apague uma delas.
  • Atualizar tudo às cegas: uma atualização que pula uma versão principal pode quebrar um projeto que funcionava; dê uma olhada nas notas de versão da biblioteca antes de atualizar.
  • Acentos ou espaços na sua própria biblioteca: se você escrever a sua própria biblioteca, use só letras latinas básicas, números e sublinhados nos nomes de pastas e arquivos.
Quando começar um projeto, escreva o nome, o autor e a versão de cada biblioteca que usar em um comentário no topo do código, por exemplo // DHT sensor library (Adafruit) 1.4.7. Quando você reabrir o projeto meses depois ou compartilhá-lo com um amigo, vai ver de relance qual versão de qual biblioteca instalar. Se o seu código compila mas não carrega na placa, o problema não é a biblioteca; veja Erro ao carregar código no Arduino.

Depois que você pega o jeito de instalar bibliotecas no Arduino, cada sensor e display novo vira trabalho de poucos minutos: encontre a biblioteca do autor certo no Gerenciador de Bibliotecas, instale-a com as dependências, teste primeiro o exemplo da própria biblioteca e depois passe para o seu código. No app BlueGrays você encontra projetos que usam bibliotecas, como temperatura e umidade com DHT11, LCD I2C, servo motor, leitor de cartões RFID, controle remoto IR, LEDs WS2812B e um jogo Pong em OLED, com esquemas do circuito e código explicado passo a passo.

Perguntas frequentes

Onde as bibliotecas do Arduino são instaladas?

As bibliotecas que você instala pelo Gerenciador de Bibliotecas, por um arquivo .ZIP ou à mão vão para a pasta libraries do seu sketchbook; no Windows normalmente é Documents\Arduino\libraries, no Linux ~/Arduino/libraries. Você pode ver o local exato no campo Local do Sketchbook em Arquivo > Preferências. As bibliotecas embutidas que vêm com a IDE e as bibliotecas dos pacotes de placas ficam separadas, na pasta Arduino15.

Por que a biblioteca ZIP que eu baixei não instala na Arduino IDE?

O motivo mais comum é que o zip tem várias pastas em vez de uma única pasta de biblioteca, ou que a biblioteca está enterrada em uma subpasta; a IDE então informa “multiple files found in zip file top level” ou “library not valid”. Descompacte, encontre a pasta que tem o library.properties ou um arquivo .h e copie essa pasta à mão para libraries. Se você já descompactou, o menu .ZIP não vai aceitar a pasta.

Como desinstalar uma biblioteca do Arduino?

Encontre a biblioteca no Gerenciador de Bibliotecas, passe o mouse sobre o cartão dela e clique em Remover; a IDE apaga a pasta dela de libraries. Uma biblioteca que você instalou à mão pode ser apagada da pasta libraries do seu sketchbook com a IDE fechada. Não mexa nas bibliotecas dos pacotes de placas na pasta Arduino15.

Como resolver o erro “No such file or directory” no Arduino?

Descubra a qual biblioteca pertence o arquivo .h da mensagem e instale essa biblioteca pelo Gerenciador de Bibliotecas. Se for um cabeçalho que você não escreveu (ex.: Adafruit_Sensor.h), está faltando uma dependência de uma biblioteca que você instalou. Se o erro continuar mesmo com a biblioteca instalada, confira as maiúsculas e minúsculas na linha #include e a estrutura de qualquer pasta que você copiou à mão.

Dá para instalar uma biblioteca do Arduino sem internet?

Sim. Baixe o arquivo zip da biblioteca em outro computador conectado e leve-o em um pen drive. Adicione o zip com Adicionar biblioteca .ZIP ou copie a pasta descompactada para a pasta libraries do seu sketchbook; não esqueça de levar do mesmo jeito, uma por uma, as dependências da biblioteca.

As bibliotecas do Arduino funcionam no ESP32 e no Raspberry Pi Pico?

A maioria das bibliotecas de sensores e displays que se comunicam por I2C, SPI ou fio único funciona sem mudanças no ESP32 e no pacote Arduino do Pico. Bibliotecas como a Servo e a TimerOne, que acessam diretamente os timers do processador AVR, são substituídas no ESP32 pela ESP32Servo e pela Ticker, enquanto o pacote de placas do Pico traz a sua própria biblioteca Servo. O aviso “claims to run on avr architecture(s)” sozinho não significa que a biblioteca não vai funcionar.

Ver todos os projetos
Temperatura e umidade com DHT11
#55Intermediário

Temperatura e umidade com DHT11

Qual é a temperatura do seu quarto? O ar está úmido ou seco? O sensor DHT11 mede a temperatura e a umidade, e o Arduino mostra os valores em um display LCD de duas linhas, atualizando a cada poucos se

4.7(47)
73
Uso do display LCD com I2C
#32Iniciante
Premium

Uso do display LCD com I2C

Dê ao seu Arduino um display próprio e faça-o escrever sua primeira mensagem. O display LCD de duas linhas é conectado com poucos fios; primeiro aparece uma saudação na linha de cima, depois uma segun

4.8(53)
70
Uso de servo motor
#35Iniciante
Premium

Uso de servo motor

O braço de um pequeno servo motor gira para três posições em sequência: o início, o meio e o fim do percurso, esperando dois segundos em cada parada. O Arduino informa ao motor em qual ângulo ficar, e

4.7(48)
67
Leitura de códigos de controle remoto IR
#16Iniciante
Premium

Leitura de códigos de controle remoto IR

Cada botão do controle remoto da sua TV envia um código secreto usando uma luz que você não consegue ver. O receptor infravermelho capta essa luz, e o Arduino exibe na tela do computador o código de c

4.5(39)
55
Leitura de valores RFID
#53Iniciante
Premium

Leitura de valores RFID

O chaveiro de acesso do seu prédio ou seu cartão de entrada guarda um número de identificação oculto, e este projeto faz a leitura dele. Aproxime o cartão do leitor RFID e o Arduino escreve o número d

4.7(47)
61
Uso da fita LED WS2812B
#69Intermediário
Premium

Uso da fita LED WS2812B

Conheça uma fita LED inteligente em que você pode definir a cor de cada luz individualmente. O Arduino primeiro acende os cinco primeiros LEDs em vermelho, um segundo depois acende os outros cinco em

4.8(54)
70
Jogo de bola e raquetes - SSD1306
#86Intermediário
Premium

Jogo de bola e raquetes - SSD1306

Uma bola, duas raquetes e você: jogue tênis de mesa, um dos primeiros videogames, em um pequeno display OLED. Dois botões movem sua raquete à direita para cima e para baixo, enquanto o computador cont

4.5(47)
65
Configuração do módulo de relógio RTC DS1302
#45Iniciante

Configuração do módulo de relógio RTC DS1302

Coloque em funcionamento um pequeno módulo de relógio que mantém a hora mesmo quando o Arduino é desligado. O módulo tem sua própria pilha e, depois de ajustar o relógio, a data e a hora aparecem na t

4.5(23)
31