लिनक्स में, USB से जुड़े कई Arduinos की पहचान कैसे करें?


17

अगर मेरे पास एक से अधिक Arduinos एक Linux कंप्यूटर पर USB से जुड़ा है, और वे के रूप में दिखाते हैं

  • / TTY / ACM0
  • / TTY / ACM1
  • / TTY / ACM2

मैं कैसे पहचान सकता हूं कि कौन सा Arduino है जो सीरियल कनेक्शन के माध्यम से उनसे जुड़े बिना है ? क्या Arduino पर एक सीरियल नंबर या एक अद्वितीय आईडी है?

आपके समय के लिए शुक्रिया।

स्थिति: Uno R3, मेगा, लियोनार्डो के साथ / ttyACM [1,2,3]

उपर्युक्त क्रम में उपकरणों के साथ lsusb आउटपुट:

...
बस 001 डिवाइस 011: आईडी 2341: 0043
बस 001 डिवाइस 013: आईडी 2341: 8036
...
बस 001 डिवाइस 014: आईडी 2341: 0042

lsusb -d विक्रेता: डिवाइस -vvv प्रत्येक के लिए दिखाता है

ऊनो

बस 001 डिवाइस 014: आईडी 2341: 0042
डिवाइस डिस्क्रिप्टर:
  bLength 18
  bDescriptorType 1
  bcdUSB 1.10
  bDeviceClass 2 संचार
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPacketSize0 8
  idVendor 0x2341
  idProduct 0x0042
  bcdDevice 0.01
  iManufacturer 1 Arduino (www.arduino.cc)
  उपज २
  iSerial 220 55330313735351910141
  bNumConfigurations 1
  विन्यास विवरणक:
    bLength 9
    bDescriptorType 2
    wTotalLength 62
    bNumInterfaces 2
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xc0
      स्वयं संचालित है
    मैक्सपावर 100mA
    इंटरफ़ेस विवरणक:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 0
      bAlternateSetting 0
      bNumEndpoints 1
      bInterfaceClass 2 संचार
      bInterfaceSubClass 2 सार (मॉडेम)
      bInterfaceProtocol 1 एटी-कमांड (v.25ter)
      iInterface 0
      सीडीसी हैडर:
        bcdCDC 10.01
      सीडीसी एसीएम:
        bmCapabilities 0x06
          विराम देता है
          लाइन कोडिंग और धारावाहिक राज्य
      सीडीसी यूनियन:
        bMasterInterface 0
        bSlaveInterface १
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x82 EP 2 IN
        bmAttributes 3
          ट्रांसफर टाइप इंटरप्ट
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0008 1x 8 बाइट्स
        bInterval 255
    इंटरफ़ेस विवरणक:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 1
      bAlternateSetting 0
      bNumEndpoints 2
      bInterfaceClass 10 सीडीसी डेटा
      bInterfaceSubClass 0 अप्रयुक्त
      bInterfaceProtocol 0
      iInterface 0
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x04 EP 4 OUT
        bmAttributes 2
          स्थानांतरण प्रकार थोक
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval १
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x83 EP 3 IN
        bmAttributes 2
          स्थानांतरण प्रकार थोक
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval १
डिवाइस स्थिति: 0x0000
  (बस संचालित)

Leonardo:

बस 001 डिवाइस 013: आईडी 2341: 8036
डिवाइस डिस्क्रिप्टर:
  bLength 18
  bDescriptorType 1
  bcdUSB 2.00
  bDeviceClass 0 (इंटरफ़ेस स्तर पर परिभाषित)
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPacketSize0 64
  idVendor 0x2341
  idProduct 0x8036
  bcdDevice 1.00
  iManufacturer 1 Arduino LLC
  iProduct 2 Arduino लियोनार्डो
  iSerial 0
  bNumConfigurations 1
  विन्यास विवरणक:
    bLength 9
    bDescriptorType 2
    wTotalLength 100
    bNumInterfaces 3
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0x80
      (बस संचालित)
    मैक्सपावर 500mA
    इंटरफ़ेस एसोसिएशन:
      bLength ength
      bDescriptorType 11
      bFirstInterface 0
      bInterfaceCount 2
      bFunctionClass 2 संचार
      bFunctionSubClass 2 सार (मॉडेम)
      bFunctionProtocol 1 एटी-कमांड (v.25ter)
      iFunction 0
    इंटरफ़ेस विवरणक:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 0
      bAlternateSetting 0
      bNumEndpoints 1
      bInterfaceClass 2 संचार
      bInterfaceSubClass 2 सार (मॉडेम)
      bInterfaceProtocol 0 कोई नहीं
      iInterface 0
      सीडीसी हैडर:
        bcdCDC 1.10
      सीडीसी कॉल प्रबंधन:
        bmCapabilities 0x01
          कॉल प्रबंधन
        bDataInterface 1
      सीडीसी एसीएम:
        bmCapabilities 0x06
          विराम देता है
          लाइन कोडिंग और धारावाहिक राज्य
      सीडीसी यूनियन:
        bMasterInterface 0
        bSlaveInterface १
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x81 EP 1 IN
        bmAttributes 3
          ट्रांसफर टाइप इंटरप्ट
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval 0
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x83 EP 3 IN
        bmAttributes 2
          स्थानांतरण प्रकार थोक
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval 0
    इंटरफ़ेस विवरणक:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 2
      bAlternateSetting 0
      bNumEndpoints 1
      bInterfaceClass 3 मानव इंटरफ़ेस डिवाइस
      bInterfaceSubClass 0 कोई उपवर्ग नहीं
      bInterfaceProtocol 0 कोई नहीं
      iInterface 0
        छिपाई डिवाइस डिस्क्रिप्टर:
          bLength 9
          bDescriptorType 33
          bcdHID 1.01
          bCountryCode 0 समर्थित नहीं है
          bNumDescriptors 1
          bDescriptorType 34 रिपोर्ट
          wDescriptorLength 101
          रिपोर्ट विवरणक: (लंबाई 101 है)
            आइटम (वैश्विक): उपयोग पृष्ठ, डेटा = [0x01] 1
                            सामान्य डेस्कटॉप नियंत्रण
            आइटम (स्थानीय): उपयोग, डेटा = [0x02] 2
                            चूहा
            आइटम (मुख्य): संग्रह, डेटा = [0x01] 1
                            आवेदन
            आइटम (स्थानीय): उपयोग, डेटा = [0x01] 1
                            सूचक
            आइटम (मुख्य): संग्रह, डेटा = [0x00] 0
                            शारीरिक
            आइटम (वैश्विक): रिपोर्ट आईडी, डेटा = [0x01] 1
            आइटम (वैश्विक): उपयोग पृष्ठ, डेटा = [0x09] 9
                            बटन
            आइटम (स्थानीय): उपयोग न्यूनतम, डेटा = [0x01] 1
                            बटन 1 (प्राथमिक)
            आइटम (स्थानीय): अधिकतम उपयोग, डेटा = [0x03] 3
                            बटन 3 (तृतीयक)
            आइटम (वैश्विक): तार्किक न्यूनतम, डेटा = [0x00] 0
            आइटम (वैश्विक): तार्किक अधिकतम, डेटा = [0x01] 1
            आइटम (वैश्विक): रिपोर्ट गणना, डेटा = [0x03] 3
            आइटम (वैश्विक): रिपोर्ट का आकार, डेटा = [0x01] 1
            आइटम (मुख्य): इनपुट, डेटा = [0x02] 2
                            डेटा चर निरपेक्ष No_Wrap रैखिक
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            आइटम (वैश्विक): रिपोर्ट गणना, डेटा = [0x01] 1
            आइटम (वैश्विक): रिपोर्ट का आकार, डेटा = [0x05] 5
            आइटम (मुख्य): इनपुट, डेटा = [0x03] 3
                            लगातार चर निरपेक्ष No_Wrap रैखिक
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            आइटम (वैश्विक): उपयोग पृष्ठ, डेटा = [0x01] 1
                            सामान्य डेस्कटॉप नियंत्रण
            आइटम (स्थानीय): उपयोग, डेटा = [0x30] 48
                            दिशा-X
            आइटम (स्थानीय): उपयोग, डेटा = [0x31] 49
                            दिशा-Y
            आइटम (स्थानीय): उपयोग, डेटा = [0x38] 56
                            पहिया
            आइटम (वैश्विक): तार्किक न्यूनतम, डेटा = [0x81] 129
            आइटम (वैश्विक): तार्किक अधिकतम, डेटा = [0x7f] 127
            आइटम (वैश्विक): रिपोर्ट का आकार, डेटा = [0x08] 8
            आइटम (वैश्विक): रिपोर्ट गणना, डेटा = [0x03] 3
            आइटम (मुख्य): इनपुट, डेटा = [0x06] 6
                            डेटा परिवर्तनीय सापेक्ष No_Wrap रैखिक
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            आइटम (मुख्य): अंत संग्रह, डेटा = कोई नहीं
            आइटम (मुख्य): अंत संग्रह, डेटा = कोई नहीं

            ......

      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x84 EP 4 IN
        bmAttributes 3
          ट्रांसफर टाइप इंटरप्ट
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval १
डिवाइस स्थिति: 0x0000
  (बस संचालित)

और मेगा 256:

बस 001 डिवाइस 014: आईडी 2341: 0042
डिवाइस डिस्क्रिप्टर:
  bLength 18
  bDescriptorType 1
  bcdUSB 1.10
  bDeviceClass 2 संचार
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPacketSize0 8
  idVendor 0x2341
  idProduct 0x0042
  bcdDevice 0.01
  iManufacturer 1 Arduino (www.arduino.cc)
  उपज २
  iSerial 220 55330313735351910141
  bNumConfigurations 1
  विन्यास विवरणक:
    bLength 9
    bDescriptorType 2
    wTotalLength 62
    bNumInterfaces 2
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0xc0
      स्वयं संचालित है
    मैक्सपावर 100mA
    इंटरफ़ेस विवरणक:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 0
      bAlternateSetting 0
      bNumEndpoints 1
      bInterfaceClass 2 संचार
      bInterfaceSubClass 2 सार (मॉडेम)
      bInterfaceProtocol 1 एटी-कमांड (v.25ter)
      iInterface 0
      सीडीसी हैडर:
        bcdCDC 10.01
      सीडीसी एसीएम:
        bmCapabilities 0x06
          विराम देता है
          लाइन कोडिंग और धारावाहिक राज्य
      सीडीसी यूनियन:
        bMasterInterface 0
        bSlaveInterface १
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x82 EP 2 IN
        bmAttributes 3
          ट्रांसफर टाइप इंटरप्ट
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0008 1x 8 बाइट्स
        bInterval 255
    इंटरफ़ेस विवरणक:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 1
      bAlternateSetting 0
      bNumEndpoints 2
      bInterfaceClass 10 सीडीसी डेटा
      bInterfaceSubClass 0 अप्रयुक्त
      bInterfaceProtocol 0
      iInterface 0
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x04 EP 4 OUT
        bmAttributes 2
          स्थानांतरण प्रकार थोक
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval १
      समापन बिंदु विवरणक:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0x83 EP 3 IN
        bmAttributes 2
          स्थानांतरण प्रकार थोक
          सिंक प्रकार कोई नहीं
          उपयोग प्रकार डेटा
        wMaxPacketize 0x0040 1x 64 बाइट्स
        bInterval १
डिवाइस स्थिति: 0x0000
  (बस संचालित)


क्या आप एक को अनप्लग कर सकते हैं और देख सकते हैं कि कौन गायब हो गया है?
बेनामी पेंग्विन

1
वास्तव में नहीं, मैं इसे एक सुदूर सौर ऊर्जा से चलने वाले सेंसर ऐरे के लिए करना चाहता हूं जो किसी के लिए बहुत दूर होगा जब वह रिबूट होता है।
वल्द b।

इग्नासियो वास्केज़-अब्राम्स - मैं lsusb -vvv से / dev / ttyACM <x> तक की जानकारी को कैसे मैप कर सकता हूं? क्या lsusb आउटपुट में कुछ है जो मैं पार्स कर सकता हूं? विचार के लिए आपका धन्यवाद!
वल्द b।

क्या आपके पास एक और Arduino है जिससे आप आउटपुट की तुलना कर सकते हैं?
इग्नासियो वाज़क्वेज़-अब्राम्स

जवाबों:


6

मान लीजिए कि आपका डिस्ट्रो उपयोग कर रहा है udev:

udevadm info --query=all --name=/dev/ttyACM0

इसे (sudo / su) चलाने के लिए आपको रूट विशेषाधिकारों की आवश्यकता हो सकती है। यह इस तरह की जानकारी की एक सूची का उत्पादन करेगा:

P: /devices/pci0000:00/0000:00:1d.2/usb4/4-2/4-2:1.0/tty/ttyACM0
N: ttyACM0
S: serial/by-id/usb-Dean_Camera_LUFA_USB-RS232_Adapter_74133353537351403012-if00
S: serial/by-path/pci-0000:00:1d.2-usb-0:2:1.0
E: DEVLINKS=/dev/serial/by-id/usb-Dean_Camera_LUFA_USB-RS232_Adapter_74133353537351403012-if00 /dev/serial/by-path/pci-0000:00:1d.2-usb-0:2:1.0
E: DEVNAME=/dev/ttyACM0
E: DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb4/4-2/4-2:1.0/tty/ttyACM0
E: ID_BUS=usb
E: ID_MM_CANDIDATE=1
E: ID_MODEL=LUFA_USB-RS232_Adapter
E: ID_MODEL_ENC=LUFA\x20USB-RS232\x20Adapter
E: ID_MODEL_FROM_DATABASE=Uno R3 (CDC ACM)
E: ID_MODEL_ID=0043
E: ID_PATH=pci-0000:00:1d.2-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_00_1d_2-usb-0_2_1_0
E: ID_REVISION=0001
E: ID_SERIAL=Dean_Camera_LUFA_USB-RS232_Adapter_74133353537351403012
E: ID_SERIAL_SHORT=74133353537351403012
E: ID_TYPE=generic
E: ID_USB_DRIVER=cdc_acm
E: ID_USB_INTERFACES=:020201:0a0000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Dean_Camera
E: ID_VENDOR_ENC=Dean\x20Camera
E: ID_VENDOR_FROM_DATABASE=Arduino SA
E: ID_VENDOR_ID=2341
E: MAJOR=166
E: MINOR=0
E: SUBSYSTEM=tty
E: UDEV_LOG=3
E: USEC_INITIALIZED=751387324986

यह atmega16u2 (सीरियल के लिए यूएसबी) पर संशोधित फर्मवेयर के साथ एक यूनो के लिए है। रुचि की पंक्तियाँ शायद ID_MODEL_ID और ID_MODEL_FROM_DATABASE हैं।


धन्यवाद। मैं डिफ़ॉल्ट रूप से hotplug2 के साथ इस मामले में OpenWrt का उपयोग कर रहा हूं, लेकिन मैं udev पर स्विच करने और यह परीक्षण करने का प्रयास करूंगा।
वल्द b।

5

आप प्रत्येक के लिए एक उपनाम जोड़ सकते हैं। तब आप जानते हैं कि कौन सा है। यहाँ कैसे सेट अप करने के लिए एक अच्छा ट्यूटोरियल है

यहाँ एक स्निपेट है जो मैंने ट्यूटोरियल के आधार पर लिखा था। नीचे दिए गए उदाहरण में, मैं एक FTDI RS232RL USB से सीरियल एडाप्टर का उपयोग कर रहा हूं, जो मुझे विश्वास है कि Arduino का भी उपयोग करता है।

  1. USB- सीरियल डिवाइस के लिए एक उपनाम देने के लिए, हमें डिवाइस पर कुछ जानकारी खोजने की आवश्यकता है
  2. USB में प्लग करें। यह मानता है कि आपने इस उपयोग के लिए ड्राइवर पहले ही इंस्टॉल कर लिया है और टाइप करते समय डिवाइस दिखाई देता है:

lsusb

  1. हमें निम्नलिखित की आवश्यकता है। विक्रेता आईडी बी। उत्पाद आईडी सी। डिवाइस सीरियल नंबर
  2. ऐसा करने के लिए, यह थोड़ा शिकार लेता है। आपके सभी उपकरण '/ var / log / संदेश' में प्रविष्टियाँ दर्ज करते हैं।

इसलिए हम इस फ़ाइल को पढ़ सकते हैं और सही USB पा सकते हैं:

grep "ftdi" /var/log/messages

आप "usb" का भी उपयोग कर सकते हैं

  1. यह सभी संदेशों को ftdi के साथ टैग किया गया है:

  2. Ftdi_sio के आगे, 1-1.2 जैसी संख्या है। यह USB डिवाइस है

grep "usb 1-1.2" /var/log/messages

या आप उपयोग कर सकते हैं:

dmesg | grep "usb 1-1.3"
  1. यह हमें वह सारी जानकारी देता है जिसकी हमें आवश्यकता है:

USB उपनाम

  1. अब हाथ में सीरियल नंबर की सूची के साथ आइए एक UDEV नियम बनाएं जो इनमें से प्रत्येक डिवाइस के लिए एक अच्छा प्रतीकात्मक लिंक बनाएगा। UDEV नियम आमतौर पर /etc/udev/rules.d में कई फाइलों में बिखरे होते हैं। 99-usb-serial.rules नामक एक नई फ़ाइल बनाएं और उसमें निम्नलिखित पंक्तियाँ डालें:

इस उदाहरण में मेरे उपनाम को 'एलसीडीबॉक्स' कहा जाता है

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A601ERJJ", SYMLINK+="lcdbox"
  1. SYMLINK आपके उपनाम का नाम है। इस मामले में मेरा उपनाम lcdbox है।
  2. फ़ाइल सहेजें और टाइप करें

    सूद udvadm नियंत्रण - लोड-नियम

  3. प्रकार

    ls –l / dev / lcdbox

lrwxrwxrwx 1 रूट रूट 7 जनवरी 1 1970 / देव / एलसीडीबॉक्स -> ttyUSUSB0

  1. इससे पता चलता है कि मेरे lcdbox उर्फ ​​ttyUSB0 के लिए मैप किया गया है

4

यह काफी आसान है! आपको ftdi चिप्स फर्मवेयर को कस्टमाइज़ करना होगा और एक udev नियम जोड़ना होगा:

सबसे पहले, सूत्रों के ftdi_eepromमाध्यम से apt-getया उससे प्राप्त करें। अपने डिवाइस को lsusb के माध्यम से पहचानें और आईडी प्राप्त करें:

lsusb

बस 001 डिवाइस 005: आईडी 0403: 6001 फ्यूचर टेक्नोलॉजी डिवाइसेस इंटरनेशनल, लिमिटेड FT232 सीरियल (UART) आईसी
....

एक विन्यास तैयार करें और सुनिश्चित करें, कि vendor_idऔर product_idमैच करें। Stringsअपने डिवाइस के लिए एक अद्वितीय आईडी प्राप्त करने के लिए अनुभाग में स्ट्रिंग्स को कस्टमाइज़ करें ।

seller_id = 0x0403 # विक्रेता आईडी
product_id = 0x6001 # उत्पाद आईडी

max_power = 50 # अधिकतम। बिजली की खपत: मूल्य * 2 एमए। 0 का उपयोग करें अगर self_powered = true।

###########
# स्ट्रिंग्स #
########### 
निर्माता = "एफटीडीआई" # निर्माता
उत्पाद = "अरुडिनो नैनो" # उत्पाद
धारावाहिक = "arduino1" # सीरियल

###########
# विकल्प #
###########
self_powered = false # बस संचालित के लिए इसे बंद करें
Remote_wakeup = false # दूरस्थ वेकअप सुविधा के लिए इसे चालू करें
use_serial = true # क्रम संख्या स्ट्रिंग का उपयोग करें

# आम तौर पर बाहर इन झंडे में से एक को बदलने की जरूरत नहीं है
# BM_type_chip = true # नए चिप सभी बीएम प्रकार हैं
in_is_isochronous = false # समापन बिंदु में Isochronous है
out_is_isochronous = false # आउट समापन बिंदु Isochronous है
suspend_pull_downs = false # कम पावर के लिए सस्पेंड पुल डाउन सक्षम करें
change_usb_version = false # USB संस्करण बदलें
usb_version = 0x0200 # केवल तभी उपयोग किया जाता है जब change_usb_version सक्षम होता है

########
# विविध #
########

फ़ाइल नाम = "eeprom.old" # फ़ाइल नाम, फ़ाइल लेखन को छोड़ने के लिए खाली छोड़ दें
cbus0 = RXLED #
cbus1 = TXLED #

वर्तमान ftdi- फ़र्मवेयर को डंप करें:

ftdi_eeprom --read-eprom

यह कमांड बनाता है ${pwd}/eeprom.old, जिसमें ftdi पर वर्तमान फर्मवेयर है। इस फ़ाइल को जारी रखने से पहले बैकअप लें , क्योंकि फ़ाइल के दौरान फिर से लिखा जाता है। बैकअप के बाद, ftdi फ्लैश करें:flash-eeprom

ftdi_eeprom --flash-eeprom myconfig.conf

अब, एक udev नियम बनाएं, जैसे

SUBSYSTEMS=="usb", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="$attr{serial}", OWNER="bananapi", GROUP="pi", MODE="0777"

में /etc/udev/rules.d/90-arduino-usb.rulesऔर udev पुनरारंभ करें।

service udev restart

अपने डिवाइस को अनप्लग और री-प्लग करें और कोशिश करें

ls -lah /dev/arduino1

उपरोक्त के arduino1तहत स्ट्रिंग को कहाँ परिभाषित serialकिया गया है .conf

इसे भी देखें: ftdi_eeprom के जोखिम? - चमकती के बाद TX हमेशा उच्च होता है


3

मैंने एक स्क्रिप्ट का उपयोग एक उपनाम बनाने के लिए किया होगा /dev/ और udevअन्य उत्तरों की तरह उस पर समूह और अधिकार भी निर्धारित किए होंगे ।

लेकिन अगर मेरे पास नहीं होता तो udevमैं या lsusbमें पाइप grepकर देताawk की तरह, lsusb|grep -e "idProduct"

वैसे भी, के साथ udevया के साथ नियमों lsusbऔर grepयूएसबी उपकरणों, उपयोग की पहचान करने idVendor, idProductऔर iSerialमें Device descriptorका हिस्सा lsusbउचित idenification बनाने के लिए। idVendorआप manufaturer बताता है, idProductनिर्माता से उत्पाद indentify चाहिए, लेकिन कभी कभी वे एक से अधिक उत्पाद के लिए एक ही उत्पाद आईडी का उपयोग करें। अंत में, यदि आवश्यक हो, तो iSerialउस उत्पाद के प्रत्येक उदाहरण के लिए एक अद्वितीय आईडी होना चाहिए।


3

उबंटू 16.04 पर (और शायद पिछले संस्करण या अन्य डिस्ट्रीब्यूटर्स भी), आप कर सकते हैं:

> ls /dev/serial/by-id

जो प्रदर्शित करता है (मेरे बॉक्स पर जहां एक Arduino UNO जुड़ा हुआ है):

usb-Arduino__www.arduino.cc__0043_A4139363931351318241-if00

आप यहां डिवाइस आईडी 0043 (UNO) को आसानी से देख सकते हैं।

यह फ़ाइल वास्तव /dev/ttyACM0में मेरे बॉक्स का लिंक है ।


2

आप हमेशा शून्य सेटअप () में सीरियल के माध्यम से किसी प्रकार का आईडी प्रिंट बना सकते हैं। कुछ बोर्ड के जुड़े होने के बाद यह आपके आईडी को आपके यूएसबी इंटरफेस पर भेज देगा (जिसे आप अपने लिनेन बॉक्स पर किसी तरह के डेमॉन ऐप के साथ सुन रहे हैं)। एक बार जब आप आईडी प्राप्त कर लेते हैं, तो आप इसे 'Arduino1': '/ dev / ttyACM0', 'Arduino2': '/ dev / ttyACM1', 'Arduino3': 'adev.ttyACM2'...etc' मार्ग पर ले सकते हैं।

ध्यान रखें कि जब किसी कारण से डिवाइस काट दिया जाता है, तो यह भौतिक पथ बदल सकता है, इसलिए आपको उन सभी को फिर से तैयार करना पड़ सकता है। इस मामले के लिए अलग-अलग फ़ंक्शन पूर्व लिखना अच्छा हो सकता है: get_id () जिसे आप किसी भी समय कॉल कर सकते हैं (न केवल स्टार्टअप पर)।


1

मैं शक्तिशाली तरीकों की पहचान करने के लिए USB के विषम तरीकों से बचने के लिए, स्केच ही एक विशेष पहचान आदेश का जवाब देने की तरह, कुछ अन्य तरीके की पहचान करने के लिए परीक्षा के लिए उत्सुक हूँ


0

अवलोकन

  • Asi_lumen के रूप में उनके जवाब में उल्लिखित एक तरीका है Ftdi चिप EEPROM को फ्लैश करने के लिए अद्वितीय सीरियल नंबर है, जिसे तब UDEV नियमों द्वारा पहचाना जा सकता है।

    लेकिन यह पता चलता है कि यह सस्ते चीनी Arduinos पर काम नहीं करेगा, जिसमें FTDI के बजाय CH340G चिप है, जिसमें अद्वितीय ID संग्रहीत करने के लिए EEPROM नहीं है ( CH340B को काम करना चाहिए )।

  • यह उत्तर विशेष स्क्रिप्ट के साथ UDEV नियम लिखने का सुझाव देता है जो Arduino को सीरियल के माध्यम से अपनी अनूठी आईडी भेजने के लिए कहता है। इसके साथ समस्या यह है कि आपको Arduino स्केच को संशोधित करने की आवश्यकता है और सामान्य तौर पर यह काफी जटिल है।

पोर्ट द्वारा पहचानना

इसलिए मुझे जो सबसे आसान तरीका मिला, वह था यूडीवी के नियमों का उपयोग करना और यूएसबी पोर्ट (देवपथ) द्वारा Arduinos की पहचान करना, इसलिए Arduino को उसी पोर्ट से कनेक्ट करना (यहां तक ​​कि नेस्टेड यूएसबी हब में) लगातार नाम बनाएगा ।

TLDR सेटअप:

के संशोधित संस्करण इस

  1. Arduino idVendor और idProduct ढूँढें:

lsusb

आपको कुछ इस तरह मिलेगा:

...
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 124: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 003 Device 123: ID 214b:7000  
Bus 003 Device 122: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 003 Device 121: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 003 Device 120: ID 1a40:0101 Terminus Technology Inc. Hub
...

Arduino को जोड़ने / डिस्कनेक्ट करने से पता चलता है कि यह कौन सा है (मेरे पास 3 कनेक्ट हैं)। हम इसकी आईडी की तलाश कर रहे हैं। मेरे मामले में "... आईडी 1a86: 7523 किनहेंग ..."। तो idVendor = 1a86, idProduct = 7523

  1. नई UDEV नियम फ़ाइल बनाएँ:

sudo nano /etc/udev/rules.d/99-usb-serial.rules

  1. आपके द्वारा बनाए गए नियम फ़ाइल में कॉपी पेस्ट पर पिछले चरण में आपको जो मिला है, उसके द्वारा idVendor और idProduct मान संशोधित करें:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyUSB-arduino%s{/devpath}"

  1. UDEV नियम पुनः लोड करें

sudo udevadm control --reload

  1. Arduinos की प्रतिकृति दें और अब इसका विशिष्ट नाम होगा। इसे जांचने के लिए टाइप करें:

ls /dev/ttyUSB*


जो आउटपुट देगा:

/dev/ttyUSB1 /dev/ttyUSB3 /dev/ttyUSB-arduino2.1 /dev/ttyUSB-arduino2.4 /dev/ttyUSB2 /dev/ttyUSB4 /dev/ttyUSB-arduino2.2 /dev/ttyUSB-arduino3

जैसा कि आप देख सकते हैं कि हम अभी भी / dev / ttyUSBx प्राप्त करते हैं क्योंकि पहले हमेशा बदलते रहे हैं जिसके आधार पर पहले जुड़ा था। लेकिन अब हमारे पास / dev / ttyUSB-arduino {port} भी हैं जो हमेशा एक ही पोर्ट के लिए समान होते हैं और केवल एक ही स्टूडियो के लिए होते हैं। विश्लेषण करने के लिए क्या "..arduino2.4" का अर्थ है: 2 लैपटॉप के दूसरे पोर्ट को संदर्भित करता है और 4 से 4 पोर्ट यूएसबी हब पर।

इसे बेहतर देखने के लिए टाइप करें:

lsusb -t

आउटपुट:

...
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 1: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 5, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 2: Dev 84, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 85, If 0, Class=Vendor Specific Class, Driver=ch341, 12M
        |__ Port 2: Dev 86, If 0, Class=Vendor Specific Class, Driver=ch341, 12M
        |__ Port 3: Dev 87, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 4: Dev 88, If 0, Class=Vendor Specific Class, Driver=ch341, 12M
    |__ Port 3: Dev 89, If 0, Class=Vendor Specific Class, Driver=ch341, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
...

कनेक्ट / डिस्कनेक्ट करके आप देख सकते हैं कि कौन से डिवाइस किस पोर्ट पर हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.