На CH340 и семействе UART нет места для хранения уникального идентификатора. Это также проблема для типа PL2303. Я пытался найти решение этой проблемы. Первым и самым простым является расположение устройства на шине USB. Это будет уникальным для каждого устройства. Если вы используете Linux, вы можете найти каждое устройство в / dev / serial / by-path. Существует также / dev / serial / by-id, но там будет только одна запись для этого устройства, поскольку оно показывает последнюю подключенную. Каждый из чипов FTDI будет иметь уникальные записи. Дешевые чипы не будут, но у каждого есть запись в / dev / serial / by-path. Эта позиция и имена устройств должны сохраняться при перезагрузке. Если у вас есть много изменений в ваших USB-устройствах, подключите все устройства CH340 к одному и тому же концентратору, а затем подключите его. Устройства будут перечислять в том порядке, в котором они подключены к концентратору. Этот трюк с одним хабом должен работать и для MacOS, и для окон, они должны появляться в том же порядке.
Сложнее методика правил. Для устройств с уникальным идентификатором, таких как FTDI, вы можете установить правило udev, которое видит его серийный номер, а затем создает символическую ссылку на это устройство, это просто.
Для устройств с одинаковым серийным номером или без него это намного сложнее. Я создал правило udev, которое выглядит так:
SUBSYSTEM == "tty", ATTRS {product} == "USB2.0-Serial", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"
когда устройство соответствует продукту и поставщику дешевого arduino, оно запускает скрипт «cheapduino.py», например, с устройством в качестве аргумента
cheapduino.py ttyUSB0
Затем скрипт cheapduino подключается к устройству через последовательный порт и отправляет строку «ID», а программное обеспечение на устройстве отвечает DEVID = THX1138 или что-то еще. Затем скрипт создает символическую ссылку / dev / THX1138, которая указывает на / dev / ttyUSB0
У этого метода есть много недостатков. Срок действия сценария должен истечь, если программное обеспечение на cheapduino не отвечает. Также это не использует функцию SYMLINK в udev, поэтому она не удаляет мертвые ссылки при отключении, а перезаписывает их при повторном подключении. Все ваши cheapduinos должны иметь эту функцию в своем программном обеспечении с разными идентификаторами устройств. Все они должны использовать ту же скорость передачи данных, что и сценарий, если вы не хотите писать очень сложный сценарий, который занимает много времени. Наконец, этот метод работает намного лучше при низкой скорости передачи данных, чем при высокой скорости передачи данных, которая по причинам синхронизации может не всегда успешна. (cheapduinos дешевы!) 9600 работает намного лучше, чем 115200, который работает после нескольких попыток. Но так как все ваши arduinos CH340 должны иметь одинаковую скорость с этим методом, вы можете работать только так медленно, как ваше самое быстрое устройство.
Этот метод работает, хотя, и это то, что я использую, потому что я купил слишком много этих дешевых вещей.
В конце концов, купите подлинные Arduinos или хотя бы те с чипами FTDI или что-то еще, что отправляет уникальный идентификатор устройства.
= Rich