Không có bộ lưu trữ trên CH340 và gia đình UARTs nơi bạn có thể đặt một ID duy nhất. Đây cũng là một vấn đề đối với loại PL2303. Tôi đã cố gắng tìm giải pháp cho vấn đề này. Đầu tiên và dễ nhất là vị trí của thiết bị trên bus USB. Nó sẽ là duy nhất cho mỗi thiết bị. Nếu bạn đang sử dụng linux, bạn có thể tìm thấy từng thiết bị trong / dev / serial / by-path. Ngoài ra còn có / dev / serial / by-id nhưng sẽ chỉ có một mục ở đó cho thiết bị này vì nó hiển thị cái cuối cùng được kết nối. Mỗi chip FTDI sẽ có các mục duy nhất ở đây. Các chip giá rẻ sẽ không, nhưng mỗi chip có một mục dưới / dev / serial / by-path. Vị trí này, và tên thiết bị, nên tồn tại trong suốt quá trình khởi động lại. Nếu bạn có nhiều thay đổi đối với các thiết bị USB của mình, hãy cắm tất cả các thiết bị CH340 vào cùng một hub, sau đó cắm nó vào. Các thiết bị sẽ liệt kê theo thứ tự mà chúng được cắm vào trung tâm. Thủ thuật một trung tâm này cũng hoạt động cho MacOS và các cửa sổ, chúng sẽ xuất hiện theo cùng một thứ tự.
Phương pháp cứng hơn - quy tắc udev. Đối với các thiết bị có ID duy nhất như FTDI, bạn có thể đặt quy tắc udev nhìn thấy số sê-ri và sau đó tạo liên kết tượng trưng đến thiết bị đó, điều đó thật đơn giản.
Đối với các thiết bị có cùng số hoặc không có Số sê-ri, nó phức tạp hơn nhiều. Tôi đã tạo một quy tắc udev trông như thế này:
SUBSYSTEM == "tty", ATTRS {sản phẩm} == "USB2.0-serial", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idSản phẩm} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"
ví dụ, khi thiết bị khớp với sản phẩm và nhà cung cấp của arduino giá rẻ, nó sẽ chạy tập lệnh 'cheapduino.py' với thiết bị làm đối số
cheapduino.py ttyUSB0
Sau đó, tập lệnh cheapduino kết nối bằng nối tiếp với thiết bị và gửi chuỗi 'ID' và phần mềm trên thiết bị sẽ phản hồi DEVID = THX1138 hoặc bất cứ điều gì. Tập lệnh sau đó tạo một symlink / dev / THX1138 trỏ đến / dev / ttyUSB0
Có rất nhiều nhược điểm của phương pháp này. Kịch bản phải hết thời gian nếu phần mềm trên Arduino giá rẻ không trả lời. Ngoài ra, điều này không sử dụng chức năng SYMLINK của udev vì vậy nó sẽ không dọn sạch các liên kết chết khi ngắt kết nối, nhưng nó sẽ ghi đè lên chúng khi kết nối lại. Tất cả các máy tính giá rẻ của bạn phải có chức năng này trong phần mềm của họ, với các ID thiết bị khác nhau được đặt. Tất cả đều phải sử dụng tốc độ truyền giống như tập lệnh trừ khi bạn muốn viết một tập lệnh rất phức tạp mất nhiều thời gian. Cuối cùng, phương pháp này hoạt động tốt hơn nhiều ở tốc độ truyền thấp so với tốc độ truyền cao, vì lý do thời gian có thể không thành công mọi lúc. (cheapduinos là giá rẻ!) 9600 hoạt động tốt hơn nhiều so với 115200 hoạt động sau vài lần thử. Nhưng vì tất cả các arduinos CH340 của bạn phải có cùng tốc độ với phương pháp này, bạn chỉ có thể đi chậm như thiết bị nhanh nhất của mình.
Phương pháp này KHÔNG hoạt động, và đó là những gì tôi đang sử dụng vì tôi đã mua quá nhiều thứ rẻ tiền này.
Cuối cùng, hãy mua Arduinos chính hãng hoặc ít nhất là những chiếc có chip FTDI hoặc thứ gì khác gửi ID thiết bị duy nhất.
= Giàu