Conecte dispositivos USB ao Arduino usando o USB Host Shield 50

Neste artigo vamos ver uma forma de expandir a comunicação do Arduino com o mundo externo utilizando o Arduino USB Host Shield, uma placa na qual você pode ligar teclados, mouses, joysticks, celulares e praticamente qualquer dispositivo USB.

USB Host Shield Android

Antes de entrar nas propriedades do módulo, precisamos falar sobre o que é um USB Host.

Quando você conecta um mouse no seu computador, o seu computador é o USB Host (servidor), fornecendo energia e gerenciando a comunicação com o USB Client (no caso, o mouse, também chamado de “periférico”). Em toda comunicação USB você precisa de um USB host e um USB client.

No Arduino, o USB Host Shield vai atuar como um “servidor” USB, gerenciando a conexão, fornecendo alimentação USB  e permitindo a comunicação entre o Arduino e outros dispositivos como teclados, mouses, celulares, leitores de código de barras, controles de videogames (como PS3, PS4 e XBox), câmeras USB e até HD´s externos. E o que mais pudermos inventar, obviamente.

O Arduino USB Host Shield é compatível com Arduino Uno, Duemilanove, Diecimila, Arduino Mega 2560 e 1280, comunicando-se com o Arduino por meio da interface SPI.

Conectando um teclado USB ao Arduino USB Host Shield

Vamos mostrar dois exemplos de utilização dessa placa com o Arduino Uno. Como estamos trabalhando com um shield, basta encaixá-la sobre o Arduino, conforme a imagem:

Usb_Host_Shield_Arduino_Uno

Antes de carregarmos o primeiro programa vamos precisar da biblioteca USB Host Shield 2.0, disponível neste link. Descompacte o arquivo, renomeie a pasta USB_Host_Shield_2.0-master para USB_Host_Shield_2.0 e coloque-a dentro da pasta Libraries da IDE do Arduino.

O programa que vamos utilizar é baseado no programa de exemplo USBHIDBootKbd, da própria biblioteca. Criamos uma versão modificada (e reduzida) que mostra no serial monitor os caracteres digitados:

Carregue o programa, conecte o teclado USB ao Arduino USB Host Shield e abra o serial monitor setando a velocidade de conexão para 115200. Aguarde alguns instantes para começar a digitar:

Serial Monitor - Teste teclado

Vale a pena dar uma olhada no programa original, que mostra se a tecla foi pressionada ou liberada, mostra o número das teclas e também trata das teclas “especiais”, como shift, ctrl, etc. É uma boa referência se você precisar criar algum programa que faça uso do mapeamento do teclado.

Utilize o Arduino USB Host Shield com um celular Android

Uma das utilizações mais interessantes do USB Host Shield é a possibilidade de conectar um celular com Android e fazer com que ele envie e receba dados do Arduino.

Nesse caso serão necessários alguns conhecimentos sobre programação em Android, mas você pode, por exemplo, criar um programa que envie as informações do GPS para o Arduino. Ou configurar o celular para, caso este receba uma chamada ou SMS, acione uma porta do Arduino, envie mensagens para um display, toque uma sirene, etc.

Nessa mesma biblioteca que baixamos anteriormente, vamos encontrar o programa ArduinoBlinkLED, que já pode ser carregado no Arduino. Na IDE, o programa está em Arquivo => Exemplos => USB_Host_Shield_2.,0 = > adk:

O ArduinoBlinkLED trabalha em conjunto com um aplicativo que tem o mesmo nome, e aciona uma das portas do Arduino quando enviamos o comando pelo celular. No programa acima, vamos utilizar a porta 2 do shield:

Circuito Arduino Uno USB Host Shield

O instalador (APK) do ArduinoBlinkLED pode ser baixado neste link. Copie o arquivo ArduinoBlinkLED.apk para o seu celular e utilize o gerenciador de arquivos para instalar o programa:

ArduinoBlinkLED Install

Conecte o celular ao USB Host Shield e abra o aplicativo:

ArduinoBlinkLED

Acione a botão no centro da tela para acender e apagar o led ligado à porta 2:

Circuito_USB_Host_Shield

O celular mostrado acima possui Android versão 4.0.4 mas o programa funciona à partir da versão 2.3.4.

Se você deseja conhecer um pouco mais sobre a programação para o USB Host Shield e desenvolver seus próprios aplicativos, o desenvolvedor disponibliza o código fonte do programa utilizado acima no link https://github.com/Lauszus/ArduinoBlinkLED.

Gostou? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo) e visite nossa loja FILIPEFLOP!

Posts Relacionados

50 Comentários

  1. Olá. Boa Tarde.

    Daria para conectar uma WebCam nesse Host USB e utiliza-la para tirar foto?? Se sim, tem uma ideia do código de captura??

    Att,
    Wesley.

    1. Pelo que parece sim, ele daria suporte, já que o shield não possui inteligencia alguma, seria necessário adaptar toda a pilha USB no arduino. Alem do fato do desempenho baixo.
      Você não deve se preocupar com código e sim com a classe USB

  2. O link com o arquivo que eu tenho que baixar não esta funcionando, tem como me mandar por e-mail?

    1. Boa noite Guilherme,

      É o link da biblioteca ? Parece que está normal, tente novamente, por favor.

      Grato.

      Adilson – Equipe FILIPEFLOP

  3. Olá, é possível conectar um modem, para ter internet das operadoras como Claro, VIVO, etc?
    Caso sim, vocês têm exemplo?

    Agradeço.
    Ricardo.

    1. Boa tarde Ricardo,

      Infelizmente não testamos o shield USB com modem.

      Adilson – Equipe FILIPEFLOP

    2. É mais simples você comprar um shild 3g

  4. Prezados,

    Será que da para utilizar este modulo, por exemplo com uma WebCan Usb?
    E pegar a imagem e enviar para o Android?

    Agradeço desde Já a colaboração.

    Anderson Dutra de Oliveira.
    1. Bom dia Anderson,

      Não testamos nessa configuração, mas você terá que programar o Arduino para pegar os dados da câmera, creio que seja a mesma coisa que criar um “driver” para a câmera, dentro do Arduino. Vai dar um certo trabalho.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  5. Olá, Boa Tarde.

    Há possibilidade de Ler/Escrever em um pendrive utilizando este shield?

    1. sim é o mesmo que o ethernet shild faz com o cartao sd

  6. Consigo fazer um datalogger usb?

    1. Bom dia Brendo,

      Você está pensando em ligar um pendrive no USB Host, por exemplo?

      Abraço

      Adilson – Equipe FILIPEFLOP

  7. ola boa noite gostaria de saber se com este shield é possivel fazer um auto download por exemplo ao eu conectar meu pendriver o arduino copie todos os arquivos do pendriver e passe para um cartao de memoria ou ao conectar um celular android ele copie todos os arquivos tipo conversas contatos chamadas etc…

    1. Sim, você pode implementar isso

  8. Boa tarde Srs.

    Saberiam me dizer porque ao tentar compilar este código o meu Arduino IDE fica processando sem retornar erro e também nao finaliza a compilação?

    Att,
    Fernando

  9. Olá. É possível utilizar esse shield com o Arduino Leonardo? Se não, como poderia contornar esse problema? Ou o Leonardo não precisa desse shield? Grato.

  10. Olá. Posso usar esse shield no Arduino Leonardo? Se não, qual a alternativa? Ou o Leonardo não precisa de shield USB? Grato.

  11. Boa tarde Adilson,
    Esse shield conseguiria pegar tag de um leitor rfid usb tranquilamente, sem a necessidade de algo mais?
    Como por exemplo conecto esse leitor rfid usb no pc e o mesmo , me escreve a tag no bloco de notas.
    att

    1. Bom dia Pedro,

      Não fiz esse teste, mas creio que funcione sim, já que pela sua descrição, ele funciona como um dispositivo de entrada comum (como um teclado, por ex.).

      Abraço!

      Adilson – Equipe FILIPEFLOP

      1. Essa questão pode ser muito mais ampla, caso seu leitor seja nativamente USB, ele provavelmente utiliza o protocolo PCSC, não lembro se este protocolo utiliza a classe HID, caso sim, pode ser que você consiga.

  12. Olá, tenho uma dúvida. Da para aclopar o ethernet shield em cima e conectar um repetidor nele, enviando assim, por exemplo, a imagem de uma câmera USB para o notebook, em um software?

  13. Boa noite,
    Comprei 2 scanners barcode wifi da China e ambos queimaram o receptor ao conectar neste host USB. Alguma dica? Estou com receio de conectar qualquer outro scanner para tentar novamente. Grato

    1. Boa tarde Fernando,

      Não temos informações de nenhuma queima causada pela placa, inclusive testamos com vários aparelhos como mouse, teclado, pendrive, e não tivemos problemas.Esse scanner que você comprou tem algum tipo de documentação para verificarmos se há alguma incompatibilidade com a porta USB ? O cabo de ligação é um cabo comum ?

      Abraço!

      Adilson – Equipe FILIPEFLOP

      1. Boa tarde amigos,

        Obrigado pelo pronto retorno, enfim deve ter queimado por ser um scanner de baixa qualidade. Mas comprei um outro com fio de boa marca e funcionou perfeitamente, porém preciso de uma ajuda.

        Estou com este USB Shield conectado a um Leonardo e quando alimento através da USB do notebook e também uma fonte 12V 1A então o meu scanner é ativado perfeitamente no momento que conecto a este USB Shield, mas se eu desconecto a alimentação do notebook deixando apenas a fonte 12V o scanner desliga. Já tentei outras fontes porém de 9V 1000mA mas também sem sucesso.

        Alguém sabe o que poderia ser? E como posso fazer para que mantenha alimentado?

        Obrigado pela ajuda,
        Att,
        Fernando

  14. Olá, em qual versão da IDE foi feito os testes? Pois carreguei a biblioteca na versão 1.0.1 e nenhum dos códigos de exemplos sequer compilam, sempre retornam alguns erros. Obrigado!

    1. Bom dia Filipe,

      A versão da IDE utilizada nos testes foi a 1.6.1

      Abraço

      Adilson – Equipe FILIPEFLOP

  15. Bom dia Srs.

    Como devo proceder para conectar este USB host shield em conjunto com Ethernet Shield?
    Está causando conflito de pinagem e o shield superior nunca funciona.

    Att,
    Fernando

    1. Boa tarde Fernando,

      O problema provavelmente é pq o Ethernet Shield e o USB Host Shield utilizam os mesmos pinos para a interface SPI, mais precisamente o pino 10 (SS).

      No USB host shield você consegue alterar o pino SS. Dê uma olhada neste link, por favor: https://www.circuitsathome.com/usb-host-shield-hardware-manual

      Abraço.

      Adilson – Equipe FUILIPEFLOP

      1. Olá;

        comprei este usb host shield, mas a dúvida é que não vem com o conector icsp para empilhar com ethernet shield, é assim mesmo?

        1. Boa tarde,

          Ele vem com o conector ICSP fêmea, igual ao que vem com o ethernet shield, para encaixar no Arduino.

          Abraço.

          Adilson – Equipe FILIPEFLOP

          1. Exatamente. Mas e se eu tenho q colocar o ethernet shield sobre ele, imagino que ele deveria vir com os pinos macho pra cima, pro ethernet shield pegar, ou não?

            Eder Paulo Pereira
          2. Boa tarde Eder,

            Sim, mas no caso, o USB Host Shield vem apenas com o conector fêmea. No tipo de configuração que você precisa, seria necessário trocar o conector.

            Abraço.

            Adilson – Equipe FILIPEFLOP

            Adilson Thomsen
      2. Amigo, infelizmente o site indicado está fora do ar. Poderia dar mais informações sobre como fazer?

  16. Alguém adquiriu esse shield e utilizou com mais teclados? obtiveram sucesso ou existiram alguns teclados que não “funcionaram”.

    grato

  17. Poderiam ajudar… usei este usb host Shield com o Arduíno R3… consegui controlar normalmente um servo pelo controle de ps3 mas os leds não acendiam direito(fikavam bem fracos) utilizei 9V de tensão… devo aumentar mais a tensão,ou a corrente? Obrigado

    Lucas Victor Pereira
    1. Talvez tenha esquecido de definir os pinos dos LEDs como OUTPUT usando a função pinMode. Já aconteceu isso comigo, e eu não achava o problema, que era bem simples. kkk

  18. Uma informação por favor …

    No exemplo da conexão do teclado no shield, se invés de um tecladoi USB eu utilizasse um teclado sem fio onde eu colocaria na entrada USB do Shield o Trasncever que vem junto com o teclado , eu digitando no teclado teria o que foi digitado na Serial ? grato.

  19. quando eu vou compilar o codigo do teste do teclado aparece a seguinte mensagem:
    ‘HID_PROTOCOL_KEYBOARD’ was not declared in this scope
    alguem sabe o erro?

    1. Também estou com esse problema. Alguém poderia ajudar? Obrigado!

  20. Uma dúvida… É possível conectar um pen drive ao shield, e utilizá-lo para reproduzir arquivos de áudio de acordo com as entradas setadas em um Arduíno mega?

  21. Como faço para pegar dados de arquivos txt em pendrives?com a biblioteca principal ou ate mesmo a 2.0.

  22. Eu estou realizando um projeto em que um Scanner barcode, conectado ao shield USB, lê um bar code e envia o número a uma variável do Arduino Uno que verifica, dentro da programação, qual é o número e, baseado nessa informação, se realiza uma ação no projeto. Existe alguma função que faça essa passagem de leitura para escrita ou qualquer sugestão para eu fazer isso?

    1. O codigo desse post, guarda o valor lido em uma variavel, mas apenas um numero, como você irá ler um codigo de barras teria que conctenar esses valores e guardar em uma string, depois disso executar o comando if.

  23. Pessoal, estou a procura de uma ajudinha aparentemente simples, no entanto nada longe do assunto aqui discutido, a ideia é a comunicação do USB host + MSR605, gostaria em um primeiro momento apenas controlar os leds da maquina, usei a library 2.0 e o exemplo PL2303 modificando basicamente apenas para o comando //uint8_t data= Serial.read(); uint8_t data2= 0x1b, data3=0x82; que seriam responsáveis (descritos no manual) por acender e apagar todos os leds, mais não é o que acontece, alguém pode ajudar! Grato.

    1. Bem mais aliviado, gostaria de deixar registrado que consegui resolver o problema!!! Eram meros detalhes na própria biblioteca USB Host 2.0 (problemas de incompatibilidade) contudo, pequenas alterações e inclusões vide manual, fizeram toda a diferença para ganhar o controle do produto. Dica:. IDVendor outros detalhes há futuros interessados será sempre um prazer poder ajudar!

  24. Boa tarde, gostaria de saber se com esse modulo eu consigo conectar o celular ao arduino e enviar e receber dados?

    Por exemplo, recebo uma string, no arduino, mando essa string por uma variável para o celular, e essa string, é processada pelo celular e é mostrado algo na tela do celular.

    Consigo fazer isso?

    Você teria exemplos dessa comunicação?

    No caso eu queria mandar strings e números.

    Por exemplo se um sensor enviasse o numero zero ‘0’, apareceria no celular led apagado. Um ‘1’, led aceso.
    E caso ele mande uma string tipo meu nome, “Stella Marques” Esse nome apareça na tela do celular. Consigo fazer isso? Você tem exemplos ou dicas de onde procurar isso?

  25. Boa tarde, gostaria de saber se com esse modulo eu consigo conectar o celular ao arduino e enviar e receber dados?

    Você teria exemplos dessa comunicação?

    No caso eu queria mandar strings e números.

    Por exemplo se um sensor enviasse o numero zero ‘0’, apareceria no celular led apagado. Um ‘1’, led aceso.
    E caso ele mande uma string tipo meu nome, “Stella Marques” Esse nome apareça na tela do celular. Consigo fazer isso? Você tem exemplos ou dicas de onde procurar isso?

  26. Bom dia
    Quando compilo dá sempre o seguinte erro:
    (fatal error: usbhub.h: No such file or directory)

    Mas o ficheiro usbhub.h está na diretoria libraries na pasta USB_Host_Shield_2.0 assim como a hidboot.h e essa não dá erro.
    Alguém me pode ajudar por favor?

  27. montei o Pan/Tilt, funcionou direitinho.
    Gostaria de ter um programa para gravar no pc, através do cabo USB, uma série de movimentos, em seguida rodar o programa no pc e repetir os mesmos movimentos do Pan/Tilt, quantas vezes quiser.
    Será que consigo por aqui?
    Obrigado.
    martins.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *