sexta-feira, 13 de dezembro de 2013

Guia para o Arduino Leonardo

Para conectar o Arduino Leonardo no computador, você vai precisar de um cabo USB tipo Micro-B.
Este cabo fornecerá energia e conectividade para a placa. Ao programar o Leonardo, você deve escolher “Arduino Leonardo” no menu Tools > Boards a partir do Arduino IDE.

Diferenças do Arduino Uno

Em geral, você programa e usa o Leonardo como qualquer outra versão do Arduino. Existem, entretanto, algumas diferenças muito importantes.

Microcontrolador único para sketches e comunicação USB

O Leonardo difere de versões do Arduino na maneira em que usa o microcontrolador para ambas as tarefas: rodar os sketches e se comunicar com o computador, através de USB. O UNO e outras versões do Arduino usam microcontroladores separados para essas duas funções, ou seja, a conexão USB com o computador permanece aberta, independente do estado do microcontrolador principal. Combinando essas duas funcionalidades em um único microcontrolador, o Leonardo nos permite maior flexibilidade, na forma em que ele se comunica com o computador. Isto também ajuda a reduzir o custo da placa, removendo a necessidade de um microcontrolador adicional.

Re-enumeração da Serial no Reset

Considerando que o Leonardo não possui um chip dedicado para lidar com a comunicação serial, significa que a porta serial é virtual – uma rotina do programa. Assim como o computador cria uma instância da porta serial quando você conecta um Arduino qualquer na porta USB, o Leonardo cria uma instância de porta serial toda vez que roda seu bootloader. A placa, quando conectada na porta USB do computador, é instanciada como um Connected Device Class (CDC).

Isso significa que toda vez que você reinicia a placa, a conexão serial USB também é reiniciada. A placa vai desaparecer da lista de portas seriais, e a lista será re-enumerada. Qualquer programa que tentar abrir uma conexão serial com o Leonardo perderá sua conexão. Em contraste com o Arduino UNO, que você pode reiniciar o microcontrolador principal (o ATMega328P), sem terminar a conexão USB (que é mantida por um ATMega8U2 ou um ATMega16U2). Essa diferença tem implicações na instalação do driver, no upload, e na comunicação; que serão discutidos abaixo.

Não reinicia quando a abre a Serial

Ao contrário do Arduino UNO, o Leonardo não reinicia o sketch quando você abre uma porta serial no computador. Isso significa que você não verá os dados que já foram enviados pela serial para o computador, incluindo, por exemplo, a maioria dos dados enviados na função setup().

Esta mudança significa que, se você está usando qualquer instrução Serial print(), println() ou write() no seu setup(), elas não serão exibidas quando você abrir o monitor da serial. Para contornar isso, você pode verificar se a porta serial está aberta antes de chamar a função Serial.begin(), da seguinte forma:

Serial.begin(9600);
    // enquanto serial nao esta aberta, nao faca nada!
   
while (!Serial) ;

Emulação de Teclado e Mouse

Uma vantagem de usar um único chip para seus sketches, e para a USB, é de aumentar a flexibilidade na comunicação com o computador. Enquanto a placa aparece como uma porta virtual (também chamado CDC) serial, aos olhos do seu sistema operacional para programação e comunicação (com a feita pelo Arduino UNO), este também pode se comportar com um teclado ou mouse (HID). Veja a sessão de “Boas Práticas de Codificação” abaixo para dicas sobre como usar essa funcionalidade.

Separação da USB e da Comunicação Serial

No Leonardo, a classe principal Serial refere-se ao driver serial da conexão USB da sua placa. E não está conectada diretamente (fisicamente) aos pinos 0 e 1. Para usar o hardware da porta serial (pinos 0 e 1, RX e TX), utilize Serial1. (Veja Serial Reference Pages para maiores informações)

Diferenças entre Mapeamento de Pinos

O Leonardo possui algumas pequenas diferenças na sua capacidade de atribuição de vários pinos (especialmente para SPI e TWI). Estes são detalhados na Hardware Page.


Instalando os Drivers para o Leonardo

OSX

·         A primeira vez que você conecta um Leonardo em um Mac, o "Keyboard Setup Assistant" será lançado. Não existe nada para ser configurado com o Leonardo, então você pode fechar a caixa de diálogo clicando no botão vermelho, no canto superior esquerdo da janela.



Instruções para Windows

As instruções a seguir são para o Windows 7. Elas são válidas também para o Windows XP, considerando algumas pequenas diferenças entre as janelas de diálogo.

·         Conecte a sua placa e espere pelo Windows começar o processo de instalação dos drivers. Caso o instalador não inicie automaticamente, navegue até o “Windows Device Manager” (Start > Control Panel > Hardware) e encontre o Arduino Leonardo na listagem de dispositivos. Clique com o botão direito e escolha Update driver.



·         Na próxima tela, escolha "Browse my computer for driver software", e clique em Next.



·         Clique no botão Browse... . Outra caixa de diálogo aparece: navegue até a pasta do Arduino que você acabou de fazer o download. Selecione a pasta drivers e clique OK, então clique em Next.



·         Você receberá uma notificação de que a placa não passou no teste Windows Logo. Clique no botão Continue Anyway.



·         Depois de alguns momentos, uma janela irá te informar que o wizard terminou a instalação do Arduino Esplora. Pressione o botão Close.


Instruções para Linux

Não existe a necessidade de instalar drivers para Ubuntu 12.04.


Carregando Código no Leonardo

No geral, você carrega o código no Leonardo como faria em qualquer outra versão do Arduino. Clique no botão upload, no Arduino IDE, e seu sketch será automaticamente carregado na placa; e então iniciado. Isso funciona mais ou menos da mesma forma que no UNO: o software do Arduino comanda um reset na placa, lançando um bootloader – que é responsável por receber, armazenar, e iniciar o novo sketch.

Entretanto, em razão da porta serial ser virtual, ela desaparece quando a placa efetua um reset, então o software do Arduino usa uma estratégia diferente para coordenar o upload, tanto com o UNO, quanto com outras versões. Assim, após iniciar o auto-reset do Leonardo (usando a porta serial selecionada no menu Tools > Serial Port), o software do Arduino espera por uma nova porta virtual (CDC) serial / COM aparecer – a qual ele assume representar o bootloader. Então ele efetua o upload para esta nova porta COM que apareceu.

Essas diferenças afetam a forma que você utiliza o botão de reset para efetuar um upload, se o auto-reset não estiver funcionando. Pressione e segure o botão do Leonardo, então clique no botão de upload no software do Arduino. Apenas solte o botão de reset após você ver a mensagem “Uploading...” aparecer na barra de status do software. Quando você fizer isso, o bootloader iniciará, criando uma nova porta virtual (CDC) serial no computador. O software verá a porta aparecer e efetuará o upload através dela. Novamente, isso é apenas necessário se a forma normal de upload (i.e. apenas clicando no botão de upload) não funcionar. (note que o auto-reset é iniciado quando o computador abre a porta serial na velocidade de 1200 bauds; e então a fecha; isso não funciona se algo interfere com a comunicação USB da placa – por exemplo, desabilitando as interrupções).

Boas Práticas de Codificação com o Leonardo

Atenção ao utilizar bibliotecas de teclado e mouse USB: se as bibliotecas de Mouse ou Keyboard estão constantemente habilitadas, será difícil programar sua placa. Funções como Mouse.move() e Keyboard.print(), que movem o cursor do mouse ou enviam teclas digitadas para um computador conectado, devem apenas ser chamadas quando você estiver pronto para atendê-las. É recomendável usar um sistema de controle que possa ligar essa funcionalidade, assim como um interruptor, ou apenas respondendo a dispositivos que você possa controlar. Quando usando bibliotecas Mouse e Keyboard, é melhor testar antes o resultado, através de Serial.print(). Dessa forma, você pode garantir que os resultados são razoáveis. Mais informações de como lidar com isso, veja exemplos nas bibliotecas Mouse e Keyboard.

Usando o monitor de serial de forma efetiva: como a serial está compartilhando o microcontrolador com o processamento principal, a capacidade do seu computador de preencher o buffer da serial será tão rápido como em versões do UNO ou anteriores. Você vai reparar que se você continuar enviando dados pela serial repetidamente, por exemplo, assim:


void loop() {
    
int sensorReading = analogRead(A0);
    
Serial.println(sensorReading);
}


O monitor da serial vai ficar extremamente lento, enquanto ele tenta acompanhar a velocidade. Se você se deparar com essa situação, adicione um pequeno atraso ao seu loop de forma que o buffer da serial do computador não seja preenchido tão rápido até um atraso de um milissegundo ajudará:


void loop() {
    
int sensorReading = analogRead(A0);
    
Serial.println(sensorReading);
    
delay(1);
}


Aplicações seriais que utilizam as bibliotecas nativas, que não seja a biblioteca RXTX, lêem o buffer da serial mais rapidamente, assim você não deve encontrar este erro, fora do monitor da serial, processing, ou outra aplicação baseada na biblioteca RXTX.


Traduzido por Renato Aloi do original “Guide to the Arduino Leonardo and Micro” (link).

Adquira já o seu Arduino Leonardo na Loja do Curso Arduino!




2 comentários:

  1. Grande Renato Aloi! COmo sempre ajudando os iniciantes e quem jpa está a um tempo no "Mundo Arduino"! Me salvou com a parte que fala do Carregando Código no Leonardo!!!
    Muito obrigado!!!

    ResponderExcluir