Impressora + arduino

Pessoal tive uma ideia e queria saber se é viável, tendo um cabo usb B para B em mãos eu poderia ligar uma impressora (comum de papel) ao arduino? Para dessa forma enviar dados do arduino para impressora.

Boa tarde Arthur,
É possivel imprimir com o arduino e outros microcontroladores, mas não tão facil como você descreveu.
Para funcionar é necessario que a impressora seja conectada ao um host e o arduino tem uma usb do tipo cliente. Geralmente o controlador de usb tipo host vem com a maioria dos sistemas operacionais linux, wruindows, bsd, portanto as beaglebones, raspberrys podem imprimir quase sem mudanças.
Ja o Arduino, suponho que você esteja falando do magrelinho Uno ou do quase fortinho Mega, não possuem OS, mas não tema, a FTDI fez um chip chamado VNC1L que tem duas portas usb que podem ser configuradas como host ou client.
http://www.ftdichip.com/Products/ICs/VNC1L.htm
Quando der certo, imprime uma nota de 100 e manda pra mim.

atenciosamente,
Ronaldo Roledo.

1 curtida

Já deu pra abrir mais a ideia, obrigado Roledo, mas será que não tem como transformar esse client em host no arduino? Ah é um uno…

Nos Arduinos que são munidos com o chip da FTDI não é possível por vias normais, pois este chip tem a função específica de converter USB para Serial padrão RS232, já que o ATMega328 não tem um core de USB.

No entanto, nos modelos mais novos do Arduino (UNO R3, por exemplo) em que essa função foi delegada para um AVR com core USB, o ATMega16U2 (em revisões passadas ATMega8U2), é possível se você sobrescrever o código desse MCU.

A mesma coisa acontece com o Leonardo que usa o ATMega32U4 com core USB, por isso o bootloader dele é maior.

Para fazer qualquer modificação nesse nível você vai precisar de um gravador de AVR qualquer, os 6 pinos que ficam próximos de cada MCU são as conexões SPI para você carregar código diretamente para o MCU.

Mas na sinceridade, apesar de possível, não me apetece o fato de fazer essa mudança, primeiramente porque quando você der uma olhadinha na referência de USB já vai ser frustrante, se não me falhe a memória, deve ter em torno de 600 páginas.

Mais simples é, se você realmente precisa implementar isso, é melhor usar uma placa de desenvolvimento que tenha um core de host para USB, como é o caso da DUE:

The Native USB port can also act as a USB host for connected peripherals such as mice, keyboards, and smartphones. To use these features, see the USBHost reference pages.

Só é uma pena que a biblioteca ainda esteja em desenvolvimento e tenha funções experimentais para mouse e teclado. Hoje em dia, isso é possível fazer com AVR, inclusive a Teensy tem bibliotecas para trabalhar com dispositivos HID: https://www.pjrc.com/teensy/usb_serial.html

Provavelmente a Arduino Zero, que ainda não foi lançada de fato, terá um core de Host para USB também. A MegaADK é mais voltada para dispositivos Android.

Ou você pode simplesmente usar um Arduino Ýun (se realmente preferir Arduino) e pronto, é o mesmo que usar um RPi, BeagleBone, CubieBoard ou qualquer um desses computadores com Linux embarcado, já que o Host de USB já está implementado a nível de Kernel, sendo acessado e configurado pelo CUPS (Common Unix Printer System) que é praticamente um padrão para impressão em ambientes UNIX.

1 curtida

Tá mais simples investir num Raspberry PI