2017-01-21 40 views
6

Tôi muốn có thể phát hiện khi cảm biến ngoại vi KHÔNG được kết nối với Raspberry Pi của tôi 3.Làm cách nào để biết thiết bị ngoại vi có được kết nối với GPIO không?

Ví dụ, nếu tôi có cảm biến hồng ngoại thụ động GPIO.

tôi có thể nhận được tất cả các cổng GPIO như thế này:

PeripheralManagerService manager = new PeripheralManagerService(); 
List<String> portList = manager.getGpioList(); 
if (portList.isEmpty()) { 
    Log.i(TAG, "No GPIO port available on this device."); 
} else { 
    Log.i(TAG, "List of available ports: " + portList); 
} 

Sau đó, tôi có thể kết nối tới một cổng như thế này:

try { 
    Gpio pir = new PeripheralManagerService().openGpio("BCM4") 
    } catch (IOException e) { 
     // not thrown in the case of an empty pin 
    } 

Tuy nhiên ngay cả khi pin rỗng tôi vẫn có thể kết nối với nó (có ý nghĩa về mặt kỹ thuật, vì gpio chỉ là nhị phân bật hoặc tắt). Dường như không có bất kỳ api nào, và tôi không thể nghĩ một cách logic về cách bạn có thể phân biệt giữa một pin có cảm biến ngoại vi được kết nối và một cảm biến "trống".

Do đó, tại thời điểm này, không có cách nào để tôi xác nhận theo lập trình rằng các cảm biến và mạch của tôi được thiết lập chính xác.

Bất kỳ ai có ý tưởng nào? Liệu nó có thể có được từ quan điểm điện tử không?

tham khảo tài liệu:

https://developer.android.com/things/sdk/pio/gpio.html

Trả lời

6

Có rất nhiều cách để làm "phát hiện sự hiện diện" bằng điện, nhưng không có gì mà bạn sẽ tìm thấy bản chất trong SoC. Bạn sẽ không thường hỏi một pin GPIO nếu có thứ gì đó được đính kèm - nó sẽ không có cách nào để nói với bạn điều đó.

Ghim GPIO bổ sung thường được sử dụng để phát hiện xem thiết bị ngoại vi có được gắn vào đầu nối hay không. Các plug cho một số cảm biến có thể bao gồm một "phát hiện" dòng đó là shorted xuống đất và kéo GPIO thấp khi cảm biến được đính kèm, ví dụ. USB và SDIO làm một cái gì đó tương tự với một số mạch chuyên dụng trong giao diện.

Bạn cũng có thể xây dựng các mạch phát hiện phức tạp hơn bằng cách sử dụng những thứ như cảm biến hiện tại, nhưng chắc chắn chúng phải đặt ra một tín hiệu nhị phân mà bạn chụp qua một GPIO chuyên dụng.

Điều này dễ thực hiện hơn đối với thiết bị ngoại vi nối tiếp vì bạn thường có thể gửi lệnh cơ bản và xác minh rằng bạn nhận được phản hồi.

2

Việc phát hiện chỉ sử dụng dòng đầu vào có thể khó khăn. Trước tiên, bạn muốn thu hẹp phạm vi của vấn đề. Xử lý như không hiện tại tình trạng của một cảm biến không được kết nối, cảm biến được kết nối nhưng không đáp ứng, hoặc cảm biến phản ứng một cách uncharacteristic.

Vì vậy, nếu đó là cảm biến kỹ thuật số, thì giao tiếp với bộ cảm biến có thể đủ để biết liệu nó có hiện diện hay không (đặc biệt là nếu có kiểm tra hoặc bit chẵn lẻ). Một số cảm biến tương tự cũng có thông số kỹ thuật cụ thể về cách nó hoạt động khi được kích hoạt. Bạn có thể sử dụng độ lệch so với các thông số kỹ thuật đó để xác định xem bộ cảm biến có hiện diện hay không.

Nếu bạn có cảm biến kỹ thuật số, hãy kiểm tra đầu ra của nó, nơi bạn đồng hồ dữ liệu (vì vậy tất cả 0 hoặc tất cả 1 đều hợp lệ) hoặc chỉ là 1 hoặc 0 nhị phân cho đầu ra cần sự giúp đỡ từ bên ngoài. Tương tự cho hầu hết các cảm biến analog.

Trợ giúp bên ngoài này sẽ là thứ bạn đặt hệ thống ở trạng thái được kiểm soát đã biết, nhấn nút và sau đó kiểm tra cảm biến cho đầu ra trong phạm vi cụ thể. Để chắc chắn, bạn muốn có ít nhất hai trạng thái khác nhau, để đảm bảo đầu vào số hoặc analog của bạn không bị kẹt ở trạng thái chính xác cho thử nghiệm của bạn.

Bất kỳ phương pháp nào khác đều nằm ngoài hệ thống. Sử dụng IO bổ sung để "phát hiện" một cảm biến có thể giúp tăng sự tự tin của cảm biến ở đó, nhưng bạn có thể nhận được các kết quả sai, trong đó tất cả những gì bạn đã học là "cái gì đó" ở đó - không nhất thiết là cảm biến mà bạn mong đợi.

Các vấn đề liên quan