На CH340 та сімействі UART немає місця, де ви можете поставити унікальний ідентифікатор. Це також проблема для типу PL2303. Я намагався знайти рішення для цієї проблеми. Перше і найпростіше - це розташування пристрою на шині USB. Він буде унікальним для кожного пристрою. Якщо ви використовуєте Linux, ви можете знайти кожен пристрій під / dev / serial / by-path. Також є / dev / serial / by-id, але для цього пристрою буде лише один запис, оскільки він показує останній підключений. У чіпах FTDI тут будуть унікальні записи. Дешеві фішки не будуть, але кожен з них має запис під / dev / serial / by-path. Ця позиція та назви пристроїв повинні зберігатися через перезавантаження. Якщо у вас багато змін на ваших USB-пристроях, підключіть усі пристрої CH340 до того ж концентратора, а потім підключіть його. Пристрої будуть перераховані в порядку, коли вони підключені до концентратора. Цей фокус з одним концентратором повинен працювати і для MacOS, і для Windows, вони повинні виходити в тому ж порядку.
Більш жорсткий метод - правила удеву. Для пристроїв з унікальним ідентифікатором, таким як FTDI, ви можете встановити правило udev, яке бачить його серійний номер, а потім створює символьне посилання на цей пристрій, це просто.
Для пристроїв з однаковим або відсутнім серійним номером це набагато складніше. Я створив правило udev, яке виглядає приблизно так:
SUBSYSTEM == "tty", ATTRS {продукт} == "USB2.0-серійний", 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 або будь-що інше. Потім сценарій створює symlink / dev / THX1138, який вказує на / dev / ttyUSB0
У цього методу існує маса недоліків. Сценарій повинен вичерпати час, якщо програмне забезпечення в дешевому програмі не відповідає. Крім того, це не використовує SYMLINK функцію udev, тому вона не очистить мертві посилання при відключенні, але перезапише їх при повторному підключенні. Усі ваші дешеві виробники повинні мати цю функціональність у своєму програмному забезпеченні з різними ідентифікаторами пристроїв. Всі вони повинні використовувати ту саму швидкість передачі, як і сценарій, якщо ви не хочете написати дуже складний сценарій, який займає тривалий час. Нарешті, цей метод працює набагато краще при низькій швидкості передачі, ніж при високій швидкості передачі, що з часових причин може не мати успіху щоразу. (cheapduinos є дешевим!) 9600 працює набагато краще, ніж 115200, яке працює після декількох спроб. Але оскільки всі ваші ардуїни CH340 повинні мати однакову швидкість за допомогою цього методу, ви можете рухатись так само повільно, як і ваш найшвидший пристрій.
Цей метод НЕ працює, і це те, що я використовую, тому що я придбав занадто багато цих дешевих речей.
Врешті-решт, придбайте справжні Arduinos або принаймні ті, з чіпами FTDI або щось інше, що надсилає унікальний ідентифікатор пристрою.
= Багатий