Identificar o que o /dev/ é um dispositivo USB conectado ao
-
20-12-2019 - |
Pergunta
Eu gostaria de escrever um Rubi programa para OSX que se comunica via USB com o meu Arduino.Eu vou usar o serialport gem para essa finalidade.
Eu encontrei um exemplo de código que diz:
port_str = "/dev/ttyUSB0" #may be different for you
Como posso digitalizar e encontrar o Arduino, e sabemos que a porta que eu deveria ligar automaticamente?(Eu tenho OSX) Obrigado!
Solução
Isso pode ser complicado para fazer, de uma maneira geral, porque Arduino dispositivos aparecem como USB, portas seriais, tornando-se difícil distinguir entre o Arduino e não-Arduino portas.
A abordagem de força bruta é:enumerar USB dispositivos seriais, open() um de cada vez, e veja se o seu firmware de inicialização do cabeçalho é enviado na outra extremidade.No OSX, o serial USB dispositivos são /dev/tty.*, mas isso pode mudar com futuras atualizações do sistema operacional.Este método funciona, mas pode ser lento e tempo sensíveis.Descobri que um atraso de inicialização no Arduino antes de enviar um cabeçalho de ajuda, bem como uma simples "olá, você está aí? de comando " com o host pode usar para bater por sinais de vida.
Além disso, você pode salvar a última porta encontrado para que as próximas aplicativo é iniciado tentar que a porta primeiro.
Uma variante:se o seu aplicativo solicita que o usuário conecte o Arduino na inicialização, você pode listar as portas USB no /dev, aguarde para que o usuário confirme ou ligado, e lista as portas novamente.Qualquer recém-aparecendo dispositivo é provável que o seu Arduino.
No próximo nível, você pode olhar para o USB id de Fornecedor e Produto (VID & PID).No entanto, essas Identificações estão por todo o mapa em Arduino-terra.Eles diferem pelo modelo, versão, revisão, clones Chineses, e os vários Arduino-dispositivos compatíveis.Veja isso elaborado em Adafruit.
Se você está apenas tentando fazer as coisas funcionarem com uma muito estreita conjunto de hardware (por exemplo,o Arduino em seu banco), você pode usar este OSX comando para ver o dispositivo USB detalhes:
system_profiler SPUSBDataType
Com o meu sistema, eu recebo:
...
USB Bus:
Host Controller Location: Built-in USB
Host Controller Driver: AppleUSBUHCI
PCI Device ID: 0x7fff000027c9
PCI Revision ID: 0x7fff00000002
PCI Vendor ID: 0x7fff00008086
Bus Number: 0x3d
Communication Device:
Product ID: 0x0043
Vendor ID: 0x2341
Version: 0.01
Serial Number: 75331313133351800000
Speed: Up to 12 Mb/sec
Manufacturer: Arduino (www.arduino.cc)
Location ID: 0x3d100000 / 2
Current Available (mA): 500
Current Required (mA): 100
A IDENTIFICAÇÃO do local (0x3d100000 / 2) parece corresponder com o nome do dispositivo: /dev/cu.usbmodem3d11
Ver esta pergunta para a execução de comandos de linha de comandos a partir de dentro de um script do Ruby.