W CH340 i rodzinie UART nie ma miejsca, w którym można by umieścić unikalny identyfikator. Jest to również problem dla typu PL2303. Próbowałem znaleźć rozwiązania tego problemu. Pierwszą i najłatwiejszą jest pozycja urządzenia na magistrali USB. Będzie unikalny dla każdego urządzenia. Jeśli używasz Linuksa, możesz znaleźć każde urządzenie pod / dev / serial / by-path. Istnieje również / dev / serial / by-id, ale będzie tam tylko jeden wpis dla tego urządzenia, ponieważ pokazuje ono ostatnie podłączone. Żetony FTDI będą miały tutaj unikalne wpisy. Tanie chipy tego nie zrobią, ale każdy z nich ma wpis w / dev / serial / by-path. Ta pozycja i nazwy urządzeń powinny pozostać przy ponownym uruchomieniu. Jeśli masz wiele zmian w urządzeniach USB, podłącz wszystkie urządzenia CH340 do tego samego koncentratora, a następnie podłącz je. Urządzenia będą wyliczać w kolejności, w jakiej są podłączone do koncentratora. Ta sztuczka z jednym hubem powinna działać również w systemie MacOS i Windows, powinny one być wyświetlane w tej samej kolejności.
Metoda trudniejsza - zasady udev. W przypadku urządzeń o unikalnym identyfikatorze, takich jak FTDI, możesz ustawić regułę udev, która widzi jej numer seryjny, a następnie tworzy dowiązanie symboliczne do tego urządzenia, jest to proste.
W przypadku urządzeń z tym samym numerem seryjnym lub bez niego jest to znacznie bardziej skomplikowane. Utworzyłem regułę udev, która wygląda następująco:
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”
gdy urządzenie pasuje do produktu i dostawcy taniego arduino, uruchamia na przykład skrypt „cheapduino.py” z urządzeniem jako argumentem
cheapduino.py ttyUSB0
Następnie skrypt Cheapduino łączy się szeregowo z urządzeniem i wysyła ciąg „ID”, a oprogramowanie urządzenia odpowiada DEVID = THX1138 lub cokolwiek innego. Skrypt następnie tworzy dowiązanie symboliczne / dev / THX1138, które wskazuje na / dev / ttyUSB0
Ta metoda ma wiele wad. Skrypt musi przekroczyć limit czasu, jeśli oprogramowanie na Cheapduino nie odpowiada. Również nie korzysta z funkcji SYMLINK udev, więc nie usunie martwych linków po rozłączeniu, ale nadpisze je przy ponownym połączeniu. Wszystkie Twoje taniegoinos muszą mieć tę funkcjonalność w swoim oprogramowaniu, z ustawionymi różnymi identyfikatorami urządzeń. Wszystkie muszą używać tej samej szybkości transmisji co skrypt, chyba że chcesz napisać bardzo złożony skrypt, który zajmuje dużo czasu. Wreszcie, ta metoda działa znacznie lepiej przy niskiej prędkości transmisji niż przy wysokiej prędkości transmisji, co ze względów czasowych może się nie udać za każdym razem. (tanieduino są tanie!) 9600 działa znacznie lepiej niż 115200, które działa po kilku próbach. Ale ponieważ wszystkie twoje arduinos CH340 muszą mieć tę samą prędkość dzięki tej metodzie, możesz jechać tylko tak wolno, jak najszybsze urządzenie.
Ta metoda DZIAŁA jednak i używam jej, ponieważ kupiłem zbyt wiele z tych tanich rzeczy.
Na koniec kup oryginalne Arduinos lub przynajmniej te z układami FTDI lub coś innego, co wysyła unikalny identyfikator urządzenia.
= Bogaty