Trong Linux, làm thế nào để xác định nhiều Arduinos được kết nối qua USB?


17

Nếu tôi có nhiều Arduinos được kết nối qua USB với máy tính Linux và chúng hiển thị dưới dạng

  • / tty / ACM0
  • / tty / ACM1
  • / tty / ACM2

Làm thế nào tôi có thể xác định Arduino nào mà không kết nối với chúng thông qua kết nối nối tiếp ? Có một số sê-ri hoặc một id duy nhất trên Arduino?

Cảm ơn bạn đã dành thời gian.

Tình huống: Uno R3, Mega, Leonardo với / ttyACM [1,2,3]

đầu ra lsusb với các thiết bị theo thứ tự được đề cập ở trên:

...
Xe buýt 001 Thiết bị 011: ID 2341: 0043
Xe buýt 001 Thiết bị 013: ID 2341: 8036
...
Xe buýt 001 Thiết bị 014: ID 2341: 0042

Nhà cung cấp lsusb -d: thiết bị -vvv hiển thị cho từng người

Đoàn kết

Xe buýt 001 Thiết bị 014: ID 2341: 0042
Mô tả thiết bị:
  b Bước sóng 18
  bDescriptorType 1
  bcdUSB 1.10
  Truyền thông bDeviceClass 2
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPquetSize0 8
  idVendor 0x2341
  idSản phẩm 0x0042
  bcdDevice 0,01
  iSản xuất 1 Arduino (www.arduino.cc)
  sinh sản 2
  iSerial 220 55330313735351910141
  bNumConfigurations 1
  Mô tả cấu hình:
    bước 9
    bDescriptorType 2
    wTotalLpm 62
    bNumInterfaces 2
    bConfigurationValue 1
    cấu hình 0
    bmAttribution 0xc0
      Tự cấp nguồn
    MaxPower 100mA
    Mô tả giao diện:
      bước 9
      bDescriptorType 4
      bnternterNumber 0
      bAlternate Đặt 0
      điểm số 1
      Truyền thông bInterfaceClass 2
      Tóm tắt bInterfaceSubClass 2 (modem)
      bInterfaceProtocol 1 lệnh AT (v.25ter)
      iInterface 0
      Tiêu đề CDC:
        bcdCDC 10.01
      CDC ACM:
        bmCapabilities 0x06
          gửi nghỉ
          mã hóa dòng và trạng thái nối tiếp
      Liên minh CDC:
        bMasterInterface 0
        bSlaveInterface 1
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x82 EP 2 IN
        bmAttribution 3
          Chuyển loại ngắt
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0008 1x 8 byte
        giá trị 255
    Mô tả giao diện:
      bước 9
      bDescriptorType 4
      mặt số 1
      bAlternate Đặt 0
      bNumEndpoint 2
      bInterfaceClass 10 Dữ liệu CDC
      bInterfaceSubClass 0 Không sử dụng
      bInterfaceProtocol 0
      iInterface 0
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointAddress 0x04 EP 4 OUT
        bmAttribution 2
          Chuyển loại số lượng lớn
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 1
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x83 EP 3 IN
        bmAttribution 2
          Chuyển loại số lượng lớn
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 1
Trạng thái thiết bị: 0x0000
  (Xe buýt hỗ trợ)

Leonardo:

Xe buýt 001 Thiết bị 013: ID 2341: 8036
Mô tả thiết bị:
  b Bước sóng 18
  bDescriptorType 1
  bcdUSB 2,00
  bDeviceClass 0 (Được xác định ở cấp Giao diện)
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPquetSize0 64
  idVendor 0x2341
  idSản phẩm 0x8036
  bcdDevice 1,00
  iSản xuất 1 Arduino LLC
  iP sinh 2 Arduino Leonardo
  iSerial 0
  bNumConfigurations 1
  Mô tả cấu hình:
    bước 9
    bDescriptorType 2
    wTotalLpm 100
    bNumInterfaces 3
    bConfigurationValue 1
    cấu hình 0
    bmAttribution 0x80
      (Xe buýt hỗ trợ)
    MaxPower 500mA
    Hiệp hội giao diện:
      b Bước 8
      bDescriptorType 11
      bFirstInterface 0
      bnternterCount 2
      bFeftClass 2 Communications
      Tóm tắt bFunctionSubClass 2 (modem)
      bFunctionProtocol 1 lệnh AT (v.25ter)
      iChức năng 0
    Mô tả giao diện:
      bước 9
      bDescriptorType 4
      bnternterNumber 0
      bAlternate Đặt 0
      điểm số 1
      Truyền thông bInterfaceClass 2
      Tóm tắt bInterfaceSubClass 2 (modem)
      bInterfaceProtocol 0 Không
      iInterface 0
      Tiêu đề CDC:
        bcdCDC 1.10
      Quản lý cuộc gọi CDC:
        bmCapabilities 0x01
          quản lý cuộc gọi
        bDataInterface 1
      CDC ACM:
        bmCapabilities 0x06
          gửi nghỉ
          mã hóa dòng và trạng thái nối tiếp
      Liên minh CDC:
        bMasterInterface 0
        bSlaveInterface 1
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x81 EP 1 IN
        bmAttribution 3
          Chuyển loại ngắt
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 0
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x83 EP 3 IN
        bmAttribution 2
          Chuyển loại số lượng lớn
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 0
    Mô tả giao diện:
      bước 9
      bDescriptorType 4
      bnternterNumber 2
      bAlternate Đặt 0
      điểm số 1
      bInterfaceClass 3 Thiết bị giao diện con người
      bInterfaceSubClass 0 Không có phân lớp
      bInterfaceProtocol 0 Không
      iInterface 0
        Mô tả thiết bị HID:
          bước 9
          bDescriptorType 33
          bcdHID 1,01
          bCountryCode 0 Không được hỗ trợ
          bNumDescriptors 1
          Báo cáo bDescriptorType 34
          wDescriptorLpm 101
          Mô tả báo cáo: (chiều dài là 101)
            Mục (Toàn cầu): Trang sử dụng, dữ liệu = [0x01] 1
                            Điều khiển máy tính để bàn chung
            Mục (Địa phương): Cách sử dụng, dữ liệu = [0x02] 2
                            Chuột
            Mục (Chính): Bộ sưu tập, dữ liệu = [0x01] 1
                            Ứng dụng
            Mục (Địa phương): Cách sử dụng, dữ liệu = [0x01] 1
                            Con trỏ
            Mục (Chính): Bộ sưu tập, dữ liệu = [0x00] 0
                            Vật lý
            Mục (Toàn cầu): ID báo cáo, dữ liệu = [0x01] 1
            Mục (Toàn cầu): Trang sử dụng, dữ liệu = [0x09] 9
                            nút
            Mục (Địa phương): Tối thiểu sử dụng, dữ liệu = [0x01] 1
                            Nút 1 (Chính)
            Mục (Địa phương): Tối đa sử dụng, dữ liệu = [0x03] 3
                            Nút 3 (Đệ tam)
            Mục (Toàn cầu): Tối thiểu hợp lý, dữ liệu = [0x00] 0
            Mục (Toàn cầu): Tối đa hợp lý, dữ liệu = [0x01] 1
            Mục (Toàn cầu): Số lượng báo cáo, dữ liệu = [0x03] 3
            Mục (Toàn cầu): Kích thước báo cáo, dữ liệu = [0x01] 1
            Mục (Chính): Đầu vào, dữ liệu = [0x02] 2
                            Biến dữ liệu tuyệt đối No_Wrap tuyến tính
                            Preferred_State No_Null_P vị trí Bitfield không biến đổi
            Mục (Toàn cầu): Số lượng báo cáo, dữ liệu = [0x01] 1
            Mục (Toàn cầu): Kích thước báo cáo, dữ liệu = [0x05] 5
            Mục (Chính): Đầu vào, dữ liệu = [0x03] 3
                            Biến liên tục tuyệt đối No_Wrap tuyến tính
                            Preferred_State No_Null_P vị trí Bitfield không biến đổi
            Mục (Toàn cầu): Trang sử dụng, dữ liệu = [0x01] 1
                            Điều khiển máy tính để bàn chung
            Mục (Địa phương): Cách sử dụng, dữ liệu = [0x30] 48
                            Hướng-X
            Mục (Địa phương): Cách sử dụng, dữ liệu = [0x31] 49
                            Hướng-Y
            Mục (Địa phương): Cách sử dụng, dữ liệu = [0x38] 56
                            Bánh xe
            Mục (Toàn cầu): Tối thiểu hợp lý, dữ liệu = [0x81] 129
            Mục (Toàn cầu): Tối đa hợp lý, dữ liệu = [0x7f] 127
            Mục (Toàn cầu): Kích thước báo cáo, dữ liệu = [0x08] 8
            Mục (Toàn cầu): Số lượng báo cáo, dữ liệu = [0x03] 3
            Mục (Chính): Đầu vào, dữ liệu = [0x06] 6
                            Biến dữ liệu tương đối No_Wrap tuyến tính
                            Preferred_State No_Null_P vị trí Bitfield không biến đổi
            Mục (Chính): Bộ sưu tập cuối, dữ liệu = không có
            Mục (Chính): Bộ sưu tập cuối, dữ liệu = không có

            ......

      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x84 EP 4 IN
        bmAttribution 3
          Chuyển loại ngắt
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 1
Trạng thái thiết bị: 0x0000
  (Xe buýt hỗ trợ)

Và Mega256:

Xe buýt 001 Thiết bị 014: ID 2341: 0042
Mô tả thiết bị:
  b Bước sóng 18
  bDescriptorType 1
  bcdUSB 1.10
  Truyền thông bDeviceClass 2
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPquetSize0 8
  idVendor 0x2341
  idSản phẩm 0x0042
  bcdDevice 0,01
  iSản xuất 1 Arduino (www.arduino.cc)
  sinh sản 2
  iSerial 220 55330313735351910141
  bNumConfigurations 1
  Mô tả cấu hình:
    bước 9
    bDescriptorType 2
    wTotalLpm 62
    bNumInterfaces 2
    bConfigurationValue 1
    cấu hình 0
    bmAttribution 0xc0
      Tự cấp nguồn
    MaxPower 100mA
    Mô tả giao diện:
      bước 9
      bDescriptorType 4
      bnternterNumber 0
      bAlternate Đặt 0
      điểm số 1
      Truyền thông bInterfaceClass 2
      Tóm tắt bInterfaceSubClass 2 (modem)
      bInterfaceProtocol 1 lệnh AT (v.25ter)
      iInterface 0
      Tiêu đề CDC:
        bcdCDC 10.01
      CDC ACM:
        bmCapabilities 0x06
          gửi nghỉ
          mã hóa dòng và trạng thái nối tiếp
      Liên minh CDC:
        bMasterInterface 0
        bSlaveInterface 1
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x82 EP 2 IN
        bmAttribution 3
          Chuyển loại ngắt
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0008 1x 8 byte
        giá trị 255
    Mô tả giao diện:
      bước 9
      bDescriptorType 4
      mặt số 1
      bAlternate Đặt 0
      bNumEndpoint 2
      bInterfaceClass 10 Dữ liệu CDC
      bInterfaceSubClass 0 Không sử dụng
      bInterfaceProtocol 0
      iInterface 0
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointAddress 0x04 EP 4 OUT
        bmAttribution 2
          Chuyển loại số lượng lớn
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 1
      Mô tả điểm cuối:
        bước 7
        bDescriptorType 5
        bEndpointĐịa chỉ 0x83 EP 3 IN
        bmAttribution 2
          Chuyển loại số lượng lớn
          Loại đồng bộ Không
          Dữ liệu loại sử dụng
        wMaxPquetSize 0x0040 1x 64 byte
        giá trị 1
Trạng thái thiết bị: 0x0000
  (Xe buýt hỗ trợ)

lsusb -vvvnói?
Ignacio Vazquez-Abrams

Bạn có thể rút phích cắm một cái và xem cái nào biến mất?
Chim cánh cụt vô danh

1
Không thực sự, tôi muốn làm điều này cho một mảng cảm biến năng lượng mặt trời từ xa sẽ rất xa để ai đó làm điều đó khi nó khởi động lại.
vlad b.

Ignacio Vasquez-Abrams - làm cách nào tôi có thể ánh xạ thông tin từ lsusb -vvv sang / dev / ttyACM <x>? Có cái gì trong đầu ra lsusb tôi có thể phân tích? Cảm ơn bạn cho ý tưởng!
vlad b.

Bạn có một Arduino khác mà bạn có thể so sánh đầu ra với?
Ignacio Vazquez-Abrams

Câu trả lời:


6

Giả sử bản phân phối của bạn đang sử dụng udev:

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

Bạn có thể cần quyền root để chạy cái này (sudo / su). Nó sẽ xuất ra một danh sách thông tin như thế này:

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

Đây là một Uno với phần sụn được sửa đổi trên atmega16u2 (usb thành nối tiếp). Các dòng quan tâm có lẽ là ID_MODEL_ID và ID_MODEL_FROM_DATABASE.


Cảm ơn bạn. Tôi đang sử dụng OpenWrt trong trường hợp này với hotplug2 theo mặc định nhưng tôi sẽ thử chuyển sang udev và kiểm tra điều này.
vlad b.

5

Bạn có thể thêm một bí danh cho mỗi. Sau đó, bạn biết đó là cái nào. Đây là một hướng dẫn tốt đẹp về cách thiết lập này.

Đây là một đoạn mà tôi đã viết dựa trên hướng dẫn. Trong ví dụ dưới đây, tôi đang sử dụng bộ chuyển đổi USB sang nối tiếp FTDI RS232RL, mà tôi tin là những gì Arduino cũng sử dụng.

  1. Để gán bí danh cho thiết bị USB-serial, chúng tôi cần tìm một số thông tin trên thiết bị
  2. Cắm usb. Điều này giả định rằng bạn đã cài đặt trình điều khiển cho mục đích sử dụng này là thiết bị và thiết bị sẽ hiển thị khi nhập:

lsusb

  1. Chúng ta sẽ cần những điều sau đây a. Id nhà cung cấp b. Id sản phẩm c. Số sê-ri thiết bị
  2. Để làm điều này, phải mất một chút săn bắn. Tất cả các thiết bị của bạn đăng nhập các mục trong '/ var / log / message'.

Do đó, chúng tôi có thể đọc tệp này và tìm đúng USB:

grep "ftdi" /var/log/messages

Bạn cũng có thể sử dụng "usb"

  1. Đây là tìm tất cả các tin nhắn được gắn thẻ với ftdi:

  2. Bên cạnh ftdi_sio, có một số như 1-1.2. Đây là thiết bị USB

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

Hoặc bạn có thể sử dụng:

dmesg | grep "usb 1-1.3"
  1. Điều này cung cấp cho chúng tôi tất cả các thông tin chúng tôi cần:

Bí danh USB

  1. Bây giờ với danh sách các số sê-ri trong tay, hãy tạo một quy tắc UDEV sẽ tạo một liên kết tượng trưng đẹp cho mỗi thiết bị này. Các quy tắc UDEV thường được phân tán thành nhiều tệp trong /etc/udev/rules.d. Tạo một tệp mới có tên 99-usb-serial.rules và đặt các dòng sau vào đó:

Trong ví dụ này, bí danh của tôi được gọi là 'lcdbox'

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A601ERJJ", SYMLINK+="lcdbox"
  1. SYMLINK là tên của bí danh của bạn. Trong trường hợp này bí danh của tôi là LCDbox.
  2. Lưu tệp và gõ

    kiểm soát sudo udevadm - quy tắc tải lại

  3. Kiểu

    ls hèl / dev / lcdbox

lrwxrwxrwx 1 root 7 ngày 1 tháng 1 năm 1970 / dev / lcdbox -> ttyUSB0

  1. Điều này cho thấy bí danh LCDbox của tôi được ánh xạ tới ttyUSB0

4

Điều này khá dễ dàng! Bạn phải tùy chỉnh phần sụn chip ftdi và thêm quy tắc udev:

Đầu tiên, có được ftdi_eepromthông qua apt-gethoặc từ các nguồn. Xác định thiết bị của bạn thông qua lsusb và nhận id:

lsusb

Thiết bị Bus 001 005: ID 0403: 6001 Thiết bị công nghệ tương lai Quốc tế, Ltd FT 232 Nối tiếp (UART) IC
....

Chuẩn bị một cấu hình và chắc chắn rằng, đó vendor_idproduct_idphù hợp. Tùy chỉnh các chuỗi trong Stringsphần để có một id duy nhất cho thiết bị của bạn.

eller_id = 0x0403 # ID nhà cung cấp
sản phẩm_id = 0x6001 # ID sản phẩm

tối đa = 50 # Tối đa. tiêu thụ điện năng: giá trị * 2 mA. Sử dụng 0 nếu self_powered = true.

###########
# Dây #
########### 
nhà sản xuất = "FTDI" # Nhà sản xuất
sản phẩm = "Arduino Nano" # Sản phẩm
nối tiếp = "arduino1" # nối tiếp

###########
# Tùy chọn #
###########
self_powered = false # Tắt cái này cho xe buýt chạy
remote_wakeup = false # Bật tính năng này cho tính năng đánh thức từ xa
use_serial = true # Sử dụng chuỗi số sê-ri

# Thông thường không phải thay đổi một trong những cờ này
# BM_type_chip = true # Chip mới hơn đều là loại BM
in_is_isochronous = false # Trong Endpoint là không đồng bộ
out_is_isochronous = false # Out Endpoint là không đồng bộ
Suspend_pull_downs = false # Kích hoạt tính năng treo xuống để giảm sức mạnh
change_usb_version = false # Thay đổi phiên bản USB
usb_version = 0x0200 # Chỉ được sử dụng khi thay đổi_usb_version được bật

########
# Linh tinh #
########

filename = "eeprom.old" # Tên tệp, để trống để bỏ qua việc ghi tệp
cbus0 = RXLED #
cbus1 = TXLED #

Kết xuất phần mềm ftdi hiện tại:

ftdi_eeprom --read-eprom

Lệnh này tạo ${pwd}/eeprom.old, chứa phần sụn hiện tại trên ftdi. Sao lưu tệp này trước khi tiếp tục , vì trong quá trình flash-eepromtệp được viết lại. Sau khi sao lưu, flash ftdi:

ftdi_eeprom --flash-eeprom myconfig.conf

Bây giờ, tạo một quy tắc udev, như vậy

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

vào /etc/udev/rules.d/90-arduino-usb.rulesvà khởi động lại udev.

service udev restart

Rút phích cắm và cắm lại thiết bị của bạn và thử

ls -lah /dev/arduino1

Trong trường hợp arduino1là chuỗi xác định theo serialở trên .conf.

Xem thêm: Rủi ro của ftdi_eeprom? - TX luôn cao sau khi nhấp nháy


3

Tôi đã sử dụng một tập lệnh để tạo bí danh /dev/và đồng thời đặt nhóm và quyền đối với nó udevgiống như các câu trả lời khác.

Nhưng nếu tôi không có, udevtôi sẽ lsusbchuyển sang grephoặc awk, như thế lsusb|grep -e "idProduct".

Dù sao, với udevquy định hoặc với lsusbgrepđể xác định các thiết bị USB, sử dụng idVendor, idProductiSerialDevice descriptormột phần của lsusbđể làm cho idenification thích hợp. Điều này idVendorcho bạn biết manufaturer, idProductnên xác nhận sản phẩm từ nhà sản xuất nhưng đôi khi họ sử dụng cùng một id sản phẩm cho nhiều hơn một sản phẩm. Cuối cùng, nếu cần, iSerialnên là một id duy nhất cho mỗi ví dụ về sản phẩm đó.


3

Trên Ubuntu 16.04 (và có thể cả các phiên bản trước hoặc các bản phân phối khác nữa), bạn có thể làm:

> ls /dev/serial/by-id

sẽ hiển thị (trên hộp của tôi nơi Arduino UNO được kết nối):

usb-Arduino__www.arduino.cc__0043_A4139363931351318241-if00

Bạn có thể dễ dàng phát hiện ID thiết bị 0043 (UNO) tại đây.

Tập tin này thực sự là một liên kết đến /dev/ttyACM0trong hộp của tôi.


2

Bạn luôn có thể thực hiện một số loại in id qua serial trong void setup (). Sau khi bảng nhất định được kết nối, nó sẽ gửi id này đến giao diện USB của bạn (mà bạn đang nghe với một loại ứng dụng daemon nào đó trên hộp linux của bạn). Khi bạn nhận được id, bạn có thể ánh xạ nó tới đường dẫn 'Arduino1': '/ dev / ttyACM0', 'Arduino2': '/ dev / ttyACM1', 'Arduino3': '/dev/ttyACM2'...etc

Xin lưu ý rằng khi thiết bị bị ngắt kết nối vì một số lý do, thiết bị có thể thay đổi đường dẫn vật lý để bạn có thể phải ánh xạ lại tất cả chúng. Trong trường hợp này, có thể tốt khi viết hàm riêng biệt ex: get_id () mà bạn có thể gọi bất cứ lúc nào (không chỉ khi khởi động).


1

Tôi rất muốn được xác định một số cách khác, như bản thân bản phác thảo phản ứng với một lệnh nhận dạng đặc biệt, chỉ để tránh các cách nhận dạng thiết bị kỳ quặc của USB.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.