No hay almacenamiento en el CH340 y la familia de UART donde puede colocar una identificación única. Esto también es un problema para el tipo PL2303. He estado tratando de encontrar soluciones para este problema. Primero y más fácil es la posición del dispositivo en el bus USB. Será único para cada dispositivo. Si está utilizando Linux, puede encontrar cada dispositivo en / dev / serial / by-path. También hay un / dev / serial / by-id, pero solo habrá una entrada para este dispositivo porque muestra la última conectada. Los chips FTDI tendrán cada uno entradas únicas aquí. Los chips baratos no lo harán, pero cada uno tiene una entrada en / dev / serial / by-path. Esta posición y los nombres de los dispositivos deben persistir durante los reinicios. Si tiene muchos cambios en sus dispositivos USB, conecte todos los dispositivos CH340 en el mismo concentrador, luego conéctelo. Los dispositivos se enumerarán en el orden en que están conectados al concentrador. Este truco de un solo concentrador debería funcionar para MacOS y Windows también, deberían aparecer en el mismo orden.
Método más difícil: reglas de udev. Para dispositivos con una ID única como FTDI, puede establecer una regla udev que vea su número de serie y luego cree un enlace simbólico a ese dispositivo, es sencillo.
Para dispositivos con el mismo número de serie o ninguno, es mucho más complejo. Creé una regla de udev que se ve así:
SUBSISTEMA == "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"
cuando el dispositivo coincide con el producto y el proveedor del arduino barato, ejecuta el script 'cheapduino.py' con el dispositivo como argumento, por ejemplo
cheapduino.py ttyUSB0
Luego, el script cheapduino se conecta en serie al dispositivo y envía la cadena 'ID' y el software en el dispositivo responde DEVID = THX1138 o lo que sea. El script crea un enlace simbólico / dev / THX1138 que apunta a / dev / ttyUSB0
Hay muchos inconvenientes en este método. El script debe agotar el tiempo de espera si el software del cheapduino no responde. Además, esto no está utilizando la función SYMLINK de udev, por lo que no limpiará los enlaces muertos al desconectarse, pero los sobrescribirá al volver a conectarlos. Todos sus dduinos baratos deben tener esta funcionalidad en su software, con diferentes ID de dispositivo establecidos. Todos deben usar la misma velocidad en baudios que el script a menos que desee escribir un script muy complejo que lleve mucho tiempo. Finalmente, este método funciona mucho mejor a baja velocidad en baudios que a alta velocidad en baudios, lo que por razones de tiempo puede no tener éxito cada vez. (¡los cheapduinos son baratos!) 9600 funciona mucho mejor que 115200, que funciona después de varios intentos. Pero dado que todos sus arduinos CH340 deben tener la misma velocidad con este método, solo puede ir tan lento como su dispositivo más rápido.
Sin embargo, este método sí funciona, y es lo que estoy usando porque compré demasiadas de estas cosas baratas.
Al final, compre Arduinos genuinos o al menos unos con chips FTDI o algo más que envíe una identificación de dispositivo única.
= Rico