Tidak ada penyimpanan di CH340 dan keluarga UART tempat Anda bisa memasukkan ID unik. Ini juga masalah untuk tipe PL2303. Saya telah berusaha mencari solusi untuk masalah ini. Pertama dan termudah adalah posisi perangkat di bus USB. Ini akan menjadi unik untuk setiap perangkat. Jika Anda menggunakan linux, Anda dapat menemukan setiap perangkat di bawah / dev / serial / by-path. Ada juga / dev / serial / by-id tetapi hanya akan ada satu entri di sana untuk perangkat ini karena itu menunjukkan yang terakhir terhubung. Setiap chip FTDI akan memiliki entri unik di sini. Chip murah tidak akan, tetapi masing-masing memiliki entri di bawah / dev / serial / by-path. Posisi ini, dan nama perangkat, harus bertahan di seluruh reboot. Jika Anda memiliki banyak perubahan pada perangkat USB Anda, colokkan semua perangkat CH340 ke hub yang sama, kemudian hubungkan. Perangkat akan menghitung sesuai urutan mereka terhubung ke hub. Trik satu-hub ini harus bekerja untuk MacOS dan windows juga, mereka harus muncul dalam urutan yang sama.
Aturan metode-udev yang lebih sulit. Untuk perangkat dengan ID unik seperti FTDI, Anda dapat menetapkan aturan udev yang melihatnya sebagai nomor seri dan kemudian membuat symlink ke perangkat itu, langsung saja.
Untuk perangkat dengan nomor seri yang sama atau tidak, itu jauh lebih kompleks. Saya membuat aturan udev yang terlihat seperti ini:
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"
ketika perangkat cocok dengan produk dan vendor arduino murah, ia menjalankan script 'cheapduino.py' dengan perangkat sebagai argumen, misalnya
cheapduino.py ttyUSB0
Kemudian skrip murduino terhubung secara serial ke perangkat dan mengirimkan string 'ID' dan perangkat lunak pada perangkat merespons DEVID = THX1138 atau apa pun. Script kemudian membuat symlink / dev / THX1138 yang menunjuk ke / dev / ttyUSB0
Ada banyak kelemahan dalam metode ini. Script harus habis jika perangkat lunak pada cheapduino tidak menjawab. Juga ini tidak menggunakan fungsi SYMLINK dari udev sehingga tidak akan membersihkan tautan mati saat terputus, tetapi ini akan menimpa mereka saat terhubung kembali. Semua murduino Anda harus memiliki fungsi ini dalam perangkat lunak mereka, dengan ID perangkat yang berbeda ditetapkan. Mereka semua harus menggunakan baud rate yang sama dengan skrip kecuali Anda ingin menulis skrip yang sangat rumit yang membutuhkan waktu lama. Akhirnya, metode ini bekerja lebih baik pada baud rate yang rendah daripada pada baud rate yang tinggi, yang karena alasan waktu mungkin tidak berhasil setiap saat. (cheapduino murah!) 9600 bekerja lebih baik daripada 115200 yang bekerja setelah beberapa kali mencoba. Tetapi karena semua arduinos CH340 Anda harus memiliki kecepatan yang sama dengan metode ini, Anda hanya bisa berjalan sepelan perangkat tercepat Anda.
Metode ini TIDAK berfungsi, dan itu yang saya gunakan karena saya membeli terlalu banyak barang murah ini.
Pada akhirnya, beli Arduino asli atau setidaknya yang dengan chip FTDI atau yang lainnya yang mengirimkan ID perangkat unik.
= Kaya