2011-09-23 44 views
9

Tôi đang sử dụng Arduino để phát hiện sử dụng Python 2.7 trên Windows XP, nhưng bản chất không tĩnh của bản dịch cổng USB-nối tiếp đang khiến tôi đau đầu. Với một cổng nối tiếp vật lý không có vấn đề cứng mã hóa vị trí cổng, nhưng Arduino đang di chuyển xung quanh dựa trên những gì là hoặc không được cắm vào tại thời điểm instantiation đối tượng. Có cách nào trong Python cho tôi để chỉ nhận được địa chỉ cổng trong mỗi khởi tạo đối tượng và vượt qua nó để PyVISA hoặc pySerial?Phát hiện cổng Arduino trong Python

+1

hệ điều hành gì, phiên bản Python, và phiên bản pyserial? Bạn đã thử cái gì? Cái gì không hoạt động? Chi tiết, người đàn ông! – jathanism

+0

Đã thêm nội dung về phiên bản và hệ điều hành, nhưng tất cả mọi phiên bản của nhu cầu pyvisa hoặc pyserial là đầu vào vị trí là chuỗi văn bản như 'COM3'. – Elliot

Trả lời

0

Tôi khuyên bạn nên sử dụng tín hiệu bắt tay và quét tất cả các cổng. Ví dụ, gửi "whoru" từ kịch bản python của bạn đến arduiono và có mã trên arduiono phản ứng với "arduino" khi nó phát hiện "whoru" trên cổng nối tiếp. Bằng cách này, bạn quét các cổng, gửi cái bắt tay, và khi bạn nhận được phản hồi thích hợp, bạn biết cổng nào đang được bật.

+1

Điều này sẽ làm gián đoạn các thiết bị trên các cổng khác vì chúng sẽ nhận được đầu vào mà chúng không biết ý nghĩa của nó. Một trong những thiết bị tôi đang làm việc là một thiết bị crappy, nhưng không có gì tốt hơn để thực hiện công việc. Nếu nó nhận được tín hiệu xấu, nó sẽ khóa và cách duy nhất để thiết lập lại nó là rút hoàn toàn nó ra. – Elliot

2

Tôi cũng đề xuất bắt tay nhưng thực hiện vòng ay khác. Chỉ cần ĐỌC cho đầu vào từ tất cả các cổng Nối tiếp trước khi bắt đầu chương trình của bạn. Khi bạn bật thiết bị, bạn có thể làm cho nó gửi một cái gì đó giống như một tín hiệu ON. khi mã của bạn phát hiện tín hiệu ON trên cổng đó thì hãy bắt tay.

1

Trong pySerial có một cách khá ẩn để kiểm tra VID/PID trên tất cả các cổng nối tiếp (ít nhất là trên Windows). Chỉ cần tìm VID/PID của Arduino trong thuộc tính cổng adn đặt nó vào mã python.

Tất nhiên điều này sẽ không hoạt động nếu bạn đã nhiều Arduino kết nối (giống VID/PID)

import serial.tools.list_ports 

for port in list(serial.tools.list_ports.comports()): 
    if port[2].startswith('USB VID:PID=1234:5678'): 
     #here you have the right port 
Các vấn đề liên quan