Определение того, что / dev / это USB-устройство, подключенное к

StackOverflow https://stackoverflow.com//questions/20002561

Вопрос

Я хотел бы написать программу RUBY для OSX, которая общается через USB с моим Arduino. Я собираюсь использовать GEM Serialport для этой цели.

Я нашел пример код, который говорит:

port_str = "/dev/ttyUSB0"  #may be different for you
.

Как я могу сканировать и найти Arduino и знать, к каким порту я должен подключиться к автоматической? (У меня есть OSX) Спасибо!

Это было полезно?

Решение

Это может быть сложно делать вообще, потому что устройства Arduino отображаются в виде последовательных портов USB, что трудно различать порты Arduino и Non-Arduino.

Подход Brute-Force - это: перечисляйте USB последовательные устройства, откройте () каждый по очереди и посмотрим, отправляется ли заголовок загрузки вашего прошивки на другом конце. На OSX последовательные устройства USB находятся в /dev/tty.*, но это может измениться с использованием будущих обновлений ОС. Этот метод работает, но может быть медленным и временным чувствительным. Я обнаружил, что задержка запуска на Arduino перед отправкой заголовка помогает, а также простой « Hello, есть ли вы там? » Команда Хост может использовать для взрыва для знаков жизни. < / P >.

Кроме того, вы можете сохранить последний порт, который найден, чтобы последующие приложения запускаются сначала попробуйте этот порт.

Вариант: Если ваше приложение просит пользователя подключить Arduino при запуске, вы можете перечислить USB-порты в / dev, подождите, пока пользователь подтвердит, что он снова подключен, и снова перечислите порты. Любое недавно появляющееся устройство, скорее всего, ваш Arduino.

На следующем уровне вы можете посмотреть на поставщику USB и идентификаторы продукта (VID & PID). Тем не менее, эти идентификаторы находятся по всей карте в Arduino-Land. Они отличаются по модели, версии, ревизии, китайским клонам и различными устройствами, совместимыми Arduino. Смотрите это Написать в Adafruit .

Если вы просто пытаетесь сделать вещи работать с очень узким аппаратным набором (например, One Arduino на вашей скамейке), вы можете использовать эту команду OSX, чтобы увидеть детали устройства USB:

system_profiler SPUSBDataType
.

с моей системой, я получаю:

...
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
.

ID местоположения (0x3D100000 / 2), кажется, совпадает с именем устройства: /dev/cu.usbmodem3d11

см. см. Этот вопрос для командных командных команд в пределах Рубин сценарий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top