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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top