CH340 및 UART 제품군에는 고유 ID를 넣을 수있는 스토리지가 없습니다. 이것은 PL2303 유형에도 문제가됩니다. 이 문제에 대한 해결책을 찾으려고 노력했습니다. 가장 쉬운 방법은 USB 버스에서 장치의 위치입니다. 각 장치마다 고유합니다. 리눅스를 사용한다면 / dev / serial / by-path에서 각 장치를 찾을 수 있습니다. / dev / serial / by-id도 있지만이 장치에는 마지막으로 연결된 장치가 표시되므로이 장치에는 하나의 항목 만 있습니다. FTDI 칩에는 각각 고유 한 항목이 있습니다. 저렴한 칩은 그렇지 않지만 / dev / serial / by-path 아래에 항목이 있습니다. 이 위치와 장치 이름은 재부팅시에도 유지되어야합니다. USB 장치를 많이 변경 한 경우 모든 CH340 장치를 동일한 허브에 꽂은 다음 연결하십시오. 장치는 허브에 연결된 순서대로 열거됩니다. 이 one-hub 트릭은 MacOS 및 Windows에서도 작동하며 동일한 순서로 나타납니다.
더 어려운 방법-udev 규칙. FTDI와 같은 고유 ID를 가진 장치의 경우 일련 번호 인 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 / ttyUSB0을 가리키는 심볼릭 링크 / dev / THX1138을 만듭니다.
이 방법에는 많은 단점이 있습니다. cheapduino의 소프트웨어가 응답하지 않으면 스크립트가 시간 초과되어야합니다. 또한 이것은 udev의 SYMLINK 기능을 사용하지 않으므로 연결이 끊어지면 죽은 링크를 정리하지 않지만 다시 연결하면 덮어 씁니다. 모든 싼두 이노는 소프트웨어에 다른 장치 ID 세트와 함께이 기능이 있어야합니다. 오랜 시간이 걸리는 매우 복잡한 스크립트를 작성하지 않는 한 모두 스크립트와 동일한 전송 속도를 사용해야합니다. 마지막으로,이 방법은 높은 보오율보다 낮은 보오율에서 훨씬 더 효과적이며, 타이밍 이유로 인해 매번 성공하지 못할 수도 있습니다. (싼두 이노는 싸다!) 9600은 여러 번 시도한 후에 115200보다 훨씬 잘 작동한다. 그러나이 방법을 사용하면 모든 CH340 arduino의 속도가 동일해야하므로 가장 빠른 장치만큼 느리게 이동할 수 있습니다.
이 방법은 작동하지만이 싼 것들을 너무 많이 사서 사용하고 있습니다.
결국, 정품 Arduino 또는 FTDI 칩이있는 제품 또는 고유 한 장치 ID를 보내는 다른 제품을 구입하십시오.
= 리치