Non esiste spazio di archiviazione sul CH340 e sulla famiglia di UART in cui è possibile inserire un ID univoco. Questo è anche un problema per il tipo PL2303. Ho cercato di trovare soluzioni a questo problema. La prima e più semplice è la posizione del dispositivo sul bus USB. Sarà unico per ogni dispositivo. Se stai usando Linux puoi trovare ogni dispositivo in / dev / serial / by-path. C'è anche un / dev / serial / by-id ma ci sarà una sola voce lì per questo dispositivo perché mostra l'ultimo connesso. I chip FTDI avranno ciascuno voci uniche qui. I chip economici non lo faranno, ma ognuno di essi ha una voce in / dev / serial / by-path. Questa posizione e i nomi dei dispositivi dovrebbero persistere durante i riavvii. Se hai apportato molte modifiche ai tuoi dispositivi USB, collega tutti i dispositivi CH340 allo stesso hub, quindi collegalo. I dispositivi verranno enumerati nell'ordine in cui sono collegati all'hub. Questo trucco a un hub dovrebbe funzionare anche per MacOS e Windows, dovrebbero presentarsi nello stesso ordine.
Metodo più duro - regole udev. Per i dispositivi con un ID univoco come FTDI è possibile impostare una regola udev che visualizzi il suo numero seriale e quindi crei un collegamento simbolico a quel dispositivo, è semplice.
Per i dispositivi con lo stesso numero di serie o nessun numero, è molto più complesso. Ho creato una regola udev simile a questa:
SOTTOSISTEMA == "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"
quando il dispositivo corrisponde al prodotto e al fornitore dell'arduino economico, esegue lo script "cheapduino.py" con il dispositivo come argomento, ad esempio
cheapduino.py ttyUSB0
Quindi lo script cheapduino si collega via seriale al dispositivo e invia la stringa 'ID' e il software sul dispositivo risponde DEVID = THX1138 o altro. Lo script crea quindi un collegamento simbolico / dev / THX1138 che punta a / dev / ttyUSB0
Ci sono molti svantaggi di questo metodo. Lo script deve scadere se il software su cheapduino non risponde. Inoltre, questo non sta usando la funzione SYMLINK di udev, quindi non pulirà i collegamenti morti al momento della disconnessione, ma li sovrascriverà al momento della riconnessione. Tutti i tuoi cheapduinos devono avere questa funzionalità nel loro software, con diversi ID dispositivo impostati. Tutti devono usare la stessa velocità di trasmissione dello script a meno che non si desideri scrivere uno script molto complesso che richiede molto tempo. Infine, questo metodo funziona molto meglio con un baud rate basso che con un baud rate elevato, che per motivi di tempistica potrebbe non riuscire ogni volta. (cheapduinos sono economici!) 9600 funziona molto meglio di 115200 che funziona dopo diversi tentativi. Ma poiché tutti i tuoi arduinos CH340 devono avere la stessa velocità con questo metodo, puoi solo andare lento come il tuo dispositivo più veloce.
Questo metodo FUNZIONA però, ed è quello che sto usando perché ho comprato troppe di queste cose economiche.
Alla fine, acquista Arduinos originali o almeno quelli con chip FTDI o qualcos'altro che invia un ID dispositivo univoco.
= Rich